Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
Power Management Guide
Gestione consumo energetico su Red Hat Enterprise Linux 6
Edizione 1.0
Red Hat Inc.
Don Domingo
Sommario
Capitolo 1. Panoramica
1.1. Importanza della gestione energetica
- riduzione generale del consumo energetico per ridurre i costi
- un livello termico più basso per i server e per i centri informatici
- costi secondari ridotti, incluso sistemi di raffreddamento, spazio, cavi, generatori e uninterruptible power supplies (UPS)
- estensione ciclo di vita della betteria dei laptop
- output più basso di biossido di carbonio
- soddisfare i requisiti legali o le regole governative relative all'IT ecologico, per esempio Energy Star
- soddisfare le linee guida aziendali per nuovi sistemi
- Domanda: Devo eseguire l'ottimizzazione?
- Domanda: Qual'è livello di ottimizzazione è necessario?
- Domanda: Il processo di ottimizzazione è in grado di diminuire le prestazioni ad un livello non accettabile?
- Domanda: Il tempo e le risorse necessarie per l'ottimizzazione di un sistema possono superare i benefici raggiungibili?
1.2. Principi di base sulla gestione energetica
Il kernel di Red Hat Enterprise Linux 5 utilizza un timer periodico per ogni CPU. Il suddetto timer impedisce la sospensione della CPU richiedendo la processazione di ogni evento del timer da parte della CPU stessa (gli eventi si susseguono dopo pochi millisecondi in base alle impostazioni), senza tenere in considerazione se uno o più processi è in esecuzione. La riduzione della frequenza in base alla quale si attiva una CPU ricopre un ruolo molto importante per una gestione energetica effettiva.
Applicabile per dispositivi con parti in movimento (per esempio, dischi fissi). Altresì, alcune applicazioni possono lasciare un dispositivo non utilizzato ancora abilitato "open"; se si verifica tale condizione il kernel crederà che tale dispositivo è ancora in uso, impedendo così al dispositivo stesso di entrare in uno stato di risparmio energetico.
In numerosi casi tuttavia ciò dipende dall'hardware e dalla corretta configurazione del BIOS. I componenti di sistemi vecchi spesso non presentano alcun supporto per le nuove funzioni supportate ora da Red Hat Enterprise Linux 6. Assicuratevi di utilizzare l'ultimissimo firmware ufficiale per i vostri sistemi e che nelle sezioni per la gestione energetica o per la configurazione del dispositivo del BIOS, le funzioni di gestione energetica risultino abilitate. Alcune funzioni includono:
- SpeedStep
- PowerNow!
- Cool'n'Quiet
- ACPI (C state)
- Smart
Le CPU moderne insieme all'Advanced Configuration and Power Interface (ACPI) presentano diversi stati. Essi sono i seguenti:
- Sleep (stati-C)
- Frequency (stati-P)
- Outout Heat (stati-T o "stati termici")
Uno dei modi migliori per risparmiare energia è quello di disalimentare i sistemi. Per esempio, la vostra azienda è in grado di sviluppare una cultura aziendale basata su un "IT ecologico" con direttive come lo spegnimento delle mecchine durante il pasto o dopo gli orari lavorativi. È possibile altresì consolidare diversi server fisici in un server più grande e virtualizzarli usando le tecnologie di virtualizzazione disponibili con Red Hat Enterprise Linux 6.
Capitolo 2. Analisi e verifica della gestione energetica
2.1. Panoramica sui processi di verifica ed analisi
2.2. PowerTOP
yum install powertop
powertop
aumentare il tempo per il VM dirty writeback
, ed il tasto (W) da premere per accettare il suggerimento.
C4
più alto di C3
), esso rappresenta la regolazione del sistema più idonea per quanto riguarda l'utilizzo della CPU. L'obiettivo principale è quello di avere uno stato C o P più alto per il 90%, o maggiore, durante un periodo di inattività del sistema.
<
>
), allora i wakeup sono spesso associati con un driver specifico che li genera. La regolazione dei driver generalmente ha bisogno di modifiche al kernel che oltrepassano lo scopo di questo documento. Tuttavia i processi eseguiti nello spazio utente che inviano segnali di wakeup sono più facilmente gestibili. Come prima cosa identificare se il servizio o l'applicazione deve essere eseguita su questo sistema, In caso contrario disattivarla. Per disabilitare un servizio permanentemente eseguire:
chkconfig servicename off
ps -awux | grep componentname
strace -p processid
aumentare il tempo per il VM dirty writeback
, ed il tasto (W) da premere per accettare il suggerimento. Queste modifiche saranno implementate solo dopo il riavvio del sistema. Per implementare permanentemente le modifiche PowerTOP mostra il comando esatto eseguito per questo procedimento. Aggiungere il comando al file /etc/rc.local
con l'editor di testo preferito in modo da implementare le modifiche ogni qualvolta si riavvia il computer.
Figura 2.1. PowerTOP in funzione
2.3. Diskdevstat e netdevstat
yum install systemtap tuned-utils kernel-debuginfo
diskdevstat
netdevstat
diskdevstat update_interval total_duration display_histogram
netdevstat update_interval total_duration display_histogram
- update_interval
- Il periodo in secondi tra gli aggiornamenti del display. Per impostazione predefinita:
5
- total_duration
- Il periodo in secondi dell'intera esecuzione. Per impostazione predefinita:
86400
(1 giorno) - display_histogram
- Indica se usare gli istogrammi per tutti i dati raccolti alla fine della esecuzione.
PID UID DEV WRITE_CNT WRITE_MIN WRITE_MAX WRITE_AVG READ_CNT READ_MIN READ_MAX READ_AVG COMMAND 2789 2903 sda1 854 0.000 120.000 39.836 0 0.000 0.000 0.000 plasma 15494 0 sda1 0 0.000 0.000 0.000 758 0.000 0.012 0.000 0logwatch 15520 0 sda1 0 0.000 0.000 0.000 140 0.000 0.009 0.000 perl 15549 0 sda1 0 0.000 0.000 0.000 140 0.000 0.009 0.000 perl 15585 0 sda1 0 0.000 0.000 0.000 108 0.001 0.002 0.000 perl 2573 0 sda1 63 0.033 3600.015 515.226 0 0.000 0.000 0.000 auditd 15429 0 sda1 0 0.000 0.000 0.000 62 0.009 0.009 0.000 crond 15379 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 15473 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 15415 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 15433 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 15425 0 sda1 0 0.000 0.000 0.000 62 0.007 0.007 0.000 crond 15375 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 15477 0 sda1 0 0.000 0.000 0.000 62 0.007 0.007 0.000 crond 15469 0 sda1 0 0.000 0.000 0.000 62 0.007 0.007 0.000 crond 15419 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 15481 0 sda1 0 0.000 0.000 0.000 61 0.000 0.001 0.000 crond 15355 0 sda1 0 0.000 0.000 0.000 37 0.000 0.014 0.001 laptop_mode 2153 0 sda1 26 0.003 3600.029 1290.730 0 0.000 0.000 0.000 rsyslogd 15575 0 sda1 0 0.000 0.000 0.000 16 0.000 0.000 0.000 cat 15581 0 sda1 0 0.000 0.000 0.000 12 0.001 0.002 0.000 perl 15582 0 sda1 0 0.000 0.000 0.000 12 0.001 0.002 0.000 perl 15579 0 sda1 0 0.000 0.000 0.000 12 0.000 0.001 0.000 perl 15580 0 sda1 0 0.000 0.000 0.000 12 0.001 0.001 0.000 perl 15354 0 sda1 0 0.000 0.000 0.000 12 0.000 0.170 0.014 sh 15584 0 sda1 0 0.000 0.000 0.000 12 0.001 0.002 0.000 perl 15548 0 sda1 0 0.000 0.000 0.000 12 0.001 0.014 0.001 perl 15577 0 sda1 0 0.000 0.000 0.000 12 0.001 0.003 0.000 perl 15519 0 sda1 0 0.000 0.000 0.000 12 0.001 0.005 0.000 perl 15578 0 sda1 0 0.000 0.000 0.000 12 0.001 0.001 0.000 perl 15583 0 sda1 0 0.000 0.000 0.000 12 0.001 0.001 0.000 perl 15547 0 sda1 0 0.000 0.000 0.000 11 0.000 0.002 0.000 perl 15576 0 sda1 0 0.000 0.000 0.000 11 0.001 0.001 0.000 perl 15518 0 sda1 0 0.000 0.000 0.000 11 0.000 0.001 0.000 perl 15354 0 sda1 0 0.000 0.000 0.000 10 0.053 0.053 0.005 lm_lid.sh
- PID
- l'ID del processo dell'applicazione
- UID
- l'ID utente con il quale le applicazioni sono in esecuzione
- DEV
- il dispositivo sul quale si è verificato l'I/O
- WRITE_CNT
- il numero totale di operazioni di scrittura
- WRITE_MIN
- il tempo più breve usato da due operazioni consecutive di scrittura (in secondi)
- WRITE_MAX
- il tempo più lungo usato da due operazioni consecutive di scrittura (in secondi)
- WRITE_AVG
- il tempo medio usato da due operazioni consecutive di scrittura (in secondi)
- READ_CNT
- il numero totale di operazioni di lettura
- READ_MIN
- il tempo più breve usato da due operazioni consecutive di lettura (in secondi)
- READ_MAX
- il tempo più lungo usato da due operazioni consecutive di lettura (in secondi)
- READ_AVG
- il tempo medio usato da due operazioni consecutive di lettura (in secondi)
- COMMAND
- il nome del processo
PID UID DEV WRITE_CNT WRITE_MIN WRITE_MAX WRITE_AVG READ_CNT READ_MIN READ_MAX READ_AVG COMMAND 2789 2903 sda1 854 0.000 120.000 39.836 0 0.000 0.000 0.000 plasma 2573 0 sda1 63 0.033 3600.015 515.226 0 0.000 0.000 0.000 auditd 2153 0 sda1 26 0.003 3600.029 1290.730 0 0.000 0.000 0.000 rsyslogd
WRITE_CNT
maggiore di 0
, ciò significa che è stato eseguito un processo di scrittura durante la misurazione. Tra questi plasma risulta essere la peggior applicazione: infatti ha eseguito il maggior numero di operazioni di scrittura, e di conseguenza il tempo medio tra operazioni di scrittura è risultato il più basso. Per questo motivo Plasma rappresenta il miglior candidato da investigare se si desidera identificare le applicazioni più inefficienti in termini di consumo energetico.
strace -p 2789
strace
presentava un percorso ripetitivo ogni 45 secondi il quale apre un file cache dell'icona KDE dell'utente per un processo di scrittura seguito dalla chiusura del file. Tale operazione comportava una scrittura del disco fisso poichè i metadati del file (in particolare il periodo della modifica) venivano modificati. La correzione finale impedisce l'esecuzione di chiamate non necessarie senza il verificarsi di aggiornamenti per le icone.
2.4. Battery Life Tool Kit
-a
.
office
scrive un testo, corregge il contenuto ed esegue le stesse operazioni per uno spreadsheet. L'esecuzione di BLTK insieme a PowerTOP o qualsiasi altro tool per la verifica e analisi, permetterà all'utente di eseguire una prova per verificare se le ottimizzazioni apportate hanno avuto alcun effetto sulla macchina durante la sua esecuzione. Poichè è possibile eseguire carichi di lavoro più di una volta per le varie impostazioni, sarà possibile confrontarne i risultati per le vaire impostazioni.
yum install bltk
bltk workload opzioni
idle
per 120 secondi:
bltk -I -T 120
-I
,--idle
- il sistema è sospeso, per un utilizzo di riferimento per il confronto con altri carichi di lavoro
-R
,--reader
- simula la lettura dei documenti (per impostazione predefinita, con Firefox)
-P
,--player
- simula la visione dei file multimedia da una unità CD o DVD (per impostazione predefinita con mplayer)
-O
,--office
- simula la modifica dei documenti con la suite OpenOffice.org
-a
,--ac-ignore
- Ignora se l'alimentazione AC è disponibile (necessario per un uso desktop)
-T numero_si_secondi
,--time numero_si_secondi
- il periodo (in secondi) entro il quale eseguire il test; usare questa opzione con il cairco di lavoro
idle
-F filename
,--file filename
- specifica un file da usare da parte di un carico di lavoro particolare, per esempio, un file per
player
da riprodurre invece di accedere l'unità CD o DVD -W applicazione
,--prog applicazione
- specifica un'applicazione da usare da parte di un carico di lavoro particolare, per esempio, un browser diverso da Firefox per
reader
bltk
.
/etc/bltk.conf
— per impostazione predefinita, ~/.bltk/workload.results.number/
. Per esempio, la directory ~/.bltk/reader.results.002/
contiene i risultati del terzo test con reader
(il primo test non è numerato). I suddetti risultati vengono distribuiti attraverso un certo numero di file di testo. Per condensare tali risultati in un formato facile da leggere eseguire:
bltk_report path_to_results_directory
Report
nella directory dei risultati. Per visualizzare i risultati in un emulatore del terminale usare l'opzione -o
:
bltk_report -o path_to_results_directory
2.5. Tuned e ktune
yum install tuned
/etc/tuned.conf
.
service tuned start
chkconfig tuned on
-d
,--daemon
- avvia tuned come demone invece di avviarlo in primo piano.
-c
,--conffile
- usa un file di configurazione con il percorso e file specificato, per esempio
--conffile=/etc/tuned2.conf
. L'impostazione predefinita è/etc/tuned.conf
. -D
,--debug
- utilizza il livello più alto di logging.
2.5.1. Il file tuned.conf
tuned.conf
contiene le impostazioni per la configurazione di tuned. Per impostazione predefinita, esso è posizionato in /etc/tuned.conf
, ma è possibile specificare un diverso nome ed una posizione usando tuned con l'opzione --conffile
.
[main]
la quale definisce i parametri generali per tuned. il file presenta anche una sezione per ogni plugin.
[main]
contiene le seguenti opzioni:
interval
- l'intervallo entro il quale tuned deve monitorare e regolare il sistema, in secondi. Il valore predefinito è
10
. verbose
- specifica se un output deve essere verboso. Il valore predefinito è
False
. logging
- specifica la priorità minima di messaggi da registrare. In ordine decrescente i valori permessi sono:
critical
,error
,warning
,info
, edebug
. Il valore predefinito èinfo
. logging_disable
- specifica la priorità massima di messaggi da registrare, qualsiasi messaggio con questa priorità o con priorità più bassa non verrà registrato. In ordine decrescente i valori permessi sono:
critical
,error
,warning
,info
, edebug
. Il valorenotset
disabilita questa opzione.
[CPUTuning]
. Ogni plugin può avere le proprie opzioni. ma le seguenti opzioni sono applicate a tutti i plugin:
enabled
- specifica se un plugin è stato o meno abilitato. Il valore predefinito è
True
. verbose
- specifica se l'output deve essere verboso. Se non impostato per questo plugin il valore viene ereditato da
[main]
. logging
- specifica la priorità minima dei messaggi da registrare. Se non impostato per questo plugin il valore viene ereditato da
[main]
.
[main] interval=10 pidfile=/var/run/tuned.pid logging=info logging_disable=notset # Disk monitoring section [DiskMonitor] enabled=True logging=debug # Disk tuning section [DiskTuning] enabled=True hdparm=False alpm=False logging=debug # Net monitoring section [NetMonitor] enabled=True logging=debug # Net tuning section [NetTuning] enabled=True logging=debug # CPU monitoring section [CPUMonitor] # Enabled or disable the plugin. Default is True. Any other value # disables it. enabled=True # CPU tuning section [CPUTuning] # Enabled or disable the plugin. Default is True. Any other value # disables it. enabled=True
2.5.2. Tuned-adm
tuned-adm
. Sarà anche possibile creare, modificare e cancellare profili desiderati.
tuned-adm list
tuned-adm active
tuned-adm profile profile_name
tuned-adm profile server-powersave
tuned-adm off
predefinito
sarà attivo. Red Hat Enterprise Linux 6 include anche i seguenti profili predefiniti:
- default
- il profilo predefinito per il risparmio energetico. Presenta l'impatto più basso sul risparmio energetico dei profili disponibili, ed abilita solo la CPU ed i plugin del disco di tuned.
- desktop-powersave
- un profilo per il risparmio energetico per i sistemi desktop. Abilita ALPM power saving per gli adattatori host SATA (consultare Sezione 3.6, «Aggressive Link Power Management») e per i plugin del disco, ethernet e della CPU di tuned.
- server-powersave
- un profilo per il risparmio energetico per i sistemi server. Abilita ALPM powersaving per gli adattatori SATA, disabilita la verifica del CD-ROM tramite HAL (consultare la pagina man di hal-disable-polling) ed attiva i plugin del disco e della CPU di tuned.
- laptop-ac-powersave
- un profilo di medio impatto per il risparmio energetico per i laptop eseguiti tramite AC. Abilita l'ALPM powersaving per gli adattatori host SATA, WiFi power saving, ed i plugin del disco, ethernet e della CPU di tuned.
- laptop-battery-powersave
- un profilo ad elevato impatto per il risparmio energetico per laptop alimentati a batteria. Esso attiva tutti i meccanismi di risparmio energetico dei precedenti profili ed abilita lo scheduler per il risparmio energetico multi-core per sistemi con wakeup bassi, assicurando che il governatore ondemand sia attivo e che AC97 audio power-saving sia stato abilitato. Utilizzare questo profilo per risparmiare la quantità più elevata di energia su qualsiasi tipo di sistema, non solo laptop alimentati a batteria. Da considerare che con questo profilo sarà possibile notare un impatto sulle prestazioni, ed in particolare sulla latenza del disco e dell'I/O di rete.
- throughput-performance
- un profilo server per una regolazione tipica delle prestazioni throughput. Esso disabilita i meccanismi di risparmio energetico tuned e ktune, abilita le impostazioni sysctl le quali migliorano le prestazioni throughput dell'I/O di rete e del disco, smistandosi su deadline scheduler.
- latency-performance
- un profilo server per una regolazione tipica delle prestazioni della latenza. Esso disabilita i meccanismi di risparmio energetico tuned e ktune ed abilita le impostazioni sysctl le quali migliorano le prestazioni della latenza dell'I/O di rete.
/etc/tune-profiles
. Quindi /etc/tune-profiles/desktop-powersave
contiene tutti i file necessari e le impostazioni del profilo. Ogni directory contiene un massimo di quattro file:
tuned.conf
- la configurazione per il servizio tuned da attivare per questo profilo.
sysctl.ktune
- le impostazioni sysctl usate da ktune. Il formato è identico al file
/etc/sysconfig/sysctl
(consultate le pagine man sysctl e sysctl.conf). ktune.sysconfig
- il file di configurazione di ktune, generalmente
/etc/sysconfig/ktune
. ktune.sh
- uno script della shell stile-init usato dal servizio ktune il quale è in grado di eseguire comandi specifici durante l'avvio per la regolazione del sistema.
laptop-battery-powersave
contiene un insieme molto ricco di regolazioni e quindi rappresenta un buon punto d'inizio. Copiare semplicemente tutta la directory nel nuovo nome della directory nel modo simile:
cp -a /etc/tune-profiles/laptop-battery-powersave/ /etc/tune-profiles/myprofile
# Disable HAL polling of CDROMS # for i in /dev/scd*; do hal-disable-polling --device $i; done > /dev/null 2>&1
2.6. DeviceKit-power e devkit-power
devkit-power
usando le seguenti opzioni:
--enumerate
,-e
- mostra il percorso dell'oggetto per ogni dispositivo di alimentazione sul sistema, per esempio:
/org/freedesktop/DeviceKit/power/devices/line_power_AC
/org/freedesktop/UPower/DeviceKit/power/battery_BAT0
--dump
,-d
- mostra i parametri per tutti i dispositivi di alimentazione sul sistema.
--wakeups
,-w
- mostra i wakeup della CPU sul sistema.
--monitor
,-m
- controlla il sistema per eventuali modifiche dei dispositivi di alimentazione, per esempio il collegamento e scollegamento di una sorgente di alimentazione AC, o la riduzione del livello energetico di una batteria. Premere Ctrl+C per terminare il monitoraggio del sistema.
--monitor-detail
- controlla il sistema per eventuali modifiche dei dispositivi di alimentazione, per esempio il collegamento e scollegamento di una sorgente di alimentazione AC, o la riduzione del livello energetico di una batteria. L'opzione
--monitor-detail
presenta informazioni più dettagliate rispetto a--monitor
. Premere Ctrl+C per terminare il monitoraggio del sistema. --show-info object_path
,-i object_path
- mostra tutte le informazioni disponibili per un percorso particolare. Per esempio, per ottenere le informazioni su di una batteria del sistema rappresentata dal percorso
/org/freedesktop/UPower/DeviceKit/power/battery_BAT0
, eseguire:devkit-power -i /org/freedesktop/UPower/DeviceKit/power/battery_BAT0
2.7. GNOME Power Manager
- Alimentazione tramite AC
- Alimentazione tramite batteria
- Generale
2.8. Altri mezzi per il processo di verifica
- vmstat
- vmstat usato per ottenere informazioni dettagliate sui processi, memoria, paging, I/O del blocco, traps e attività della CPU. Usatelo per avere informazioni più approfondite sulle azioni generali del sistema e dei punti nei quali risulta occupato.
- iostat
- iostat è simile a vmstat ma solo per I/O su dispositivi a blocchi. Fornisce anche statistiche e output più verbosi.
- blktrace
- blktrace è un programma molto dettagliato per il tracciamento I/O del blocco. Suddivide le informazioni in blocchi singoli associati con le applicazioni. È molto utile se usato insieme a diskdevstat.
Capitolo 3. Infrastruttura principale e meccanismi
3.1. Stati inattivi della CPU
- C0
- stato operativo o di esecuzione. In questo stato la CPU è in esecuzione e non è inattiva.
- C1, Halt
- uno stato nel quale il processore non esegue alcuna istruzione ma non è generalmente in uno stato di alimentazione bassa. La CPU è in grado di continuare con la processazione senza alcun ritardo. Tutti i processori che offrono uno stato-C devono essere abilitati a questo stato. I processori Pentium 4 supportano uno stato C1 migliorato chiamato C1E il quale rappresenta uno stato per un consumo energetico più basso.
- C2, Stop-Clock
- uno stato nel quale il clock è stato sospeso per questo processore, mantenendo il suo stato completo per i registri e le cache, dopo aver riavviato il clock sarà possibile iniziare nuovamente la processazione. Questo è uno stato opzionale.
- C3, Sleep
- uno stato nel quale il processore entra in uno stato inattivo 'sleep' e non ha bisogno di mantener aggiornata la propria cache. La sua riattivazione da questo stato richiede un periodo più lungo rispetto allo stato C2 a causa di tale comportamento. Questo rappresenta uno stato opzionale.
3.2. Come usare i regolatori CPUfreq
3.2.1. Tipi di regolatori CPUfreq
Il regolatore Performance forza la CPU ad utilizzare la frequenza più elevata possibile dell'orologio. Questa frequenza verrà impostata staticamente e non sarà modificata. Per questo motivo questo regolatore non offre alcun beneficio relativo al risparmio energetico. Tale impostazione è idonea solo per carichi di lavoro molto elevati, ed anche in tal caso, solo quando la CPU è raramente (o mai) in uno stato inattivo (idle).
Al contrario il regolatore Powersave forza la CPU ad usare la frequenza più bassa possibile del clock. Questa frequenza verrà impostata staticamente e non verrà modificata. Per questo motivo questo regolatore offre un risparmio energetico massimo ma con la più bassa prestazione della CPU.
Il regolatore Ondemand è un regolatore dinamico che permette alla CPU di ottenere una frequenza massima quando il carico del sistema è elevato, ed una frequenza minima quando il sistema è inattivo (idle). Mentre tale regolatore permette al sistema di modificare il consumo energetico in base al carico, questo stato viene raggiunto a scapito della latenza tra i cambi di frequenza. Per questo motivo la latenza è in grado di controbilanciare qualsiasi beneficio relativo al risparmio energetico/prestazioni offerto dal regolatore Ondemand se il sistema si smista spesso tra carichi di lavoro elevati e inattivi.
Il regolatore Userspace permette ai programmi spazio utente (o qualsiasi processo in esecuzione come root) di impostare la frequenza. Questo regolatore viene normalmente usato insieme con il demone cpuspeed
. Tra tutti i regolatori, Userspace è quello più personalizzabile; ed in base alla sua configurazione, è in grado di fornire il miglior rapporto prestazione e consumo per il sistema.
Come il regolatore Ondemand, il regolatore Conservative modifica la frequenza clock in base all'uso. Tuttavia il regolatore Ondemand esegue tale processo in modo più aggressivo (e cioè dal valore massimo al valore minimo e viceversa), mentre il regolatore Conservative esegue lo smistamento tra frequenze in modo più graduale.
Nota
cron
. Ciò permetterà all'utente di impostare automaticamente regolatori specifici durante determinati periodi del giorno. Per questo motivo sarà possibile specificare un regolatore a bassa-frequenza durante i periodi di inattività (per esempio dopo l'orario lavorativo), e selezionare un regolatore con una frequenza più elevata durante i periodi di carico intenso.
3.2.2. Impostazione di CPUfreq
Procedura 3.1. Come aggiungere un driver CPUfreq
- Utilizzare il seguente comando per visualizzare i driver CPUfreq disponibili per il sistema;
ls /lib/modules/[kernel version]/kernel/arch/[architecture]/kernel/cpu/cpufreq/
- Usare
modprobe
per aggiungere il driver CPUfreq appropriato.modprobe [CPUfreq driver]
Durante l'utilizzo di questo comando assicurarsi di rimuovere il suffisso del filename.ko
.Importante
Quando si seleziona un driver CPUfreq appropriato, scegliere sempreacpi-cpufreq
al posto dip4-clockmod
. Anche se l'utilizzo dip4-clockmod
riduce la frequenza di clock di una CPU, esso non riduce il voltaggio.acpi-cpufreq
al contrario riduce il voltaggio insieme alla frequenza della CPU, riducendo il consumo energetico e l'output termico per ogni unità specifica ridotta espressa in kilohertz delle prestazioni. - Una volta impostato il driver CPUfreq sarà possibile visualizzare il regolatore usato dal sistema con:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
cat /sys/devices/system/cpu/[cpu ID]/cpufreq/scaling_available_governors
modprobe
per aggiungere i moduli del kernel in grado di abilitare il regolatore CPUfreq specifico da usare. I moduli del kernel sono disponibili in /lib/modules/[kernel version]/kernel/drivers/cpufreq/
.
Procedura 3.2. Come abilitare un regolatore CPUfreq
- Se un regolatore specifico non è stato elencato per la CPU usare
modprobe
per abilitare il regolatore che desiderate usare. Per esempio, se il regolatoreondemand
non è disponibile per la CPU utilizzare il seguente comando:modprobe cpufreq_ondemand
- Una volta riportato come disponibile sarà possibile abilitarlo usando:
echo [governor] > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
3.2.3. Regolazione Politica CPUfreq e velocità
/sys/devices/system/cpu/[cpu ID]/cpufreq/
. I suddetti parametri sono:
cpuinfo_min_freq
— Mostra la frequenza operativa minima disponibile della CPU (in KHz).cpuinfo_max_freq
— Mostra la frequenza operativa massima disponibile della CPU (in KHz).scaling_driver
— Mostra il driver CPUfreq usato per impostare la frequenza su questa CPU.scaling_available_governors
— Mostra i regolatori (governor) CPUfreq disponibili in questo kernel. Se desiderate un regolatore CPUfreq non elencato in questo file consultate Procedura 3.2, «Come abilitare un regolatore CPUfreq» in Sezione 3.2.2, «Impostazione di CPUfreq» per maggiori informazioni.scaling_governor
— Mostra il regolatore CPUfreq in uso. Per usare un regolatore diverso eseguireecho [governor] > /sys/devices/system/cpu/[cpu ID]/cpufreq/scaling_governor
(consultare Procedura 3.2, «Come abilitare un regolatore CPUfreq» in Sezione 3.2.2, «Impostazione di CPUfreq» per maggiori informazioni).cpuinfo_cur_freq
— Mostra la velocità corrente della CPU (in KHz).scaling_available_frequencies
— Elenca le frequenze disponibili per la CPU, in KHz.scaling_min_freq
andscaling_max_freq
— Imposta i limiti della politica della CPU, in KHz.affected_cpus
— Elenca le CPU che necessitano di un software per la coordinazione della frequenza.scaling_setspeed
— Usato per modificare la velocità di clock della CPU, in KHz. È possibile impostare solo una velocità all'interno dei limiti della politica della CPU (come perscaling_min_freq
escaling_max_freq
).
cat [tunable]
. Per esempio per visualizzare la velocità corrente di cpu0 (in KHz), usare:
cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq
.
echo [value] > /sys/devices/system/cpu/[cpu ID]/cpufreq/[tunable]
. Per esempio, per impostare la velocità minima di clock di cpu0 su 360 KHz, usare:
echo 360000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
3.3. Sospensione e ripristino
3.4. Tickless Kernel
3.5. Active-State Power Management
- predefinito
- imposta gli stati di alimentazione del link di PCIe in base alle impostazioni predefinite specificate dal firmware sul sistema (per esempio, BIOS). Questo è lo stato predefinito per ASPM.
- powersave
- imposta ASPM in modo da risparmiare energia quando possibile senza tenere in considerazione le prestazioni.
- prestazioni
- disabilita ASPM per permettere ai link PCIe di operare con una prestazione massima.
/sys/module/pcie_aspm/parameters/policy
, ma possono anche essere specificate al momento dell'avvio con il parametro del kernel pcie_aspm
, dove pcie_aspm=off
e pcie_aspm=force
disabilitano ed abilitano ASPM anche su dispositivi che non supportano ASPM.
Avvertimento
pcie_aspm=force
è stato impostato, l'hardware che non supporta ASPM può causare un arresto delle risposte da parte del sistema. Prima di impostare pcie_aspm=force
assicurarsi che tutti gli hardware PCIe sul sistema supportano ASPM.
3.6. Aggressive Link Power Management
Questa modalità imposta il link sullo stato più basso di alimentazione (SLUMBER) quando non è presente alcun I/O sul disco. Tale modalità è utile se si prevedono periodi lunghi di inattività.
Questa modalità imposta il link sul secondo stato di alimentazione più basso (PARTIAL) quando non vi è alcuna presenza di I/O sul disco. Questa modalità è stata ideata per permettere le transizioni negli stati (per esempio durante periodi intermittenti di I/O intensi e I/O inattivi) con il minimo impatto possibile sulle prestazioni.
medium_power
permette la transizione del link tra gli stati PARTIAL and fully-powered (cioè "ACTIVE") in base al carico. Da notare che non sarà possibile eseguire la transizione diretta di un link da uno stato PARTIAL a SLUMBER e viceversa; in questo caso entrambi gli stati non possono esseguire una transizione all'altro stato senza passare prima per lo stato ACTIVE.
ALPM è disabilitato, il link non entra in uno stato low-power quando non vi è presenza di I/O sul disco.
/sys/class/scsi_host/host*/link_power_management_policy
. Per modificare le impostazioni scrivere i valori descritti in questa sezione sui file o visualizzare i file per controllare le impostazioni correnti.
3.7. Ottimizzazione accesso unità Relatime
atime
, e la sua gestione richiede una serie costante di operazioni di scrittura da archiviare. Queste operazioni mantengono i dispositivi di storage ed il link relativi occupati ed alimentati. Poichè poche applicazioni utilizzano i dati atime
, l'attività di questo dispositivo di storage rappresenta una dispersione di alimentazione. In particolare, il processo di scrittura si verifica anche se il file non è stato letto dal dispositivo di storage ma dalla cache. Per un certo periodo di tempo il kernel di Linux ha supportato l'opzione noatime
per mount senza scrivere i dati atime
sui file sistem montati con questa opzione. Tuttavia la disabilitazione di questa funzione è problematica poichè alcune applicazioni si affidano ai dati atime
e quindi possono fallire se non disponibili.
relatime
. Relatime
mantiene i dati atime
ma esegue questa operazione non tutte le volte che si accede al file. Se questa opzione è abilitata i dati atime
vengono scritti sul disco solo se il file è stato modificato dall'ultimo aggiornamento dei dati atime
(mtime
), o se lo si accede per un periodo di tempo più lungo (il default è un giorno).
relatime
abilitata. Per annullare questa funzione su tutto il sistema usare il parametro d'avvio default_relatime=0
. Se relatime
è abilitato su di un sistema per impostazione predefinita, sarà possibile annullarlo per qualsiasi file system usando l'opzione norelatime
. Ed infine, per modificare il periodo di tempo predefinito prima del quale il sistema aggiorna i dati atime
di un file, usare il parametro d'avvio relatime_interval=
specificando il periodo in secondi. Il valore predefinito è 86400
.
3.8. Limitazione dell'alimentazione
Il Dynamic Power Capping è una funzione disponibile su server ProLiant e BladeSystem selezionati che permette agli amministratori di sistema di limitare il consumo energetico di un server o di un gruppo di server. Esso rappresenta un limite effettivo che il server non supererà mai sotto qualsiasi carico di lavoro. Questo limite non ha alcun effetto fino a quando il server non raggiunge il suo limite. A questo punto un processore di gestione modificherà la CPU P-states CPU ed il clock throttling limitando l'energia consumata.
/dev/hpilo/dXccbN
. Il kernel include anche una estensione dell'interfaccia hwmon
sysfs
per il supporto delle funzioni di limitazione dell'alimentazione, ed un driver hwmon
per i contatori d'alimentazione ACPI 4.0 che utilizzano l'interfaccia sysfs
. Insieme queste funzioni permettono al sistema operativo e ai tool dello spazio utente di leggere il valore configurato come limite, insieme all'uso energetico corrente del sistema.
Intel Node Manager impone un limite energetico sui sistemi tramite processori con stati-P e stati-T per limitare le prestazioni della CPU e quindi il consumo energetico. Impostando una politica di gestione energetica gli amministratori sono in grado di configurare i sistemi in modo da consumare meno energia durante periodi di basso carico, per esempio durante la notte o i fine settimana.
3.9. Gestione energetica dei grafici migliorata
Il Low-voltage differential signalling (LVDS) è un sistema in grado di trasmettere un segnale elettronico attraverso un filo di rame. Il sistema viene usato principalmente per la trasmissione di informazioni pixel su schermate liquid crystal display (LCD) in computer notebook. Tutti i display hanno una frequenza d'aggiornamento — la frequenza alla quale vengono ricevuti nuovi dati da un controllore di grafici e ridisegnare l'immagine sulla schermata. Generalmente la schermata riceve nuovi dati sessanta volte al secondo (una frequenza di 60 Hz). Quando il controllore della schermata e dei grafici sono collegati tramite LVDS, il sistema LVDS utilizza alimentazione ad ogni ciclo di aggiornamento. In uno stato inattivo la frequenza d'aggiornamento di numerosi schermate LCD può essere ridotta a 30 Hz senza notare alcun effetto (diversamente dai monitor cathode ray tube (CRT), dove una diminuzione nella frequenza d'aggiornamento produce un tremolio caratteristico). Il driver per gli adattatori grafici Intel creati all'interno del kernel usato in Red Hat Enterprise Linux 6 esegue il downclock automaticamente risparmiando 0.5 W quando la schermata è inattiva.
Synchronous dynamic random access memory (SDRAM) — usato per la memoria video negli adattatori grafici — viene ricaricato migliaia di volte al secondo permettendo alle celle individuali della memoria di conservare i dati archiviati nel loro interno. A parte la propria funzione principale di gestione dei dati, il controller della memoria è generalmente responsabile dell'inizializzazione dei cicli di aggiornamento. Tuttavia SDRAM presenta anche una modalità di auto aggiornamento con bassa alimentazione. In questa modalità la memoria utilizza un timer interno per generare i propri cicli di aggiornamento, permettendo al sistema di arrestare il controller della memoria senza mettere in pericolo i dati. Il kernel usato in Red Hat Enterprise Linux 6 è in grado di attivare l'auto aggiornamento della memoria negli adattatori grafici di Intel con uno stato inattivo, risparmiando così circa 0.8 W.
Le graphical processing units (GPUs) tipiche contengono clock interni che governano varie parti del proprio circuito interno. Il kernel usato in Red Hat Enterprise Linux 6 è in grado di ridurre la frequenza di alcuni dei clock interni nelle GPU ATI ed Intel. Riducendo i cicli eseguiti dai componenti della GPU in un dato periodo, si avrà un risparmio di energia che altrimenti sarebbe stata consumata con cicli non necessari. Il kernel riduce automaticamente la velocità dei clock quando la GPU è inattiva, aumentandola invece quando l'attività della GPU aumenta. Riducendo i cicli clock della GPU è possibile risparmiare fino a 5 W.
I driver grafici ATI e Intel in Red Hat Enterprise Linux 6 sono in grado di rilevare quando nessun monitor è collegato ad un adattatore ed arrestare completamente la GPU. Questa funzione è molto importante per server ai quali non viene regolarmente collegato loro alcun monitor.
3.10. RFKill
/dev/rfkill
, dove è presente lo stato corrente di tutti i radiotrasmettitori sul sistema. Ogni dispositivo ha il proprio stato RFKill corrente registrato in sysfs
. In aggiunta, RFKill emette uevents per ogni modifica dello stato in un dispositivo abilitato a RFKill.
rfkill list
per ottenere un elenco di dispositivi ognuno dei quali presenta un numero indice ad esso associato, iniziando con 0
. Utilizzare il suddetto numero per indicare a rfkill di bloccare o sbloccare un dispositivo, per esempio:
rfkill block 0
rfkill block wifi
rfkill block all
rfkill unblock
invece di rfkill block
. Per ottenere un elenco completo di categorie di dispositivi che rfkill è in grado di bloccare, eseguire rfkill help
3.11. Ottimizzazione Spazio utente
Red Hat Enterprise Linux 6 usa un tickless kernel (consultare Sezione 3.4, «Tickless Kernel»), il quale permette alle CPU di restare più a lungo in uno stato inattivo. Tuttavia il timer tick non è il solo motivo di wakeup eccessivi della CPU, anche le chiamate della funzione delle applicazioni possono impedire alla CPU di entrare o restare in uno stato inattivo. Le suddette chiamate sono state ridotte in oltre 50 applicazioni.
L'Input o output (I/O) per i dispositivi di storage e le interfacce di rete forza un consumo energetico da parte dei dispositivi. Nei dispositivi di rete e di storage che presentano stati di alimentazione ridotta quando inattivi (per esempio ALPM o ASPM), questo traffico può impedire al dispositivo di entrare o restare in uno stato inattivo, impedendo l'arresto del disco fisso se non utilizzato. Richieste eccessive e non necessarie allo storage sono state minimizzate in numerose applicazioni. In particolare quelle richieste che impedivano al disco fisso di arrestarsi.
I servizi che si avviano automaticamente sono causa di perdita di risorse del sistema. Al contrario i suddetti servizi dovrebbero essere impostati per default su "off" o "on demand" quando possibile. Per esempio il servizio BlueZ il quale abilita il supporto per Bluetooth, in precedenza veniva eseguito automaticamente all'avvio del sistema senza considerare se l'hardware Bluetooth era o meno presente. L'initscript BlueZ ora controlla la presenza dell'hardware Bluetooth sul sistema prima di avviare il servizio.
Capitolo 4. Impiego
4.1. Esempio — Server
Un webserver ha bisogno di una rete ed un I/O del disco. In base alla velocità del collegamento esterno 100 Mbit/s dovrebbe essere sufficiente. Se la macchina serve maggiormente pagine statiche, le prestazioni della CPU potrebbero non essere molto importanti. La scelta per il risparmio energetico può quindi includere:
- nessun plugin di rete o disco per tuned.
- ALPM abilitato.
- regolatore
ondemand
abilitato. - scheda di rete limitata a 100 Mbit/s.
Un server di elaborazione ha bisogno di CPU. Le impostazioni per il risparmio energetico potrebbero includere:
- in base ai compiti ed al luogo dove verranno archiviati i dati, plugin di rete o disco per tuned; o per sistemi batch-mode, tuned completamente attivo.
- in base all'utilizzo, anche il regolatore
performance
.
Un server di posta ha bisogno di I/O del disco e CPU. Le impostazioni per il risparmio energetico includono:
- Regolatore
ondemand
attivato, poichè le ultime percentuali di prestazioni della CPU non sono importanti. - nessun plugin di rete o disco per tuned.
- la velocità di rete non dovrebbe essere limitata poichè la posta è spesso interna e quindi può trarre benefici da un link 1 Gbit/s o 10 Gbit/s.
I requisiti per il fileserver sono simili a quelli del server di posta, ma in base al protocollo usato potrebbe essere necessaria una prestazione più elevata della CPU. Generalmente i server basati su Samba richiedono più CPU di NFS, e NFS generalmente ne richiede più di iSCSI. Anche in questo caso l'utente dovrà essere in grado di usare il regolatore ondemand
.
Una directory server generalmente ha requisiti più bassi per l'I/O del disco, in particolare se possiede una RAM sufficiente. La latenza della rete è più importante dell'I/O. È possibile effettuare una regolazione della latenza di rete con una velocità ridotta del link, ma a tale scopo è consigliato eseguire una prova per la rete in questione.
4.2. Esempio — Laptop
- Configurazione del BIOS del sistema per disabilitare tutto l'hardware non utilizzato. Per esempio, porte parallele o seriali, lettori schede, webcam, WiFi, e Bluetooth solo per fare alcuni nomi.
- Oscurare il display in ambienti più scuri dove non è necessario una illuminazione completa per leggere la schermata. Utilizzare Sistema+Preferenze → Gestione alimentazione sul desktop di GNOME, Kickoff Application Launcher+Computer+Impostazioni sistema+Avanzate → Gestione alimentazione su desktop KDE; oppure sulla linea di comando gnome-power-manager o xbacklight o i tasti funzione sul laptop.
- Usare il profilo
laptop-battery-powersave
di tuned-adm per abilitare l'intero set di meccanismi per il risparmio energetico. In questo caso saranno interessate le prestazioni e la latenza dell'interfaccia di rete e del disco fisso.
- usare il regolatore
ondemand
(abilitato per default in Red Hat Enterprise Linux 6) - abilitare la modalità laptop (parte del profilo
laptop-battery-powersave
):echo 5 > /proc/sys/vm/laptop_mode
- aumentare il tempo di svuotamento sul disco (parte del profilo
laptop-battery-powersave
):echo 1500 > /proc/sys/vm/dirty_writeback_centisecs
- disabilitare il watchdog nmi (parte del profilo
laptop-battery-powersave
):echo 0 > /proc/sys/kernel/nmi_watchdog
- abilitare AC97 audio power-saving (abilitato per impostazione predefinita in Red Hat Enterprise Linux 6):
echo Y > /sys/module/snd_ac97_codec/parameters/power_save
- abilitare il multi-core power-saving (parte del profilo
laptop-battery-powersave
):echo 1 > /sys/devices/system/cpu/sched_mc_power_savings
- abilitare l'auto-sospensione USB:
for i in /sys/bus/usb/devices/*/power/autosuspend; do echo 1 > $i; done
Da notare che l'auto-sospensione non funziona correttamente con tutti i dispositivi USB. - abilitare le impostazioni di alimentazione minima per ALPM (parte del profilo
laptop-battery-powersave
):echo min_power > /sys/class/scsi_host/host*/link_power_management_policy
- monatare il filesystem utilizzando relatime (default in Red Hat Enterprise Linux 6):
mount -o remount,relatime mountpoint
- attivare la modalità migliore per il risparmio energetico (parte del profilo
laptop-battery-powersave
):hdparm -B 1 -S 200 /dev/sd*
- disabilitare il CD-ROM polling (parte del profilo
laptop-battery-powersave
):hal-disable-polling --device /dev/scd*
- ridurre la luminosità della schermata a
50
o livello più basso, per esempio:xbacklight -set 50
- attivare DPMS per schermo inattivo:
xset +dpms; xset dpms 0 0 300
- ridurre i livelli di alimentazione Wi-Fi (parte del profilo
laptop-battery-powersave
):for i in /sys/bus/pci/devices/*/power_level ; do echo 5 > $i ; done
- disattivare Wi-Fi:
echo 1 > /sys/bus/pci/devices/*/rf_kill
- limitare la rete cablata a 100 Mbit/s (parte del profilo
laptop-battery-powersave
):ethtool -s eth0 advertise 0x0F
Appendice A. Suggerimenti per gli sviluppatori
- utilizzo dei thread.
- i wake-up della CPU non necessari e l'uso non efficiente dei processi di attivazione. Se necessario eseguire un processo di attivazione (race to idle), eseguire l'intero processo ed il più velocemente possibile.
- utilizzo non necessario di
[f]sync()
. - interrogazioni attive non necessarie o brevi timeout regolari. (Reazione agli eventi).
- utilizzo non efficiente dei processi di attivazione 'wake-up'.
- accesso inefficiente del disco. Utilizzo di buffer molto grandi per evitare un accesso del disco frequente. Scrivere un blocco molto grande per volta.
- utilizzo inefficiente dei timer. Se possibile raggruppare i timer attraverso le applicazioni (oppure attraverso i sistemi).
- I/O eccessivo, consumo energetico, o utilizzo della memoria (incluso perdite di memoria)
- esecuzione di computazione non necessaria.
A.1. Utilizzo dei thread
Python utilizza il Global Lock Interpreter[1], per questo motivo il threading sarà utile solo per operazioni I/O significative. Unladen-swallow [2] è una implementazione più veloce di Python attraverso la quale sarà possibile ottimizzare il vostro codice.
I thread di Perl sono stati originariamente creati per applicazioni in esecuzione senza il forking (come ad esempio i sistemi operativi Windows a 32-bit). Nei thread di Perl i dati vengono copiati per ogni thread (Copy On Write). Per impostazione predefinita i dati non vengono condivisi poichè gli utenti dovrebbero essere in grado di definire il livello di dati da condividere. Per tale processo il modulo threads::shared deve essere incluso. Tuttavia il modulo non copierà solo i dati (Copy On Write), ma creerà anche delle variabili utilizzando una quantità maggiore di tempo rendendolo più lento. [3]
I thread C condividono la stessa memoria, ogni thread ha un proprio stack ed il kernel non deve creare nuovi descrittori per il file ed assegnare nuovo spazio di memoria. C può utilizzare il supporto di un numero maggiore di CPU per più thread. Per questo motivo e per massimizzare le prestazioni, usare un linguaggio low-level come ad esempio C o C++. Se si utilizzo un linguaggio di programmazione considerate la scrittura di un C binding. Utilizzare un profiler per identificare le sezioni con una prestazione scadente del codice. [4]
A.2. Processi di attivazione
int fd; fd = inotify_init(); int wd; /* checking modification of a file - writing into */ wd = inotify_add_watch(fd, "./myConfig", IN_MODIFY); if (wd < 0) { inotify_cant_be_used(); switching_back_to_previous_checking(); } ... fd_set rdfs; struct timeval tv; int retval; FD_ZERO(&rdfs); FD_SET(0, &rdfs); tv.tv_sec = 5; value = select(1, &rdfs, NULL, NULL, &tv); if (value == -1) perror(select); else { do_some_stuff(); } ...
/proc/sys/fs/inotify/max_user_watches
ed anche se sarà possibile modificarlo, tale operazione non è consigliata. Altresì, nel caso in cui inotify fallisce, il codice deve cambiare il metodo di controllo, ciò significa che saranno presenti numerosi eventi #if #define
nel codice sorgente.
A.3. Fsync
Fsync
è conosciuto come operazione I/O molto esigente, ma ciò non è assolutamente vero. Per esempio, consultate l'articolo scritto da Theodore Ts'o Don't fear the fsync! [5] insieme alla discussione relativa.
fsync
e a causa delle impostazioni del file system (principalmente ext3 con modalità data-ordered), era presente un latenza lunga quando non accadeva nulla. Tale periodo poteva essere molto lungo (fino a 30 secondi) se un altro processo copiava contemporaneamente un file molto grande.
fsync
non era usato si potevano verificare alcuni problemi smistandosi sul file system ext4. Ext3 era stato impostato in modalità data-ordered, la quale ripuliva la memoria ogni pochi secondi salvandola sul disco, Con ext4 e laptop_mode, l'intervallo tra i processi di archiviazione era più lungo con una potenziale perdita dei dati se il sistema veniva improvvisamente arrestato. Ora ext4 è stato aggiornato, ma anche in questo caso sarà necessario considerare con attenzione il design delle applicazioni ed usare fsync
in modo appropriato.
/* open and read configuration file e.g. ~/.kde/myconfig */ fd = open("./kde/myconfig", O_WRONLY|O_TRUNC|O_CREAT); read(myconfig); ... write(fd, bufferOfNewData, sizeof(bufferOfNewData)); close(fd);
open("/.kde/myconfig", O_WRONLY|O_TRUNC|O_CREAT); read(myconfig); ... fd = open("/.kde/myconfig.suffix", O_WRONLY|O_TRUNC|O_CREAT); write(fd, bufferOfNewData, sizeof(bufferOfNewData)); fsync; /* paranoia - optional */ ... close(fd); rename("/.kde/myconfig", "/.kde/myconfig~"); /* paranoia - optional */ rename("/.kde/myconfig.suffix", "/.kde/myconfig");
Appendice B. Cronologia di revisione
Diario delle Revisioni | |||
---|---|---|---|
Revisione 1.0-10.400 | 2013-10-31 | Rüdiger Landmann | |
| |||
Revisione 1.0-10 | 2012-07-18 | Anthony Towns | |
| |||
Revisione 1.0-2 | Fri Oct 22 2010 | Rüdiger Landmann | |
| |||
Revisione 1.0-1 | Thu Oct 7 2010 | Rüdiger Landmann | |
| |||
Revisione 1.0-0 | Thu Oct 7 2010 | Rüdiger Landmann | |
|