{"id":1889,"date":"2017-08-19T19:19:00","date_gmt":"2017-08-19T18:19:00","guid":{"rendered":"https:\/\/weeeopen.polito.it\/?p=1889"},"modified":"2021-12-15T22:45:34","modified_gmt":"2021-12-15T21:45:34","slug":"gestione-dellalimentazione-parte-1-definizione-degli-stati-acpi","status":"publish","type":"post","link":"https:\/\/weeeopen.polito.it\/en\/gestione-dellalimentazione-parte-1-definizione-degli-stati-acpi\/","title":{"rendered":"Gestione dell&#8217;alimentazione, parte 1: definizione degli stati ACPI"},"content":{"rendered":"<h2 class=\"wp-block-heading\">Introduction<\/h2>\n\n\n\n<p>Questo \u00e8 il primo di una serie di articoli riguardanti le tecniche utilizzate dalle case produttrici di pc per gestire il sistema di alimentazione nei loro dispositivi. Quanto scritto fa riferimento all&#8217;elettronica presente nei laptop ma, a livello teorico, non si discosta di molto ci\u00f2 che avviene anche nei desktop; mentre a livello pratico le cose posso essere abbastanza diverse, infatti i desktop verranno trattati pi\u00f9 avanti.<\/p>\n\n\n\n<p>Nel corso degli anni le maggiori case produttrici hanno sviluppato in comune accordo standard di gestione energetica al fine di avere una maggiore compatibilit\u00e0 tra i loro dispositivi. Nel 1992 venne introdotto lo standard&nbsp;<strong>APM<\/strong>&nbsp;(<em>Advanced Power Management<\/em>), tuttavia presto diventato obsoleto a causa di una sempre maggiore necessit\u00e0 di risparmio energetico. Venne infatti rimpiazzato dalla&nbsp;<a href=\"http:\/\/www.uefi.org\/acpi\/specs\">specifica&nbsp;<strong>ACPI<\/strong><\/a>&nbsp;(<em>Advanced Configuration and Power Interface<\/em>), di cui si occupa questo articolo e che permette un controllo completo dell&#8217;alimentazione direttamente dal sistema operativo, a differenza del precedente metodo che ne permetteva la gestione solo attraverso il BIOS.<\/p>\n\n\n\n<p>La specifica ACPI definisce, tra le altre cose, degli&nbsp;<strong>stati<\/strong>&nbsp;che descrivono il comportamento delle principali componenti del computer in base al risparmio energetico desiderato. Quindi di fatto la specifica definisce ogni componente, nonch\u00e9 l&#8217;intero computer, come una macchina a stati finiti, dal punto di vista della gestione energetica.<br>In generale gli stati 0 (G0, S0, D0, etc&#8230;) sono stati attivi, in cui il sistema \u00e8 disponibile all&#8217;utente, mentre gli altri sono stati &#8220;addormentati&#8221;, dove un numero pi\u00f9 alto corrisponde a minori consumi e maggiore tempo per tornare allo stato attivo.<\/p>\n\n\n\n<p>La specifica ACPI fa riferimento in vari punti al contesto del sistema (<em>system context<\/em>) e al contesto del dispositivo (<em>device context<\/em>): questi non sono altro che &#8220;dati variabili&#8221; memorizzati nel dispositivo e necessari al suo immediato funzionamento. Ad esempio, su una CPU il contesto potrebbe indicare il contenuto dei registri, su un dispositivo USB il suo indirizzo sul bus, e cos\u00ec via. La specifica stabilisce in quali stati i contesti devono essere mantenuti, in quali possono essere persi, e in quali vengono persi dall&#8217;hardware ma \u00e8 richiesto al sistema operativo di implementare un metodo per salvarli in modo permanente.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Stati G (Sistema Globale)<\/h2>\n\n\n\n<p>Sono stati che descrivono la percezione che ha l&#8217;utente finale del sistema complessivo, cio\u00e8 del computer.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><em>G0<\/em>:<ul><li>Il sistema \u00e8 completamente funzionante e alimentato con il 100% dell&#8217;energia a disposizione<\/li><li>Alcuni dispositivi in quel momento inutilizzati potrebbero essere in uno stato &#8220;addormentato&#8221;, purch\u00e9 possano tornare a uno stato di funzionamento in tempi brevi<\/li><\/ul><\/li><li><em>G1<\/em>&nbsp;&#8220;Sistema addormentato&#8221;:<ul><li>Il pc sembra spento pur non essendolo effettivamente, i consumi in generale sono ridotti<\/li><li>La sessione di lavoro pu\u00f2 essere ripristinata senza necessariamente riavviare il sistema<\/li><li>I contesti relativi ai processi sono salvati in memoria<\/li><\/ul><\/li><li><em>G2<\/em>&nbsp;Spegnimento soft:<ul><li>Il pc consuma piccole quantit\u00e0 di energia, infatti ad esempio nei computer conformi allo standard ATX l&#8217;alimentatore fornisce la tensione di&nbsp;<em>5 V standby<\/em>&nbsp;alla scheda madre<\/li><li>Il sistema risulta spento a tutti gli effetti ma \u00e8 possibile riavviare il sistema mediante Wake On LAN<\/li><li>lo spegnimento avviene via software (dall&#8217;OS) oppure mediante il pulsante presente sul case dei computer, corrispondente al tasto per l&#8217;accensione<\/li><li>Per ripristinare la sessione di lavoro c&#8217;\u00e8 un&#8217;alta latenza (riavvio del sistema)<\/li><li>Nessun contesto viene salvato<\/li><\/ul><\/li><li><em>G3<\/em>&nbsp;Spegnimento meccanico:<ul><li>Azionato da un comando meccanico (tasto ON\/OFF), equivale a staccare fisicamente il cavo di alimentazione e la batteria se presente<\/li><li>Il sistema deve essere riacceso col medesimo tasto (non \u00e8 possibile ricorrere al Wake On LAN o al normale tasto di accensione), poi riavviato per ripristinare la sessione.<\/li><li>Un esempio pu\u00f2 essere il tasto presente sul retro di molti alimentatori desktop, che spegne completamente l&#8217;alimentatore (le uniche componenti del computer che restano alimentate sono il modulo RTC e la &#8220;memoria CMOS&#8221;, tramite la &#8220;batteria CMOS&#8221;)<\/li><li>Non viene consumata energia<\/li><\/ul><\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Stati S<\/h2>\n\n\n\n<p>Sono stati che descrivono cosa accade a livello di sistema. S0 \u00e8 associato a G0, S1-S4 si trovano all&#8217;interno di G1 e S5 \u00e8 associato a G2.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><em>S0<\/em>&nbsp;Stato attivo:<ul><li>Il computer \u00e8 alimentato, l&#8217;utente finale utilizza l&#8217;apparecchio<\/li><\/ul><\/li><li><em>S1<\/em>&nbsp;\/&nbsp;<em>S2<\/em>&nbsp;Stati &#8220;addormentati&#8221; (solitamente inutilizzati):<ul><li><em>S1<\/em>:<ul><li>Breve tempo di riaccensione<\/li><li>Nessun contesto viene perso<\/li><\/ul><\/li><li><em>S2<\/em>:<ul><li>Breve tempo di riaccensione<\/li><li>Vengono persi il contesto della CPU e le cache<\/li><\/ul><\/li><\/ul><\/li><li><em>S3<\/em>&nbsp;Stato &#8220;addormentato&#8221; (e.g. stand-by, sospensione in RAM):<ul><li>Breve tempo di ripristino della sessione<\/li><li>Prima di entrare nello stato il sistema operativo salva nella RAM i contesti di tutte le unit\u00e0 come CPU, chipset e dispositivi di I\/O, che vengono spenti<\/li><li>Al &#8220;risveglio&#8221; il sistema operativo ripristina i contesti dalla RAM. Questo permette un risveglio del sistema piuttosto rapido ma l&#8217;inconveniente \u00e8 che se viene a mancare corrente la sessione di lavoro viene persa, in quanto la RAM \u00e8 volatile<\/li><\/ul><\/li><li><em>S4<\/em>&nbsp;Stato &#8220;addormentato&#8221; (e.g. ibernazione, sospensione su hard disk):<ul><li>Alta latenza per tornare allo stato attivo (<em>S0<\/em>)<\/li><li>In questo livello anche la RAM viene spenta<\/li><li>Prima di entrare nello stato il sistema operativo salva tutti i contesti del sistema in un file su memoria di massa (letteralmente&nbsp;<em>Memory image<\/em>&nbsp;\u2192 copia della memoria virtuale dei processi, in pratica l&#8217;intero contenuto della RAM viene salvato in un file)<\/li><li>Al risveglio il sistema operativo ripristina i contesti dal file<\/li><\/ul><\/li><li><em>S5<\/em>&nbsp;Spegnimento software:<ul><li>Simile allo stato&nbsp;<em>S4<\/em>&nbsp;ma il sistema operativo non salva nessun contesto<\/li><li>Per riavviare la sessione \u00e8 necessario un riavvio completo del sistema operativo<\/li><\/ul><\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Stati addizionali<\/h3>\n\n\n\n<h2 class=\"wp-block-heading\">Stati C<\/h2>\n\n\n\n<p>Descrivono il comportamento della CPU. Si trovano tutti all&#8217;interno dello stato G0.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><em>C0<\/em>:<ul><li>La CPU esegue le istruzioni normalmente<\/li><\/ul><\/li><li><em>C1<\/em>:<ul><li>La CPU si trova in uno stato in cui&nbsp;<em>not<\/em>&nbsp;esegue istruzioni<\/li><li>Bassa latenza di ripristino della sessione<\/li><\/ul><\/li><li><em>C2<\/em>:<ul><li>\u00c8 necessario pi\u00f9 tempo per &#8220;risvegliare il sistema&#8221;, cio\u00e8 tornare allo stato C0, ma i consumi sono pi\u00f9 bassi rispetto allo stato C1<\/li><\/ul><\/li><li><em>C3<\/em>:<ul><li>Richiede pi\u00f9 tempo per il risveglio<\/li><li>Le cache non vengono pi\u00f9 aggiornate quindi al risveglio non saranno pi\u00f9 valide<\/li><\/ul><\/li><\/ul>\n\n\n\n<p>Il passaggio dallo stato C0 a C1 avviene, nei processori x86, tramite l&#8217;istruzione&nbsp;<strong>HLT<\/strong>&nbsp;(<em>halt<\/em>) che interrompe l&#8217;esecuzione di ulteriori istruzioni fino alla ricezione di una richiesta di interrupt, che riporta il processore nello stato C0.<br>Linux talvolta utilizza le istruzioni&nbsp;<strong>MWAIT<\/strong>&nbsp;o&nbsp;<strong>MWAITX<\/strong>, ma a grandi linee il funzionamento \u00e8 lo stesso.<br>Il firmware ACPI indica al sistema operativo la latenza di caso peggiore per tornare dagli stati C2 e C3 allo stato C0, mentre per lo stato C1 la specifica richiede che sia cos\u00ec bassa da &#8220;non preoccuparsene&#8221;: \u00e8 il sistema operativo a decidere quale passare a questi stati, in base al carico di lavoro e alla massima latenza accettabile.<\/p>\n\n\n\n<p>Negli stati C1 e successivi di solito viene effettuato&nbsp;<em>clock gating<\/em>&nbsp;per interrompere la distribuzione del clock, e quindi azzerare il consumo di potenza dinamico dei transistor, su tutte le parti del processore ad eccezione di quelle che devono rilevare interrupt o altri eventi esterni.<br>Nello stato C3 non viene pi\u00f9 distribuito segnale di clock all&#8217;interno della CPU.<br>La differenza tra C1 e C2 \u00e8 che il primo viene raggiunto tramite un&#8217;istruzione macchina, mentre il secondo con altri meccanismi che di solito si traducono nell&#8217;inviare un segnale a un piedino del processore, oltre al fatto che lo stato C2 ha consumi pi\u00f9 bassi e latenza di uscita pi\u00f9 alta rispetto al C1.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Esempio pratico<\/h3>\n\n\n\n<p>Su Linux \u00e8 possibile visualizzare il tempo speso dal processore nei vari stati tramite il comando&nbsp;<code>cpupower<\/code>.<br>Ad esempio,&nbsp;<code>cpupower monitor -i 10<\/code>&nbsp;restituisce queste informazioni, relative agli ultimi 10 secondi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    |Mperf               || Idle_Stats         \nCPU | C0   | Cx   | Freq || POLL | C1   | C2   \n   0|  9,17| 90,83|  1772||  0,00|  7,92| 83,15\n   1|  4,18| 95,82|  1457||  0,00|  4,74| 91,20\n   2|  7,72| 92,28|  1591||  0,00|  7,69| 84,80\n   3|  3,90| 96,10|  1422||  0,00|  3,71| 92,52\n   4|  7,32| 92,68|  1413||  0,00|  8,03| 84,86\n   5|  8,95| 91,05|  1596||  0,00|  6,63| 84,53\n   6| 10,61| 89,39|  1604||  0,00|  8,02| 81,57\n   7|  3,39| 96,61|  1495||  0,00|  7,29| 89,43<\/code><\/pre>\n\n\n\n<p>Gli 8 core del processore sono considerati come processori separati. Prendendo ad esempio il core 0, si pu\u00f2 notare che ha passato circa il 9% del tempo nello stato C0, ad una frequenza media di 1.77 GHz (alternando tra 1.4 e 1.9 GHz a causa del Dynamic Frequency Scaling, ma non \u00e8 indicato dall&#8217;output del comando), e circa l&#8217;8% e l&#8217;83% del tempo negli stati C1 e C2, rispettivamente.<\/p>\n\n\n\n<p>Lo stato C3 non \u00e8 supportato dal processore in questione, mentre POLL non \u00e8 un vero stato: si tratta di un ciclo di busy wait, utilizzato dal sistema operativo quando sono imminenti altre operazioni e la latenza per entrare e uscire dallo stato C1 sarebbe troppo alta, ma ci\u00f2 non fa parte della specifica ACPI.<\/p>\n\n\n\n<p>Sempre su Linux, all&#8217;interno della directory&nbsp;<code>\/sys\/devices\/system\/cpu\/cpu0\/cpuidle\/state0<\/code>&nbsp;e successive si trovano inoltre alcuni &#8220;file&#8221; con informazioni sull&#8217;uso degli stati C, divisi per core (a partire da cpu0). La&nbsp;<a href=\"https:\/\/www.kernel.org\/doc\/Documentation\/cpuidle\/sysfs.txt\">documentazione del kernel<\/a>&nbsp;indica quali dati sono disponibili e come interpretarli.<\/p>\n\n\n\n<p>Poich\u00e9 la latenza di uscita \u00e8 indicata dal firmware ACPI per tutti gli stati successivi a C1, si possono leggere da quella directory i valori rilevati dal kernel. Utilizzando il comando&nbsp;<code>cat \/sys\/devices\/system\/cpu\/cpu0\/cpuidle\/state*\/{name,latency}<\/code>&nbsp;e formattando l&#8217;output in una tabella si pu\u00f2 vedere che:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Stato<\/th><th>Latenza<\/th><\/tr><\/thead><tbody><tr><td>POLL<\/td><td>0<\/td><\/tr><tr><td>C1<\/td><td>0<\/td><\/tr><tr><td>C2<\/td><td>100<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>I valori sono espressi in microsecondi.<\/p>\n\n\n\n<p>Su un computer portatile recente si possono avere risultati pi\u00f9 interessanti, ad esempio:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    |Idle_Stats                                                    \nCPU | POLL | C1-S | C1E- | C3-S | C6-S | C7s- | C8-S | C9-S | C10- \n   0|  0,00| 16,08|  0,49|  0,04|  0,43|  0,00|  6,40|  0,00| 74,10\n   2|  0,00|  0,00|  0,00|  0,00|  0,00|  1,19|  2,53| 11,42| 79,80\n   1|  0,00|  0,00|  0,03|  0,00|  0,14|  0,00| 16,22|  0,00| 80,92\n   3|  0,00|  0,00|  0,00|  0,00|  0,00|  0,00|  3,09|  0,00| 96,17<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Stato<\/th><th>Latenza<\/th><\/tr><\/thead><tbody><tr><td>POLL<\/td><td>0<\/td><\/tr><tr><td>C1-SKL<\/td><td>2<\/td><\/tr><tr><td>C1E-SKL<\/td><td>10<\/td><\/tr><tr><td>C3-SKL<\/td><td>70<\/td><\/tr><tr><td>C6-SKL<\/td><td>85<\/td><\/tr><tr><td>C7s-SKL<\/td><td>124<\/td><\/tr><tr><td>C8-SKL<\/td><td>200<\/td><\/tr><tr><td>C9-SKL<\/td><td>480<\/td><\/tr><tr><td>C10-SKL<\/td><td>890<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Il suffisso SKL indica che il processore appartiene alla serie Intel Skylake, dettaglio non particolarmente rilevante nella trattazione corrente e che pu\u00f2 tranquillamente essere ignorato.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Stati C addizionali<\/h3>\n\n\n\n<p>Alcuni processori, soprattutto quelli per laptop, pi\u00f9 sensibili alla questione del risparmio energetico, talvolta supportano stati C addizionali. La specifica ACPI non li definisce esplicitamente: per alcuni ammette un metodo con cui la CPU pu\u00f2 comunicare quali supporta, mentre altri sono di fatto invisibili al sistema operativo.<br>Come sempre, pi\u00f9 il numero dello stato cresce, pi\u00f9 i consumi diminuiscono e la latenza per tornare allo stato C0 aumenta:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><em>C1E<\/em>&nbsp;(Intel):<ul><li>Viene ridotta anche la tensione (<em>Dynamic Voltage Scaling<\/em>, conosciuto anche come&nbsp;<em>undervolting<\/em>)<\/li><li>\u00c8 utilizzato automaticamente in alternativa allo stato C1<\/li><\/ul><\/li><li><em>C1E<\/em>&nbsp;(AMD):<ul><li>Viene interrotta la distribuzione di clock all&#8217;interno della CPU, come nel C3<\/li><li>Viene utilizzato in automatico dalla CPU quando tutti i core si trovano nello stato C1<\/li><\/ul><\/li><li><em>C2E<\/em>:<ul><li>Viene ridotta anche la tensione<\/li><li>\u00c8 utilizzato in alternativa allo stato C2<\/li><\/ul><\/li><li><em>C4<\/em>,&nbsp;<em>C4E<\/em>,&nbsp;<em>C6<\/em>&nbsp;e successivi:<ul><li>Viene ridotta anche la tensione (anche a 0 V nel caso di C6)<\/li><\/ul><\/li><\/ul>\n\n\n\n<p>Poich\u00e9 nei dispositivi mobili la CPU \u00e8 uno dei componenti che consumano di pi\u00f9 e che meglio si prestano a complesse operazioni di risparmio energetico (mentre su uno schermo, ad esempio, a parte ridurre la luminosit\u00e0 non si pu\u00f2 fare molto),&nbsp;<a href=\"http:\/\/www.hardwaresecrets.com\/everything-you-need-to-know-about-the-cpu-c-states-power-saving-modes\/\">esistono altre sottili differenze e sotto stati<\/a>, ma esulano dall&#8217;ambito di questo articolo e talvolta anche dalla specifica ACPI.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Stati P<\/h2>\n\n\n\n<p>Sono stati che si applicano sia alla CPU che ai dispositivi. Sono tutti stati attivi, cio\u00e8 che possono essere utilizzati solo nello stato C0 o D0.<\/p>\n\n\n\n<p>L&#8217;esatto numero di stati P (<em>P0<\/em>,&nbsp;<em>P1<\/em>,&nbsp;<em>P2<\/em>, etc&#8230;) \u00e8 definito dal dispositivo o dalla CPU e non pu\u00f2 superare 255.<\/p>\n\n\n\n<p>Servono per aumentare ulteriormente il risparmio energetico, infatti nel caso delle CPU all&#8217;aumentare dello stato diminuisce la frequenza interna di lavoro della CPU (<em>Dynamic Frequency Scaling<\/em>, conosciuto anche come&nbsp;<em>CPU throttling<\/em>) e di conseguenza il consumo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Stati D<\/h2>\n\n\n\n<p>Sono stati che descrivono il comportamento dei vari dispositivi collegati al sistema.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><em>D0<\/em>&nbsp;Completamente operativo:<ul><li>Il dispositivo \u00e8 completamente attivo<\/li><\/ul><\/li><li><em>D1<\/em>,&nbsp;<em>D2<\/em>:<ul><li>Sono stati intermedi, le loro caratteristiche variano a seconda del tipo di periferica<\/li><li>Utilizzati raramente<\/li><\/ul><\/li><li><em>D3<\/em>: Si suddivide in 2 sotto livelli:<ul><li><em>D3<sub>HOT<\/sub><\/em>&nbsp;:<ul><li>Viene ancora fornita l&#8217;alimentazione al dispositivo<\/li><li>Se \u00e8 un dispositivo PCIe, si porta lo stato Link a L1 in modo che il dispositivo ignori il clock fornito dal bus<\/li><li>Il dispositivo \u00e8 ancora enumerabile (identificabile, rilevabile) dal sistema operativo<\/li><\/ul><\/li><li><em>D3<\/em>&nbsp;o&nbsp;<em>D3<sub>COLD<\/sub><\/em>:<ul><li>L&#8217;alimentazione principale viene totalmente rimossa dal dispositivo<\/li><li>Il contesto del dispositivo viene perso<\/li><li>Se \u00e8 un dispositivo PCIe, si porta lo stato Link al livello:<ol><li><em>L2<\/em>&nbsp;se l&#8217;alimentazione ausiliaria (AUX) \u00e8 supportata dal dispositivo<\/li><li><em>L3<\/em>&nbsp;in caso contrario<\/li><\/ol><\/li><li>Il clock del BUS PCIe viene interrotto<\/li><li>Il dispositivo non \u00e8 pi\u00f9 enumerabile finch\u00e9 non verr\u00e0 nuovamente inizializzato<\/li><\/ul><\/li><\/ul><\/li><\/ul>\n\n\n\n<p>Gli stati D0 e D3<sub>COLD<\/sub>&nbsp;sono definiti e obbligatori per tutti i dispositivi, mentre gli altri sono obbligatori o ammessi solo per alcune classi di dispositivi indicati dalla specifica.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Stati non-ACPI<\/h2>\n\n\n\n<p>Anche alcuni dispositivi o bus, come quello PCI e PCIe, per gestire il risparmio energetico utilizzano un sistema di stati simile a quello ACPI, ma non trattato da quella specifica; sono infatti trattati all&#8217;interno delle specifiche di ogni singolo standard. Vista la loro importanza soprattutto nei computer portatili verranno accennati qui di seguito.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Stati S0ix<\/h3>\n\n\n\n<p>Gli stati&nbsp;<em>S0i1<\/em>&nbsp;&#8211;&nbsp;<em>S0i3<\/em>&nbsp;sono strettamente legati all&#8217;ambito dei notebook e sono utilizzati da alcuni SoC Intel. Hanno l&#8217;obiettivo di garantire consumi simili agli stati&nbsp;<em>S1<\/em>&nbsp;&#8211;&nbsp;<em>S3<\/em>&nbsp;ma un tempo di risveglio inferiore ed essere selezionabili direttamente dalla CPU quando vengono raggiunte opportune condizioni, senza l&#8217;intervento del sistema operativo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Stati T<\/h3>\n\n\n\n<p>Stati ormai obsoleti legati alle funzionalit\u00e0 della CPU, erano necessari con vecchi processori che potevano, in seguito a surriscaldamento, prendere fuoco. L&#8217;obiettivo era quello di far &#8220;rilassare&#8221; la CPU che quindi per una parte di tempo lavorava (circa 78%) mentre nel resto non eseguiva istruzioni permettendo un lieve raffreddamento: questo si ripeteva con intervalli regolari. Oggi sono stati soppiantati dagli stati C e P, nonch\u00e9 dalla capacit\u00e0 della maggior parte delle CPU di rilevare la propria temperatura e spegnersi se viene raggiunta una soglia limite.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Stati B<\/h3>\n\n\n\n<p>Descrivono il comportamento del bus PCI. Una cosa importante da tenere presente \u00e8 che pu\u00f2 essere abbandonato lo stato&nbsp;<em>B0<\/em>&nbsp;solamente se&nbsp;<strong>tutti<\/strong>&nbsp;i dispositivi collegati al bus risultano inattivi.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><em>B0<\/em>:<ul><li>Deve essere supportato da ogni bus PCI<\/li><li>In questo stato viene usato il bus per il trasferimento di informazioni<\/li><\/ul><\/li><li><em>B1<\/em>:<ul><li>Stato Idle<\/li><li>Non non avviene alcun trasferimento di dati<\/li><\/ul><\/li><li><em>B2<\/em>:<ul><li>Viene interrotto il segnale di clock<\/li><li>Per tornare allo stato&nbsp;<em>B0<\/em>&nbsp;sono necessari circa 50 ms<\/li><\/ul><\/li><li><em>B3<\/em>:<ul><li>Viene rimossa la tensione di alimentazione a tutti i dispositivi collegati al bus<\/li><li>Quando viene riapplicata la tensione (per tornare allo stato attivo) deve essere inviato il segnale&nbsp;<strong>RST#<\/strong>&nbsp;(il simbolo # indica un segnale &#8220;attivo basso&#8221;, cio\u00e8 attivato con uno stato logico 0) in modo da tornare allo stato di idle e successivamente allo stato attivo<\/li><\/ul><\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Stati L<\/h3>\n\n\n\n<p>Descrivono il comportamento dell&#8217;interfaccia PCIe.<\/p>\n\n\n\n<p>\u00c8 necessario specificare che ogni dispositivo PCIe \u00e8 alimentato dall&#8217;alimentazione principale, che pu\u00f2 essere disattivata per il risparmio energetico, e da un&#8217;alimentazione secondaria sempre presente (se non diversamente specificato) di circa 3.3 V. Quest&#8217;ultima svolge un ruolo importante in diverse situazioni in cui \u00e8 necessario mantenere abilitati dei moduli a computer spento, ad esempio per la funzionalit\u00e0 Wake on LAN.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><em>L0<\/em>:<ul><li>Il bus funziona a regime<\/li><\/ul><\/li><li><em>L0<sub>s<\/sub><\/em>&nbsp;IDLE elettrico (autonomo):<ul><li>Bassa latenza di uscita (circa 1 \u03bcs), per tornare a L0<\/li><li>Viene ridotto il consumo energetico anche se questo IDLE dura brevi intervalli di tempo, essendo un livello di transizione<\/li><li>In ogni transizione di stato (<em>L0<\/em>&nbsp;\u27f7&nbsp;<em>L1<\/em>) \u00e8 necessario passare per questo livello<\/li><\/ul><\/li><li><em>L1<\/em>&nbsp;IDLE elettrico (richiamato da un livello superiore):<ul><li>Bassa latenza di uscita (circa 2-4 \u03bcs)<\/li><li>Livello gestito dal protocollo&nbsp;<strong>ASPM<\/strong>&nbsp;(<em>Active State Power Management<\/em>, protocollo definito per aumentare il risparmio energetico nelle periferiche PCIe, porta il livello dello stato Link da L0 a L2\/L3 READY<\/li><li>In assenza di operazioni attive sull&#8217;interfaccia viene ridotta l&#8217;alimentazione<\/li><li>Sono inoltre possibili delle ulteriori operazioni per il risparmio energetico:<ul><li>Spegnimento di tutti i dispositivi radio<\/li><li><em>Clock gating<\/em>&nbsp;sulla maggior parte delle porte PCIe (viene ridotta ulteriormente la frequenza)<\/li><li>Spegnimento&nbsp;<strong>PLL<\/strong>&nbsp;(<em>Phase Locked Loop<\/em>)<\/li><\/ul><\/li><\/ul><\/li><li><em>L2\/L3 READY<\/em>:<ul><li>Fase di transizione tra lo stato L0<sub>s<\/sub>&nbsp;e L2 o L3<\/li><li>Prepara la porta PCIe a rimuovere la tensione d&#8217;alimentazione e il clock<\/li><li>Il dispositivo si trova in&nbsp;<em>D3<sub>HOT<\/sub><\/em>&nbsp;e si prepara ad entrare nel livello&nbsp;<em>D3<sub>COLD<\/sub><\/em><\/li><\/ul><\/li><li><em>L2<\/em>:<ul><li>Il dispositivo alimentato dalla tensione AUX<\/li><li>In questo livello agisce il segnale&nbsp;<strong>WAKE#<\/strong>, necessario ad esempio ad avviare il computer da remoto attraverso il Wake On LAN<\/li><\/ul><\/li><li><em>L3<\/em>:<ul><li>Vengono rimossi l&#8217;alimentazione e il clock<\/li><li>Il dispositivo \u00e8 completamente spento, visto che la tensione AUX non \u00e8 supportata<\/li><li>Per uscire da questo stadio \u00e8 necessario un riavvio del sistema<\/li><\/ul><\/li><\/ul>\n\n\n\n<p>I PLL sono circuiti di controllo molto usati nelle telecomunicazioni che permettono di ottenere, dato un segnale in ingresso, uno in uscita con la stessa fase di quello in entrata. Nei computer di solito vengono utilizzati per ottenere una frequenza pi\u00f9 alta da quella di un oscillatore.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Stati RC<\/h3>\n\n\n\n<p>RC sta per&nbsp;<em>Render Cpu<\/em>. Sono equivalenti agli stati C ma validi per le GPU (<em>RC0<\/em>&nbsp;&#8211;&nbsp;<em>RC5<\/em>). Raramente \u00e8 anche presente lo stato&nbsp;<em>RC6<\/em>. Esistono ulteriori stati (<em>RC6p<\/em>&nbsp;and&nbsp;<em>RC6pp<\/em>) dove viene ridotta ulteriormente la tensione di alimentazione, ma sono deprecati.<\/p>\n\n\n\n<p>Sono utilizzati praticamente solo da alcune GPU Intel, quindi non sono disponibili molte informazioni a riguardo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Riassunto<\/h2>\n\n\n\n<p>Tutti gli stati ACPI e PCIe appena descritti sono riassunti nella seguente immagine dove vengono collocati dal &#8220;pi\u00f9 acceso&#8221; al &#8220;pi\u00f9 spento&#8221;.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/weeeopen.polito.it\/wp-content\/uploads\/2021\/10\/acpi-states.svg\" alt=\"\" class=\"wp-image-1890\"\/><figcaption>Tabella riassuntiva degli stati ACPI e PCIe<\/figcaption><\/figure>\n\n\n\n<p>Nel prossimo articolo si inizier\u00e0 a vedere come questa specifica viene effettivamente implementata a livello hardware nei notebook.<\/p>","protected":false},"excerpt":{"rendered":"<p>Introduzione Questo \u00e8 il primo di una serie di articoli riguardanti le tecniche utilizzate dalle case produttrici di pc per gestire il sistema di alimentazione nei loro dispositivi. Quanto scritto fa riferimento all&#8217;elettronica presente nei laptop ma, a livello teorico, non si discosta di molto ci\u00f2 che avviene anche nei desktop; mentre a livello pratico [&hellip;]<\/p>\n","protected":false},"author":13,"featured_media":1890,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"episode_type":"","audio_file":"","podmotor_file_id":"","podmotor_episode_id":"","cover_image":"","cover_image_id":"","duration":"","filesize":"","filesize_raw":"","date_recorded":"","explicit":"","block":"","ocean_post_layout":"","ocean_both_sidebars_style":"","ocean_both_sidebars_content_width":0,"ocean_both_sidebars_sidebars_width":0,"ocean_sidebar":"","ocean_second_sidebar":"","ocean_disable_margins":"enable","ocean_add_body_class":"","ocean_shortcode_before_top_bar":"","ocean_shortcode_after_top_bar":"","ocean_shortcode_before_header":"","ocean_shortcode_after_header":"","ocean_has_shortcode":"","ocean_shortcode_after_title":"","ocean_shortcode_before_footer_widgets":"","ocean_shortcode_after_footer_widgets":"","ocean_shortcode_before_footer_bottom":"","ocean_shortcode_after_footer_bottom":"","ocean_display_top_bar":"default","ocean_display_header":"default","ocean_header_style":"","ocean_center_header_left_menu":"","ocean_custom_header_template":"","ocean_custom_logo":0,"ocean_custom_retina_logo":0,"ocean_custom_logo_max_width":0,"ocean_custom_logo_tablet_max_width":0,"ocean_custom_logo_mobile_max_width":0,"ocean_custom_logo_max_height":0,"ocean_custom_logo_tablet_max_height":0,"ocean_custom_logo_mobile_max_height":0,"ocean_header_custom_menu":"","ocean_menu_typo_font_family":"","ocean_menu_typo_font_subset":"","ocean_menu_typo_font_size":0,"ocean_menu_typo_font_size_tablet":0,"ocean_menu_typo_font_size_mobile":0,"ocean_menu_typo_font_size_unit":"px","ocean_menu_typo_font_weight":"","ocean_menu_typo_font_weight_tablet":"","ocean_menu_typo_font_weight_mobile":"","ocean_menu_typo_transform":"","ocean_menu_typo_transform_tablet":"","ocean_menu_typo_transform_mobile":"","ocean_menu_typo_line_height":0,"ocean_menu_typo_line_height_tablet":0,"ocean_menu_typo_line_height_mobile":0,"ocean_menu_typo_line_height_unit":"","ocean_menu_typo_spacing":0,"ocean_menu_typo_spacing_tablet":0,"ocean_menu_typo_spacing_mobile":0,"ocean_menu_typo_spacing_unit":"","ocean_menu_link_color":"","ocean_menu_link_color_hover":"","ocean_menu_link_color_active":"","ocean_menu_link_background":"","ocean_menu_link_hover_background":"","ocean_menu_link_active_background":"","ocean_menu_social_links_bg":"","ocean_menu_social_hover_links_bg":"","ocean_menu_social_links_color":"","ocean_menu_social_hover_links_color":"","ocean_disable_title":"default","ocean_disable_heading":"default","ocean_post_title":"","ocean_post_subheading":"","ocean_post_title_style":"","ocean_post_title_background_color":"","ocean_post_title_background":0,"ocean_post_title_bg_image_position":"","ocean_post_title_bg_image_attachment":"","ocean_post_title_bg_image_repeat":"","ocean_post_title_bg_image_size":"","ocean_post_title_height":0,"ocean_post_title_bg_overlay":0.5,"ocean_post_title_bg_overlay_color":"","ocean_disable_breadcrumbs":"default","ocean_breadcrumbs_color":"","ocean_breadcrumbs_separator_color":"","ocean_breadcrumbs_links_color":"","ocean_breadcrumbs_links_hover_color":"","ocean_display_footer_widgets":"default","ocean_display_footer_bottom":"default","ocean_custom_footer_template":"","ocean_post_oembed":"","ocean_post_self_hosted_media":"","ocean_post_video_embed":"","ocean_link_format":"","ocean_link_format_target":"self","ocean_quote_format":"","ocean_quote_format_link":"post","ocean_gallery_link_images":"on","ocean_gallery_id":[],"footnotes":""},"categories":[1],"tags":[23],"ppma_author":[40],"class_list":["post-1889","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","tag-divulgazione","entry","has-media"],"authors":[{"term_id":40,"user_id":0,"is_guest":1,"slug":"federico-bassignana","display_name":"Federico Bassignana","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/?s=96&d=retro&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/weeeopen.polito.it\/en\/wp-json\/wp\/v2\/posts\/1889","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/weeeopen.polito.it\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/weeeopen.polito.it\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/weeeopen.polito.it\/en\/wp-json\/wp\/v2\/users\/13"}],"replies":[{"embeddable":true,"href":"https:\/\/weeeopen.polito.it\/en\/wp-json\/wp\/v2\/comments?post=1889"}],"version-history":[{"count":0,"href":"https:\/\/weeeopen.polito.it\/en\/wp-json\/wp\/v2\/posts\/1889\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/weeeopen.polito.it\/en\/wp-json\/wp\/v2\/media\/1890"}],"wp:attachment":[{"href":"https:\/\/weeeopen.polito.it\/en\/wp-json\/wp\/v2\/media?parent=1889"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/weeeopen.polito.it\/en\/wp-json\/wp\/v2\/categories?post=1889"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/weeeopen.polito.it\/en\/wp-json\/wp\/v2\/tags?post=1889"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/weeeopen.polito.it\/en\/wp-json\/wp\/v2\/ppma_author?post=1889"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}