eComStation en ACPI

> eCS index <





Advanced Power Management (APM)
Hogere energieconsumptie door snellere hardware
Operating System-directed configuration and Power Management (OSPM)
ACPI Machine Language (AML)
ACPI standaarden in de praktijk
Plug and Play Operating Systeem (PnP OS)
ACPI voor Linux
Geraadpleegde bronnen



De Advanced Configuration and Power Interface (ACPI)

>Top<

De belangrijkste verbetering van eComStation 2 is de ondersteuning voor computers met een Advanced Configuration and Power Interface (ACPI) BIOS. Dit was hard nodig, want zonder deze ACPI ondersteuning zullen veel recente notebooks en servers OS/2 niet booten. En dat geldt ook voor andere besturingssystemen zoals Linux. Maar wat is ACPI nu eigenlijk?

De eerste opzet van de open industrie standaard ACPI kwam eind 1996 tot stand. HP, Toshiba, Intel, Phoenix en Microsoft besloten om tot een nieuw systeem te komen dat het Advanced Power Management (APM) van laptops moest vervangen. De nieuwe Advanced Configuration and Power Interface (ACPI) specificatie werd de sleutel van het zogeheten Operating System configuration and Power Management (OSPM). Dat zijn de methoden en technieken waarmee het besturingssysteem het energieverbruik van de computer kan regelen.

Op zich was daar veel voor te zeggen. Want de toenmalige APM standaard voor energiebeheer was inadequaat. En met name Intel had behoefte aan een beter energiebeheer voor haar steeds meer energie gebruikende computerhardware.

Advanced Power Management (APM)

>Top<

Het op BIOS routines gebaseerde Advanced Power Management (APM) beschikte maar over weinig toestanden. In de praktijk was APM alleen maar bruikbaar op laptops. Zo bood APM een energiebesparende modus bij batterijgebruik en een op volle kracht vooruit stand voor het geval dat de laptop aangesloten was op het lichtnet.

Het APM BIOS detecteerde wanneer een laptop offline was (aangewezen was op de accu) en stelde vast welke apparaten recent niet meer gebruikt werden. Een apparaat met een lange time-out kon door het BIOS in de slaapstand gezet worden. En weer wakker worden als het via een interrupt benaderd werd.

Daarnaast kon met het OS/2 APM Energiebeheer Intel's SpeedStep technologie ingesteld worden. Door in het tabblad het aankruisvakje "Energie/performance-instelling niet controleren" aan te vinken werd SpeedStep geactiveerd. De processor liep hiermee bij batterijgebruik op halve kracht en dat was te merken ook: Mijn MP3 bestanden werden met Z! in slow motion afgespeeld.

Maar omdat een server of desktop systeem altijd online (aangesloten op het lichtnet) was, had het instellen van APM op een server of desktop computer maar weinig zin. De Speedstep technologie werkt niet als de processor qua energiebronnen online is. In de praktijk werd alleen de monitor na een tijdje in een standby stand gezet. En bleek hij daarna soms lastig te ontwaken. En de snelle processor bleef onnodig snelle rondjes draaien. Kortom: APM werkte niet.

Overigens maakt het op halve kracht laten draaien van de processor qua energieverbruik wel veel uit. Zoals het eCS ACPI utility SetGetState op mijn laptop laat zien:

[F:\Cmd]call G:\os2bin\sys\ACPI_UTIL\SETGETSTATE.EXE 0 1 1 1
State set susfull

[F:\Cmd]G:\os2bin\sys\ACPI_UTIL\SETGETSTATE.EXE
Searching processors
==================================
Processor [CPU0]
Now use 0 state
Status:0 Support 2 power state
-------Power State 0 ----------
Frequence:          3059 Mhz
Power:              22000 mWatt
Bus Master latency: 250 uSec
-------Power State 1 ----------
Frequence:          1596 Mhz
Power:              10000 mWatt
Bus Master latency: 250 uSec
==================================
==================================
Processor [CPU1]
Not supported or not CPU present
==================================

Deze Pentium 4 single-core processor gebruikt in de spaarstand maar 10 Watt in plaats van 22 Watt. En de bussnelheid wordt er niet door verminderd. Alleen jammer dat het ACPI utility niets instellen kan. Want de CPU0 status is na "setgetstate 0 1 1 1" nog steeds 0 (3059 Mhz).

Hogere energieconsumptie door snellere hardware

>Top<

Notebooks, desktops en servers werden sneller en de energieconsumptie van de processors steeg navenant. Veel sneller dan de batterijcapaciteit en/of de mogelijkheid om ze goedkoop en geruisloos te koelen. En de door deze computers benodigde rekenkracht en energieconsumptie, vergelijk bijv. een 3D spelletje met simpel tekstverwerken, konden van moment tot moment enorm verschillen.

Maar het APM PC BIOS was niet in staat om te bepalen of de rekenkracht (processorcycli) nuttig werd ingezet of versleten werd door een idle proces. Vandaar dat mijn MP3 bestanden vertraagd werden afgespeeld als ik APM offline gebruikte. En omgekeerd had het besturingssysteem geen vat op de de werkwijze van het APM.

Er is dus een reële behoefte aan methoden om de daadwerkelijk benodigde rekenkracht en het gebruik van resources (randapparatuur) door het besturingssysteem en zijn beheerder gedifferentieerder in te kunnen stellen dan het APM BIOS dit kan doen.

In mijn praktijk: zet de CPU op halve kracht nadat OpenOffice opgestart is en ik alleen nog maar aan het typen ben, maar draai de CPU op volle kracht bij MPlayer en Z!. Of laat me op zijn minst zelf de instellingen bepalen. Kortom: geef me meer controle over het energiebeheer. En niet slechts de mogelijkheid om de APM batterijstand op mijn laptop aan of uit te zetten.

Operating System-directed configuration and Power Management (OSPM)

>Top<

