Превод на поддръжка за управление на мощността на Linux, библиотека на портала на Linux
Превод Поддръжка за управление на мощността на Linux
ключови думи за търсене: управление на мощността на драйвера, консумация на енергия, пестене на енергия, linux
1. Въведение.Тема за управление на захранването в linux се появи тук от дълбините на времето, влязох в документацията на ядрото, за да потърся нещо по тази тема. Намерено, но, както се оказа, не съвсем правилно. Но реших, че преводът все пак ще ми е от полза, поне на мен като английска практика :). Тъй като английският ми не е много добър, се приемат и правят разумни промени в превода.
2. Преведена документация/pm.txt от разпространение на ядрото 2.4.23.
Поддръжка за управление на захранването на Linux
Този документ надраска повърхността на използването на управление на захранването на вашата Linux система и прилагането на тази поддръжка във вашите драйвери.
APM или ACPI? ------------ Ако имате сравнително нов x86 лаптоп, настолен компютър или сървър, е вероятно да поддържа разширено управление на захранването (APM) или разширен интерфейс за конфигурация и захранване (ACPI). От двата ACPI е по-свежият и поставя управлението на захранването в ръцете на операционната система, което позволява да се управлява по-ефективно, отколкото е възможно чрез BIOS с APM.
Най-добрият начин да определите коя от двете технологии се поддържа във вашата система е да изградите ядро, което поддържа и двете (от версия 2.3.x поддръжката на ACPI е активирана по подразбиране). Ако бъде открита работеща хардуерна поддръжка за ACPI, ACPI драйверът ще „замени“ и ще деактивира APM, в противен случай ще се използва APM.
За съжаление, нямате възможност да използвате ACPI и APM едновременно. Някои другари с непълни или на местанеправилна хардуерна поддръжка за ACPI или APM, би искал да използва и двете технологии, за да активира пълния набор от функции, но няма начин да постигне това. Машината може да се управлява само през един интерфейс (могат да се превключват, но не и да се използват едновременно).
Демони в потребителското пространство ------------------ И APM, и ACPI трябва да поддържат демони в потребителското пространство, наречени съответно apmd и acpid. И двете могат да бъдат намерени във вашата Linux дистрибуция или получени от Интернет (вижте връзките по-долу) и трябва да се уверите, че се появяват по време на зареждане на системата. Ако вашата система няма хардуерна поддръжка за APM или ACPI, тогава демонът просто ще излезе.
Интерфейс на драйвер ----------------- Ако пишете нов драйвер за устройство или поддържате съществуващ, той трябва да включва поддръжка за управление на захранването. Без това такъв драйвер, дори в системи с неговата поддръжка, може да изключи възможността за безопасен сън.
Накратко: 1) регистрирайте всяка част от устройството чрез pm_register 2) извикайте pm_access преди достъп до хардуера (това гарантира, че устройството е включено и готово) 3) вашата функция pm_callback ще бъде извикана преди заспиване (ACPI D1-D3) или след връщане от него (ACPI D0) 4) извикване на pm_dev_idle, когато устройството е idle what -time (по избор, но ще помогне за откриване на неактивно устройство) 5) когато разтоварвате модул (драйвер), не забравяйте да го дерегистрирате с pm_unregister
Подробности ----------- Следва кратък списък с често задавани въпроси, които в крайна сметка ще бъдат заменени от пълно ръководство за писане на драйвери.
Въпрос: Когато устройствата"заспива"? О: Устройствата могат да бъдат поставени в режим на заспиване чрез директна потребителска заявка (затваряне на капака на лаптопа), чрез политика за управление на захранването на системата (след 30 минути неактивност на конзолата) или чрез политика за управление на мощността на устройството (изключете устройството след 5 минути неактивност).
В: Трябва ли водачът винаги да следва искането за изключване? О: Не, драйверът може да върне -EBUSY в отговор на заявка и това ще спре изключването на системата. В този случай всички изключени устройства се "събуждат" и системата продължава да работи. Можете да опитате отново по-късно.
Въпрос: Може ли драйверът да блокира заявки за изключване/включване? О: Да, драйверът може да забави издаването на отговор на такава заявка, докато устройството не е готово да обработи тази заявка. Най-добре е обаче да отговаряте на заявките възможно най-бързо.
Въпрос: В какъв контекст се генерират заявки за дезактивиране/разрешаване? О: Заявките за изключване/захранване се генерират в контекста на нишка на ядрото. Следователно, докато системата спи, не е опасно да заключвате и разпределяте памет, да инициирате заявки и да правите каквото искате по отношение на ядрото.
Въпрос: Ще обработва ли драйверът заявки „в спящ режим“? О: Възможно. Обработката на заявки след "заспиване" зависи изцяло от водача - той може или да ги изпълни, или да ги отхвърли, или просто да ги игнорира. Важното тук е, че драйверът няма да получи достъп до устройството, тъй като шината на устройството може да е неактивна. (*) Ако драйверът формира опашка от заявки към устройство, докато то "спи", тогава трябва да сте наясно, че състоянието на това устройство и свързаните с него обекти (напр. LAN) може да се промени до момента, в който то се събуди. Изглежда разумно да игнорирате всички искания само ако е такане е драйвер за устройство за съхранение.
В: Мога ли да контролирам регистри за управление на мощността, специфични за шина? А: Не. Това се извършва от съответния шофьор на автобуса. Този драйвер или подсистемата за управление на захранването като цяло автоматично ще активира наличната функционалност за управление на захранването, ако има такава.
Въпрос: И така, какво всъщност ми трябва, за да активирам поддръжка за изключване/включване? О: Трябва да запазите всички данни за състоянието на устройството (контекст), които може да се загубят, когато устройството бъде изключено. При използване на ACPI са налични три нива на деактивиране: D1, D2 и D3 (тези нива се предават като аргумент „данни“ на обратното извикване на устройството). На ниво D3 устройството се изключва напълно и губи целия контекст, D1 и D2 просто намаляват консумацията на енергия в различна степен и в този случай се губи само част от контекста. За да се защитите просто и напълно, просто трябва да запазите целия контекст и след това напълно да го възстановите.
Въпрос: Къде мога да запазя контекста на устройството? О: Най-вероятно в паметта. Разпределете буфер с kmalloc или съхранете контекста в дескриптор на устройство. Това гарантира, че съдържанието на паметта е възстановено и достъпно, преди да бъде включено, дори ако системата е изчистила състоянието си на диска, преди да бъде изключена.
В: Какво ми трябва, за да използвам ACPI срещу APM (и т.н.)? О: Драйверите не трябва да се притесняват каква технология за управление на захранването се използва в системата. За тях не забравяйте да обработвате заявки за дезактивиране/разрешаване.
Въпрос: Какво ще кажете за зависимостите между устройствата? A: Когато драйвер регистрира устройство, подсистемата за управление на захранването използва предоставената информация, за да изгради дърво на зависимостта междуустройства (като USB устройство A е свързано към USB контролер B, който е свързан към PCI шина C). Когато една подсистема иска да постави устройство в режим на заспиване, тя първо изпраща съответната заявка до своя драйвер, и така до драйвера на контролера, и така нататък до системната шина. Когато устройството се събуди, всичко се случва в обратен ред.
Въпрос: Къде мога да получа повече информация относно активирането на управление на захранването за моя конкретен драйвер или устройство? О: Опитайте да се свържете с пощенския списък за разработчици на ACPI [email protected]
Системен интерфейс ------------- Ако разработвате нова система за управление на захранването за Linux (нещо като APM или ACPI), тогава трябва да комуникирате с драйверите чрез съществуващия интерфейс за управление на захранването.
3. БележкиНе са намерени промени в дистрибуцията на ядрото 2.6.0 в същия файл.