De behoefte aan een gedifferentieerde vorm van energiebeheer bestaat nog veel meer op servers die dag en nacht aan staan. Door een beheerder via het besturingssysteem meer invloed te geven over het energiebeheer van het ACPI BIOS, kunnen servers die dag en nacht aanstaan veel energie besparen.

De processor en zijn randapparatuur zouden buiten de kantooruren om in een energiebesparende modus kunnen draaien. Maar op een gezette tijden of naar behoefte (hoge IRQ-use) weer op volle kracht kunnen werken. De beheerder zou moeten kunnen bepalen hoe gevoelig een apparaat (netwerkkaart, vaste schijf) voor time-outs mag zijn. En in welke spaarstand de processor weg mag zakken als hij even niets te doen heeft.

Ook notebooks en desktop systemen kunnen van OSPM profiteren. Als de processor nauwelijks gebruikt wordt is het zinloos om het merendeel van de processortijd aan het idle proces te besteden. Een lagere klokfrequentie bespaart niet alleen energie, maar zal ook een duurzamer systeem opleveren. Maar anderzijds kan zelfs een batterij-gebruiker op bepaalde momenten de volle rekenkracht van de CPU willen gebruiken. En dat kan alleen maar als die gebruiker via het besturingssysteem kan bepalen hoe het ACPI systeem zich gedraagt.

Kortom: Intels idee van een Operating System-directed configuration and Power Management (OSPM) systeem is niet zo gek. Generieke methoden waarmee het besturingssysteem het energieverbruik van de computer kan regelen, besparen niet alleen energie, maar komen de duurzaamheid van de hardware (misschien m.u.v. vaste schijven) ten goede.

Maar het ACPI probleem was: welk besturingssysteem het hiermee voor het zeggen zou hebben.

ACPI standaarden in de praktijk

>Top<

ACPI bleek in de praktijk veel meer dan een Power Management systeem. Een computer BIOS dat correct opgezet is volgens een bepaalde ACPI standaard verleent ieder besturingssysteem bepaalde methoden om de hardware (processor, moederbord en adapters) op basaal niveau (low-level) te beïnvloeden met betrekking tot het energiegebruik. Maar ook met betrekking tot de vraag of hij al dan niet uit zijn primaire slaapstand zal ontwaken. En een nu veel machtiger geworden ACPI PnP besturingssysteem regelde in de praktijk ook zaken als de verdeling van IRQ's. Deze PnP OS instellingen werden door Windows 98 en opvolgers in het CMOS RAM van het BIOS opgeslagen. Handig voor Windows, maar konden Linux en OS/2 er wat mee? Nee.

In de Advanced Power Management specificaties wordt het beheer van het stroomgebruik voornamelijk aan het BIOS overgelaten. In de ACPI standaard werd dat een taak van het besturingssysteem. Vandaar dat Microsoft er als de kippen bij zat om de ontwikkeling bij te sturen op een manier die voor buitenstaanders niet te vatten was

Een citaat uit Bill Gates on Making ACPI Windows-specific uit de Leaked Antitrust Memo verduidelijkt dit:

From:    Bill Gates
Sent:    Sunday, January 24, |999 8:41 AM
TO:      Jeff Westorinon; Ben Fathi
Cc:      Carl Stork (Exchange); Nathan Myhrvofd; Eric Rudder
Subject: ACPI extensions

One thing I find myself wondering about is whether we shouldn't try and make the "ACPI" extensions somehow Windows specific.
If seems unfortunate if we do this work and get our partners to do the work and the result is that Linux works great without having to do the work.
Maybe there is no way to avoid this problem but it does bother me.
Maybe we couid define the APIs so that they work well with NT and not the others even if they are open.
Or maybe we could patent something related to this.

Gelukkig voor Bill, werden de implementaties van de "open ACPI specificaties" in feite alleen maar door de deelnemers van het ACPI consortium getest en uitgevoerd.

Oftewel: Een Toshiba notebook met een Phoenix BIOS volgens "de open ACPI v.x industrie standaard" werd alleen maar getest met de door Toshiba of Intel geleverde Windows drivers op een Windows 98 OEM met het laatste met hun Windows OEM werkende BIOS. Het gevolg: laptops die het alleen maar optimaal onder de met hen geleverde Windows versie deden.

De deelnemers van het ACPI consortium hadden er helemaal geen belang bij om buitenstaanders het met hun "open industrie standaard" gemakkelijk te maken. Integendeel: Hun "open ACPI standaard" bleek veel meer een pact van de duivel, met het doel om hun concurrenten op de "vrije markt" aan de kant te schuiven. Dat een Accu moet voldoen aan de "Microsoft ACPI besturingsmethode" zegt al genoeg. Hoezo zouden accu's weet moeten hebben van Microsoft? Accu's moeten gewoon stroom leveren.

Functies alsWake-on-Lan (slapende server of werkstation wordt wakker als hij door een netwerkgast geroepen wordt) werden in het ACPI BIOS geïmplementeerd. Maar ze werden onvoldoende gedocumenteerd en geïmplementeerd om open source ontwikkelaars een kans te geven ze betrouwbaar in hun kernel te implementeren.

Doordat Microsoft het monopolie had op de laptop markt konden foutieve ACPI implementaties goed gedijen. De kinderfouten in het open ACPI BIOS werden door closed source Windows OEM OSPM stuurbestanden gecorrigeerd. Pas na BIOS updates die de ACPI BIOS fouten corrigeerden maakten Linux ACPI drivers een kans.

Plug and Play Operating Systeem (PnP OS)

>Top<

De eerste versie van een Operating System-directed configuration and Power Management (OSPM) was het Plug and Play Operating System idee van Windows 98. Maar dit leverde nauwelijks extra energiebesparing op. Het eerste ACPI PnP OS leunde nog op APM en was vooral een manier waarop Windows 98 de IRQ's van het BIOS zo kon instellen dat andere besturingssystemen het nakijken hadden. En dat was precies wat Bill Gates beoogde met: To make the "ACPI" extensions somehow Windows specific".

OS/2 en Linux gebruikers leerden uiteindelijk dat Windows 98 ook met de BIOS instelling PnP OS=NO kon booten, Maar dat was niet de standaardinstelling van een Windows OEM systeem.

Instelling

Beschrijving

PNP OS set to Yes

The BIOS configures only critical devices (for example, video, hard-disk, and key-Board). NOTE: In this mode, neither the BIOS nor Windows configures the motherboard devices at startup. Therefore, for these earlier computers, you must set PNP OS to No.

PNP OS set to No

The BIOS configures critical devices and all motherboard devices under the assumption that Windows cannot.

Former (legacy) ACPI BIOS PNP BIOS or APM BIOS

The PNP OS option is irrelevant. Windows (only Windows versions 98, Millennium Edition, 2000 and XP) uses the Advanced Configuration and Power Interface (ACPI) BIOS interface to configure motherboard devices and retrieve system information. NOTE: Although a system does have an ACPI BIOS, ACPI might have been disabled by Windows because of a bug in the ACPI BIOS. In this case, Windows will fall back to PNP BIOS and APM BIOS in read-only mode. Therefore, for any computer with a buggy ACPI BIOS, set PNP OS to No.

Bron:

Setting the plug and play BIOS option (PNP OS) in CMOS Setup

Gelukkig bleek Microsoft's PnP OS idee zo onbetrouwbaar dat Microsoft veiligheidshalve het uitdelen van de resources van de kritische apparatuur (video, vaste schijf en toetsenbord) aan het PnP BIOS overliet, zodat andere besturingssystemen (incl. die van MS) met PnP OS= yes vaak nog wel konden booten. Maar geluidskaarten en netwerkkaarten werden op multibootsystemen na een reboot vanuit Windows 98 meestal niet meer herkend, totdat de BIOS instelling op PnP OS =NO gezet werd. En dat gold vaak ook voor het in opzet volledig ACPI compliante PnP OS Windows 2000.

ACPI Machine Language (AML)

>Top<

Om ACPI onafhankelijk te maken van het besturingssysteem, werd een aparte taal ontwikkeld: De ACPI machinetaal (AML). Er werden drie interfaces naar het ACPI BIOS gemaakt, die via AML te benaderen zijn: Een ACPI registry set, enige ACPI BIOS functies en meerdere tabellen.

De door het ACPI BIOS in te stellen ACPI tabellen informeren het besturingssysteem over de mogelijkheden en toestand van het ACPI BIOS. Sommige ACPI tabellen bevatten zogeheten Definition blocks met uitvoerbare code die de processor en randapparaten low-level kunnen benaderen. Om de tabellen te lezen en in te stellen heeft de ACPI driver zowel een AML parser (ontleder voor het lezen van de AML tabellen) als een AML interpreter (een uitvoerbare schil voor de AML taal) nodig.

[G:\os2bin\sys\ACPI_UTIL]thermal
Show Thermal
Thermal zone "_TZ_"
Thermal zone "THRM"
   Current temperature: 60 C ( 3332 K * 10)
   Critical temperature: 82 C ( 3552 K * 10)
   Thermal constant1: 0
   Thermal constant2: 9
   Thermal period: 50 sec * 10
   Passive List has 1 elements
          Device [CPU0]
Status 0x0 0 - No error

ACPI voor Linux

>Top<

De Linux ontwikkelaars wierpen zich als eerste op de ACPI machinetaal. Het eerste doel van het ACPI voor Linux project was het gecompliceerde ACPI energiebeheer. En nog niet eens om energie te besparen. Want om Linux op uit de ACPI systemen te laten lopen zou de PC op zijn minst uit een slaapstand moeten kunnen ontwaken!

De ACPI daemon van eComStation

>Top<

Het ACPI daemon configuratiebestand staat in %ETC%\ACPID.CFG. Dat komt meestal neer op \MPTN\ETC\ACPID.CFG in de bootdrive.

De standaardinstellingen (hier die van ACPI-APM-20090624.ZIP) zijn als volgt:

[ACPID]
; this is comment
# this is comment
% this is comment
#####################################################################
; What to do when you close the lid of your notebook
; Variants:
; off     = power off
; suspend = suspend to state defined in SleepState
; None    = don't stop working
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
LID = None

#####################################################################
; What to do when user presses Power button
; Variants:
; off     = power off
; suspend = suspend to state defined in SleepState
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
PowerButton = Off

#####################################################################
; Which sleep state to use
; Variants:
; S1  - verysy
; S2  - easy
; S3  - hard
; S4  - very hard
; default - not use sleep
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
SleepState = S1

#####################################################################
; Where place log file, full path
; default - current directory (where is run), AcpiDaemon.log
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
LogFile = AcpiDaemon.log
#####################################################################
; What is the CPU idle stage in use
; HLT - usially for OS/2 w/o ACPI
; C2  - better idle than HLT
; C3  - deep idle
; default - C2 if possible, else HLT
;
; How to understand that your notebook supports C2 or C3?
; acpi.log -> search for "latency" and "C3" or "C2". 
; if C2 is not supported then you see "not support"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
IdleState = HLT

#####################################################################
; Parameters for throttling at SMP kernel Idle (IdleState 
; field not work in SMP) in percent. 0 mean off. 100 mean maximum
; default - off
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
MaxThrl = 0
;
MinThrl = 0
#####################################################################
; Need print to sreen or no
; 1,Y,y - yes
; 0,N,n - no (default no)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
LogScreen = 0
;
#####################################################################
; ******************* Experimental *************************
; Use HLT/Cx Idle call in SMP kernel, according to IdleState
; 1,Y,y - yes
; 0,N,n - no ( default )
; !!! You need special version of SMP kernel to use this feature !!!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ExtraKernelHLT = No
;
#####################################################################
; Where place acpica$ log file, full path
; default - don't create
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;AcpiLog = c:\AcpiCA.log
;
#####################################################################
; How many tics CPU (1...n) will be wait in HLT
; defult - tics in 500nsec interval
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
HLTTime = 700
#####################################################################
; Save Video for suspend, experiments to wakeup video
; 0 - don't use this feature
; possible 1,3,7,0xf (read VESA BIOS standard)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
VBESave = 7

Er zitten wat spelfouten in. De ontwikkelaars komen uit het Oostbloken hanteren het

Vraag: Wat betekenen al die codes? En hoe weet je of de ACPI.PSD en APM.ADD van eCS dit ondersteunen?

Antwoord: Wat de codes moeten betekenen staat in de Intel specificaties van het ACPI energiebeheer. Die geef ik hieronder. Maar om er achter te komen of uw besturingssysteem ze echt ondersteunt, dat is een kwestie van trial and error. Omdat hardwarefabrikanten geen energie steken in OS/2 stuurbestanden.

De slaap en werkstanden van het Intel ACPI energiebeheer

>Top<

ACPI kent drie globale systeem standen: De werkstand G1, de slaapstand G2 en de mechanische uitstand G3. Global system states gelden voor het systeem als geheel: dus voor de processor, het moederbord, het geheugen en de perifere apparaten.

Op http://www.acpi.info vindt u technische documenten. Hier volgt een overzicht.

System state

Status van het systeem

S0 (G1)

Normale werkstand (fully-on). Het vermogen dat een energiezuinige computer in de normale werkstand trekt hangt op een computer af van de hoeveelheid werk, maar vooral videokaarten zijn er berucht om dat ze ook bij een stilstaand beeld nog tientallen Watts consumeren. De processor zal in S0 doorgaans wel vaart minderen via throttling of een hogere Performance State in C0.

Slaapstand S1

In de slaapstand houdt de processor tijdelijk op met werken en gebruikt dus minder stroom. Perifere apparaten kunnen uitgeschakeld zijn.

Slaapstand S2

De processor krijgt geen stroom meer. Perifere apparaten kunnen uitgeschakeld zijn.

Slaapstand S3

Stand-by (slaapstand in Vista). De processor krijgt geen stroom. De instellingen worden in het geheugen vastgehouden (suspend to RAM). Maar als de grafische kaart niet uitgeschakeld wordt blijft het energieverbruik relatief hoog. Ik mat 30 Watt op een Dell laptop en dat leverde nauwelijks energiebesparing op ten opzichte van G1.

Slaapstand S4

Slaapstand (hibernatie, sluimerstand in Vista). De instellingen worden op de vaste schijf opgeslagen. De computer kan alle randapparaten op het moederbord dus uitzetten. Maar met BIOS functies als Wake-on-LAN (WoL), zal op zijn minst de netwerkaart en het moederbord nog deels actief moeten staan. Maar ook dan zou het energieverbruik hooguit een paar Watt mogen zijn.

Het inslapen en ontwaken uit de slaapstand kost meer tijd (minuten) dan het in en uitschakelen van de stand-by stand (seconden). Maar de slaapstand heeft wel het voordeel dat er echt energie bespaard wordt en eventueel na een uitstapje naar een ander geboot OS, weer snel kunt beginnen met waar u was gebleven. Overigens moet u er wel rekening mee houden dat sommige gemounte schijven het na het ontwaken uit de slaapstand niet meer doen. HPFS schijven krijgen bij het inslapen van Linux een dirty flag (en zijn daarna alleen te lezen) en netwerkverbindingen worden afgebroken.

Slaapstand S5

De zachte power off (soft off). De computer is met het knopje vooraan (reset) of via het besturingssysteem (Power off) uitgezet, maar u kunt beter niet aan de voeding komen, want hier staat nog stroom op! Op het moederbord kunnen nog ledjes branden. Het energieverbruik is nagenoeg 0 tot een paar Watt (bijv. bij Wake-on-LAN).

De uitstand G3

De harde uit (mechanical power off) stand. De computer gebruikt nu echt geen stroom meer via de accu of het lichtnet. De stekker is eruit en/of het aan-uit knopje op de achterkant van de PC staat uit. Een batterijtje op het moederbord houdt de tijd bij. Alleen in deze stand kunt u onderdelen op uw computer vervangen.



Processor states

Status van randapparatuur

C States (CST)

Processor Power States (C states) spelen alleen een rol als het systeem in de globale werkstand (G0) staat. Tijdens de slaapstand (G1) en de uitstand (G2) wordt de processor sowieso niet gebruikt.

C0 (P0-P16)

Normale werkstand. De processor reageert zo snel als maar kan op de via de bus (eigenlijk zijn snelle interne cache) binnenkomende instructies. Maar omdat het systeem en video geheugen en zeker de op de 33 MHz PCI bus aangesloten randapparatuur op een lagere frequentie lopen en u via uw besturingssysteem niet aldoor instructies opgeeft, staat de processor meestal te wachten. De processor doet dan niets anders dan snel beschikbaar zijn. Het besturingssysteem geeft hem al die tijd wat vermaak via het idle (ledig) proces.

Het energieverbruik en de warmteontwikkeling van de processor zullen afhangen van de klokfrequentie (het aantal stroompjes per seconde) en de spanning die tijdens zo`n stroompje (kloktik) op de processor staat. Het energieverbruik hangt op zich dus niet af van de hoeveelheid nuttig werk, dat de processor heeft te doen. Want processoren besteden hun meeste energie aan het wachten op instructies (het idle proces).

Tot op zekere hoogte kunnen zeer compact ontworpen processoren met een lagere werkspanning uit. Hun signalen hoeven immers kortere afstanden te overbruggen. En ook het reduceren van de kloksnelheid maakt het mogelijk om met lagere spanningen te werken. Als u op korte afstand zacht, maar langzaam fluistert komt uw bericht nog wel over. Maar iemand die snel spreekt, zal luider moeten spreken. En zeker als hij het op grote afstand doet.

De klokfrequentie in de normale werkstand varieert van maximaal (Performance state 0, zeg maar de processor kloksnelheid specificatie) tot de lagere klokfrequenties in de performance states P1 t/m P16.

Het doel van het reduceren van de klokfrequentie is om energie te besparen en/of om oververhitting te voorkomen. Bij Intel heet deze variabele klokfrequentie techniek Speedstep, bij AMD processors gaat het om PowerNow! en Cool'n'Quiet enVIA spreekt van PowerSaver.

Het effect van de klokfrequentie op het energieverbruik van de processor is bij normaal gebruik ongeveer rechtlijnig. Zo werkte de P4 op mijn oude laptop tijdens accugebruik niet op 3059 MHz, maar op 1596 Mhz en gebruikte dan 10 i.p.v. 22 Watt. Hij werd dan minder heet zodat ook energie op de koeling bespaard kon worden. Maar zou ik de klokfrequentie van de processor ver boven zijn specificaties opvoeren en daarnaast ook de spanning opvoeren om de kans op elektronische fouten (ruis) te verminder, dan nemen het stroomverbruik en de warmteontwikkeling meer dan evenredig toe.

Het andere doel, het voorkomen van oververhitting, is pijnlijk zichtbaar tijdens mijn MEncoder bewerkingen: Als de door mencoder intensief gebruikte Celeron processor al na een paar seconden (!) te heet wordt (72 °C is de door Intel opgegeven grens), halveert het ACPI BIOS zijn klokfrequentie, waardoor de processor temperatuur weer afneemt (hier tot 67,50 °C).

Kortom: Mijn 3 GHz Celeron is een goede sprinter (prima voor Internet en Office taken), maar zakt tijdens puur rekenwerk (mencoder) door een te hoog oplopende temperatuur door Intels Speedstep technologie snel weer in performance af. Het coderen duurt hierdoor weliswaar langer, maar het alternatief (stug doorgaan in P0), zou een tijdelijk of permanent door oververhitting defecte processor zijn en dus op zijn minst vastlopers en dataverlies (een risico dat onbezonnen processor, bus en geheugen overclockers aldoor lopen).

Voor dat soort zaken (coderen) zijn voor ACPI ontworpen processoren met een gunstiger performance/energieverbruik aantrekkelijker. Ze lopen doorgaans met meerdere langzamer geklokte kernen (een 2x1500 dual core SMP kern i.p.v. een op 3000 MHz lopende enkele kern), maken efficienter gebruik van de kloktikken door pipelining en hyperthreading (HT) en vangen veel voorkomende multimedia vraagstukken met slimmere routines op.

C1 (Halt)

Halt. De processor voert tijdelijk geen instructies meer uit, maar kan vrijwel onmiddellijk uit deze slaapstand gewekt worden. Vrijwel iedere IA 32-bit processor ondersteunt de HLT instructie zonder hulp van de chipset.

C2 ()

Stop-clock. De processor is moeilijker te wekken. De energiebesparing is groter dan in C1. De chipset moet C2 ondersteunen.

C3 ()

Sleep. De processor is nog moeilijker te wekken, maar de energiebesparing is aanzienlijk. De chipset moet C3 ondersteunen.

Een voorbeeld

De eerste (Cpu0Cst) core van deze dual core processor gebruikt in de C1 stand (C1State) 1 Watt, in C2 (C2State) 0,5 watt en in C3 (C3State) maar 0,1 Watt volgens het logbestand van de acpidaemon.

--:--:-- ACPI: SSDT @ 0x7F681EED/0x1C6 (v1 PmRef Cpu0Cst 0x3001 INTL 0x20050624)
--:--:-- Status Evaluate Processor PDC 0x0 AE_OK
--:--:-- Status Evaluate Processor 0x0 AE_OK
--:--:-- Usable:2 Counter:0 
--:--:--  CPU id to N:0
--:--:--  ProcId:     0x0
--:--:--  P_BLK:      0x1010
--:--:--  P_BLK len:  0x6
--:--:-- CPU0 Status Evaluate _PCT 0x5 AE_NOT_FOUND
--:--:-- CPU0 Status Evaluate _CST 0x0 AE_OK
--:--:-- _CST has 3 Cstates
--:--:--  C1State control:  0x0
--:--:--  Latency: 1 uSec
--:--:--  Power consuption: 1000 mWatt
--:--:--  C2State control:  0x1014
--:--:--  Latency: 1 uSec
--:--:--  Power consuption: 500 mWatt
--:--:--  C3State control:  0x1016
--:--:--  Latency: 57 uSec
--:--:--  Power consuption: 100 mWatt
--:--:-- CheckCST: Tick for wait 0x728 Addr:0x1014
--:--:-- CheckCST: Not need HLT for CPU0

De latency (wektijd) is in C1 en C2 1 icroseconden, maar in C3 57 microseconden. De opmerking "Not need HLT for CPU0" betekent dat ik in \MPTN\ETC\ACPID.CFG C2 of C3 mag instellen. C2 is de veiliger weg, maar C3 levert meer energiebesparing op.

; What is the CPU idle stage in use
; HLT - usially for OS/2 w/o ACPI
; C2  - better idle than HLT
; C3  - deep idle
; default - C2 if possible, else HLT
;
; How to understand that your notebook supports C2 or C3?
; acpi.log -> search for "latency" and "C3" or "C2". 
; if C2 is not supported then you see "not support
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
IdleState = C3



Device states

Status van randapparatuur

D0

Normale werkstand (full of normal power state).

D1, D2

Low power state. Het apparaat verbruikt in de D1 en D2 slaapstanden minder stroom, maar is nog wel aangesloten op de PCI bus. Tenminste als het apparaat aangesloten is.

Hier een voorbeeld uit de uitvoer van pci.exe onder OS/2. Het gaat om een PCMIA cardbus van Micro Inc in een Dell computer. Er is geen PCIMIA kaart ingestoken.

Bus 3 (PCI), Device Number 1, Device Function 0
 Vendor 1217h O2 Micro Inc
 Device 7135h Unknown
 Command 0000h (Bus Access Disabled!!)
 Status 0410h (Has Capabilities List, Slow Timing)
 Revision 21h, Header Type 82h, Bus Latency Timer 40h
 Self test 00h (Self test not supported)
 PCI Class Bridge, type PCI to Cardbus
 Subsystem ID 01CC1028h Unknown
 Subsystem Vendor 1028h Dell Computer Corp
 System IRQ 19, INT# A
 CardBus Bridge Information:
   PCI Bus Number 3, CardBus Bus Number 4, Subordinate Bus number 4
   CardBus Latency 20h
   Secondary Bus Command 0040h (bus is in RESET, ints routed by PCI)
   Secondary Bus Status  0200h (Medium Timing)
   Socket/ExCa Base Memory Address : 00000000h
   Memory   Range 0 : None
   Memory   Range 1 : None
   I/O Port Range 0 : 0000h..0003h
   I/O Port Range 1 : 0000h..0003h
 New Capabilities List Present:
   Power Management Capability, Version 1.1
     Supports low power State D1
     Supports low power State D2
     Supports PME# signalling from mode(s) D0, D1, D2, D3hot, D3cold
     PME# signalling is currently disabled
     3.3v AUX Current required : 0 mA (Self powered)
     Current Power State : D0 (Device operational, no power saving)
         0 mW D0 power consume
         0 mW D0 power dissipate
         0 mW D1 power consume
         0 mW D1 power dissipate
         0 mW D2 power consume
         0 mW D2 power dissipate
         0 mW D3 power consume
         0 mW D3 power dissipate
         0 mW common logic power consume

Het is een slim randapparaat. Want hoewel de status D0 is, gebruikt het geen stroom (o mW). Terecht, want zonder PCMIA kaart heeft deze bus niets te doen.

Alle perifere apparaten kunnen via de lichtknop volledig aan (D0) of volledig uit (D3) staan. Maar helaas ondersteunen maar weinig apparaten de D1 en D2 tussenstanden.

 New Capabilities List Present:
   Power Management Capability, Version 1.1
     Does not support low power State D1 or D2


D3

Het apparaat staat helemaal uit (fully off). Het kan dus niet reageren op weksignalen via de PCI bus.




ACPI voor eComStation

>Top<

Het hoofddoel van de ACPI driver voor eComStation is om er voor te zorgen dat moderne ACPI hardware door recente OS/2 kernels wordt herkend. Het tweede doel is energiebesparing: het ACPI energiebeheer vervangt het verouderde APM.

Dat moderen ACPI systemen onder OS/2 lopen is helaas geen vanzelfsprekendheid. Veel hardware fabrikanten ontwerpen hun systemen slechts voor een recente versie van Windows (Designed for Windows versie x). En of de componenten van het systeem het ook onder OS/2 of Linux doen, is voor de meeste computergebruikers bijzaak. Alles draait immers om de aan Windows gewende gebruiker: de meeste hardware en software worden dus ontworpen voor het Microsoft Windows platform.

Omdat IBM vanwege deze marktverhoudingen OS/2 verlaten heeft, worden OS/2 kernels intern niet meer aangepast. Een OS/2 kernel kan hoogstens worden gepatched. Maar dat is een heikele situatie omdat degene die de patch uitbrengt, niet over de broncode van de door IBM en Microsoft gepanteerde kernel en interfaces beschikt. Daarom is het veiliger om stuurbestanden te gebruiken die de OS/2 kernel aanpassen aan ACPI.

Het stuurbestand ACPI.PSD vormt de interface tussen het ACPI BIOS en OS/2 kernel. Met de volgende instellingen worden op een ACPI systeem de APIC interface en de Symmetrical Multiprocessing geactiveerd:

PSD=ACPI.PSD /SMP /APIC

PSD is de afkorting van Platform Specific Driver. Een PSD stuurbestand heeft dezelfde functie als de Hardware Abstraction Layer (HAL) van Windows NT, die Windows NT ook op niet Intel platformen moest laten draaien. Dergelijke tussen de hardware en kernel geplaatste stuurbestanden ondersteunen het besturingssysteem (lees: de kernel) op nieuwe hardware systemen. Of zoals The Config.sys Documentation Project/PSD Statements het zegt:

PSD stands for "PLATFORM SPECIFIC DRIVERS". These drivers provide an abstraction layer for the underlying hardware by allowing the operating system to call generic functions to perform platform -specific operations without worrying about the actual hardware implementation.

De ondersteuning voor niet met Intel compatibele platformen is onder Windows overigens nooit voortgezet. Inmiddels hebben de PSD drivers van OS/2 en de HAL driver van Linux meer betekenis. Want OS/2 en Linux draaien in tegenstelling tot NT ook op IBM´s Risc platformen als de Power PC.

In dezelfde trant kent eComStation nu een generieke PSD driver voor ACPI systemen. De basis voor deze eComStation ACPI driver is OS2APIC.PSD driver Warp Server for e-business SMP. Deze OS/2 SMP driver was essentieel op moderne OS/2 ACPI systemen met meerdere processoren (2-16 processors) die hetzelfde geheugen deelden (Symmetrical multiprocessing). Maar de ACPI.PSD van eComStation voor de OS/2 SMP kernel is bedoeld om op systemen met slechts een processor Hyperthreading en/of de meerdere kernen van dezelfde processor aan te spreken. Zie: ACPI driver voor eComStation en mijn opmerkingen hieronder.

Optie

Gemaakt voor


/SMP

SMP, ACPI en multicore systemen

Activeer multi-processor, multi-core en/of Intels hyperthreading (HT) ondersteuning. Overigens werkt de OS/2 SMP kernel ook op single-core systemen. Het kan geen kwaad om op SMP kernels deze optie te activeren, want veel single core Intel kernels ondersteunen hyperthreading. Daardoor werkt de processor effectiever. Maar op een niet SMP of HT kernel heeft deze optie geen effect.

Alleen met een recente SMP kernel kunt u van /APIC of Intels Hyperthreading (HT) gebruik maken. Een eventuele /SMP optie wordt op single-core systemen genegeerd.

/PIC of /APIC

SMP kernels

Met de instelling /PIC gebruikt de processor de Intel 8259 chip als programmable interrupt controller (PIC). Hierbij heeft de computer hardware de beschikking over 8 interrups per 8259 chip. Op een AT zijn dat de IRQs 0 t/m 15. Voor details zie Interrupts in de OS/2 sectie.

In de door eComStation vaak ondersteunde modernere APIC modus kunnen ook IRQs nummers boven de 15 worden gebruikt. U ziet dit met rmview /irq.

Dit is geeft rmview /irq nadat de SMP kernel geboot is met /APIC:

RMVIEW: Physical view
  IRQ Level =  0  PCI Pin = NONE  Flg = EXCLUSIVE    TIMER_CH_0
  IRQ Level =  1  PCI Pin = NONE  Flg = EXCLUSIVE    KBD_0 Keyboard Controller
  IRQ Level =  2  PCI Pin = NONE  Flg = EXCLUSIVE    PIC_1
  IRQ Level =  4  PCI Pin = NONE  Flg = MULTIPLEXED  SERIAL_0  Serial Controller
  IRQ Level =  8  PCI Pin = NONE  Flg = EXCLUSIVE    RTC
  IRQ Level =  9  PCI Pin = NONE  Flg = SHARED       ACPI Interface
  IRQ Level = 12  PCI Pin = NONE  Flg = SHARED       AUX_0 PS/2 Auxiliary Device Controller
  IRQ Level = 14  PCI Pin = A     Flg = SHARED       IDE_0 xATA Controller
  IRQ Level = 15  PCI Pin = NONE  Flg = EXCLUSIVE    IDE_1 xATA Controller
  IRQ Level = 17  PCI Pin = A     Flg = SHARED       Intel 3945 a/b/g
  IRQ Level = 20  PCI Pin = A     Flg = SHARED       UHCI Compliant USB Host Controller
  IRQ Level = 20  PCI Pin = A     Flg = SHARED       EHCI Compliant USB Host Controller
  IRQ Level = 21  PCI Pin = NONE  Flg = SHARED       HDA Intel with SigmaTel STAC9200
  IRQ Level = 21  PCI Pin = B     Flg = SHARED       UHCI Compliant USB Host Controller
  IRQ Level = 22  PCI Pin = C     Flg = SHARED       UHCI Compliant USB Host Controller
  IRQ Level = 23  PCI Pin = D     Flg = SHARED       UHCI Compliant USB Host Controller
  IRQ Level = 44  PCI Pin = NONE  Flg = EXCLUSIVE    ACPI Interface
  IRQ Level = 45  PCI Pin = NONE  Flg = EXCLUSIVE    ACPI Interface
  IRQ Level = 46  PCI Pin = NONE  Flg = EXCLUSIVE    ACPI Interface
  IRQ Level = 47  PCI Pin = NONE  Flg = EXCLUSIVE    ACPI Interface

Rmview /IRQ geeft helaas geen volledig beeld. Zo weet ik dat IRQ 5 door de parallelle poort gebruikt kan worden. En IRQ 3 en 4 door seriele poorten. Ook zie ik een netwerkkaart die tijdens het booten op IRQ 18 werd geladen niet in het overzicht terug.

In de /PIC stand hieronder ziet u dat de IRQ nummers 9 en 10 meerdere malen gebruikt worden. Opnieuw geldt dat er meer IRQs gedeeld kunnen worden dan met de output van rmview /irq is te zien.

RMVIEW: Physical view
  IRQ Level =  0  PCI Pin = NONE  Flg = EXCLUSIVE    TIMER_CH_0
  IRQ Level =  1  PCI Pin = NONE  Flg = EXCLUSIVE    KBD_0 Keyboard Controller
  IRQ Level =  2  PCI Pin = NONE  Flg = EXCLUSIVE    PIC_1
  IRQ Level =  3  PCI Pin = A     Flg = SHARED       Intel 3945 a/b/g
  IRQ Level =  5  PCI Pin = D     Flg = SHARED       UHCI Compliant USB Host Controller
  IRQ Level =  7  PCI Pin = C     Flg = SHARED       UHCI Compliant USB Host Controller
  IRQ Level =  8  PCI Pin = NONE  Flg = EXCLUSIVE    RTC
  IRQ Level =  9  PCI Pin = A     Flg = SHARED       EHCI Compliant USB Host Controller
  IRQ Level =  9  PCI Pin = A     Flg = SHARED       UHCI Compliant USB Host Controller
  IRQ Level =  9  PCI Pin = NONE  Flg = SHARED       ACPI Interface
  IRQ Level = 10  PCI Pin = NONE  Flg = SHARED       HDA Intel with SigmaTel STAC9200
  IRQ Level = 10  PCI Pin = B     Flg = SHARED       UHCI Compliant USB Host Controller
  IRQ Level = 12  PCI Pin = NONE  Flg = SHARED       AUX_0 PS/2 Auxiliary Device Controller
  IRQ Level = 14  PCI Pin = A     Flg = SHARED       IDE_0 xATA Controller
  IRQ Level = 15  PCI Pin = NONE  Flg = EXCLUSIVE    IDE_1 xATA Controller
  IRQ Level = 44  PCI Pin = NONE  Flg = EXCLUSIVE    ACPI Interface
  IRQ Level = 45  PCI Pin = NONE  Flg = EXCLUSIVE    ACPI Interface
  IRQ Level = 46  PCI Pin = NONE  Flg = EXCLUSIVE    ACPI Interface
  IRQ Level = 47  PCI Pin = NONE  Flg = EXCLUSIVE    ACPI Interface

APIC werkt onder eCS alleen op SMP kernels en het BIOS en uw stuurbestanden moeten dit ondersteunen. Probeer daarom altijd eerst /PIC uit als een stuurbestand niet laadt. Later kunt u vaak alsnog van ACPI gebruik maken, door de niet hoog (>15 IRQ #) geladen stuurbestanden via de REMAP optie van het bestand \OS2\BOOT\acpi.cfg naar een lager IRQ adres te laten verhuizen.

; Use IRQn instead IRQm in APIC
;   Format:
;   REMAP N TO M
;   Where N source IRQ in APIC , M - IRQ to set for Kernel
;   possible format for N and M. Digit (17) , Hexadecimal (0x11), Octal ( 021 )
;
; For this "Use IRQ5 instead IRQ19 in APIC",
;============================================================================
REMAP 19 TO 5
; REMAP 0x13 TO 05
; REMAP 21 TO 10

Helaas verhuist u hiermee vaak meerdere randapparaten naar hetzelfde en dus gedeelde IRQ adres. IRQ conflicten lost u er dus zelden mee op. Maar beter een door meerdere stuurbestanden gedeelde IRQ dan niet werkende drivers.

Kortom: Gebruik /APIC als uw stuurbestanden en uw BIOS dit ondersteunen, want dan beschikt u over meer IRQs. Gebruik hiervoor de SMP kernel. Als sommige stuurbestanden niet laden zoek dan naar alternatieven of pas acpi.cfg zo aan dat ze op de klassieke wijze kunnen laden. Als dat niet lukt gebruik dan /APIC en maak er met de trucs uit zie Interrupts er het beste van.

/CST:name


Name of method responsible for _CST method. Example: /CST:XCST. You can find the method in the subtree of CPU. (It's Cx state). It is needed for APM, idle of CPU,etc

Een Processor Power state (CST) wordt aangeven door een Processor power state declaration object. Een C State change is bijvoorbeeld de overgang van AC op DC.

/IRQ:x

Acer Ferrari notebook

Allows replace ACPI IRQ number 

Standaard wordt IRQ 9 gebruikt voor de ACPI interface. Zowel met /PIC als met /APIC. IRQ 9 is de Cascade naar IRQ2 op de AT, maar is op PCI systemen vrij. Maar het kan ook zijn dat het BIOS op IRQ 9 een perifeer apparaat verwacht. Dot was blijkbaar het geval met Acer Ferrari notebooks.

/NOD

Staat standaard aan om APIC mode te ondersteunen. Uitzetten met /!NOD.

Experimental switch to activate internal OEMHLP$ driver. Disable acpica.add if using this switch. 


/!NOD

ACPI

Disable internal OEMHLP$ driver. Don't forget activate acpica.add (read troubleshooting.doc). Yes, you can boot; But ACPI is semi-functional in this case: APIC doesn't work, LINK doesn't, REMAP doesn't, etc. 2008/07: this switch is recommended for NVidia chipset, to run Winos2+dos session and/or SCSI


/R


Use ACPI Reset instead of kernel's reset. It is useful if running SMP kernel only. Use it if have troubles with system reboot or shutdown.


/FS

Dell notebooks

"Full Safe" - use this key for Dell notebooks. 

Pas met de switch /FS werd de USB stack herkend op mijn Dell notebook.

/B

Obsoleet

/B - is absent starting from ACPI.PSD 3.0. 


/EIS

Intel platform

"Enable Intel Slack", AcpiGbl_EnableInterpreterSlack. The Intel interpreter strictly follows the ACPI specification. Setting this switch allows the interpreter to ignore certain errors and/or bad AML constructs. "This switch is useful for 98% of notebooks with bad ACPI tables" (q) Intel developers. Use it if ACPI log contains errors messages.


/St:stacksize Size of stack


Default is 32 Kbytes. Useful if experimenting with bad ACPI tables and /EIS . Example: /St:0x8000.


/VBE


Init Video BIOS on resume (after sleep).


/OS="name"


Define Operating System. "eComStation" by default.. but some /OSI="name" notebooks need other OS name there. Examples: /OS="Microsoft Windows NT", /OSI="Windows 2001", /OSI="Windows 2001 SP1", "eComStation".


/SAP


Set startup ACPI options. Default value: 0. /SAP:0x0. You can assemble this values:
ACPI_FULL_INITIALIZATION 0x00ACPI_NO_ADDRESS_SPACE_INIT 0x01
ACPI_NO_HARDWARE_INIT 0x02
ACPI_NO_EVENT_INIT 0x04
ACPI_NO_HANDLER_INIT 0x08
ACPI_NO_ACPI_ENABLE 0x10
ACPI_NO_DEVICE_INIT 0x20
ACPI_NO_OBJECT_INIT 0x40


/MCPU:xx


Force the quantity of processors. The value is checked so you can't select 0 or more than you have.


/CD

Met USB problemen onder /APIC..

"Crazy Device" - use this switch if USB doesn't work or if you fail to boot. Use it only if you have troubles with USB.


/ALS

Geldig met /APIC probelmen met oude NVidia chipsets.

Set APIC link on ACPI start. Useful for old NVidias. (It's like /CD). Try it if computer hangs after booting of all drivers.


/TMR

Geldig met /APIC problemen onder NVIDIA chipsets

Use it if running SMP machine and the motherboard doesn't follow MPS 1.4 standard. 

/DV:vector

Alleen geldig met /APIC

Dummy Vector - hide the vector. The kernel will not process it. (/DV:0x57 is enabled by default on every PC now). Notes:
*) All digital values are accepted in hex or decimal form:
0x??? (hex)
0?? (octal)
??? (decimal)


/Onumber - Output

Debug versie van acpi.psd

The number of COM-port used for debug output (values: 1, 2, address of I/O port). Configure receiver: 115200,8,n HW flow contol


/LS:number


Leave Sleep - after sleep state the computer will be switched to this state (0 - no switch, 5 - turn off)












>Top<



Geraadpleegde bronnen

>Top<

Wiki: Advanced Configuration and Power Interface

Wiki: Intel APIC Architecture

Linux/ACPI Overview

The ACPI Component Architecture Project

Advanced Configuration and Power Interface

LessWatts.org - Saving Power on Intell systems with Linux

Setting the plug and play BIOS option (PNP OS) in CMOS Setup

Deze teksten mogen niet worden gewijzigd, vermenigvuldigd of voor commerciële doeleinden worden gebruikt zonder toestemming van de auteur. © Sjoerd Visser (2006).