Как понять, чем столь активно занимается acpi.sys?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 22.02.18 05:23
Оценка:
На днях внезапно заметил, что системный процесс (который ID 4) стал отъедать 11-12% независимо от реальной загрузки. В Process Explorer видно, что почти потребление создает поток ACPIWorkerThread из acpi.sys.

В сети на эту ситуацию полно жалоб и обсуждений, в том числе и на форумах MS, но во всех без исключения царит какое-то унылое соплежуйство в стиле "перезагрузитесь", "переустановите драйверы", "отключите энергосбережение" и т.п. За несколько дней не удалось найти ни одного мало-мальски толкового обсуждения, где предлагался бы вменяемый способ выяснения, что именно делает драйвер ACPI, с целью нахождения возможной причины повышенной загрузки.

Стеки системных потоков в Process Explorer просмотреть невозможно (Unable to access thread) даже под Local System. Process Hacker дает такой стек:

  Стек ACPIWorkerThread
0, ntoskrnl.exe!KiDeliverApc+0x1e3
1, ntoskrnl.exe!KiApcInterrupt+0xd7
2, hal.dll!HalpPCIConfig+0x167
3, hal.dll!HalpReadPCIConfig+0x5e
4, hal.dll!HalpGetPCIData+0x8e
5, hal.dll!HalGetBusDataByOffset+0x86
6, ACPI.sys!PciConfigSpaceHandlerWorker+0x3f2
7, ACPI.sys!GetPciAddressWorker+0x415
8, ACPI.sys!ACPIGetWorkerForInteger+0x115
9, ACPI.sys!AsyncCallBack+0x7a
10, ACPI.sys!RunContext+0x13b
11, ACPI.sys!StartTimeSlicePassive+0x8a
12, ACPI.sys!ACPIWorkerThread+0xd8
13, ntoskrnl.exe!PspSystemThreadStartup+0x5a
14, ntoskrnl.exe!KiStartSystemThread+0x16

Записал несколько секунд в WPR, открыл в WPA — там отчетливо видна высокая частота ISR/DPC в acpi.sys, с преобладанием вызовов ACPIInterruptDispatchEventDpc, ACPIInterruptServiceRoutine и ACPIInterruptServiceRoutineDPC. Стеков для ISR/DPC WPA почему-то не показывает.

Из того, что вызывается из ACPIWorkerThread, наибольшая длительность выполнения приходится на функцию StartTimeSlicePassive и вызываемую оттуда RunContext. Гугление по этим названиям ничего не дает. Стек такой:



Дальше моя фантазия не работает — с чем вся эта совокупность может быть связана? Кто может генерировать столь частые прерывания, и что драйвер может так долго делать для их обработки?

Вообще, этим проблемам с acpi.sys скоро уже двадцать лет, однако, судя по обсуждениям, MS даже в десятке не сподобилась сделать вменяемой диагностики — до сих пор так предлагается "протереть фары, попинать колеса". После чтения всего этого бреда очень хочется проснуться.

Переключал профили питания, отключал ноутбук от сети, переводя на батарейное питание. Запрещал все устройства (кроме критических), которые можно запретить (в том числе Microsoft ACPI-Compliant Control Method Battery, все сетеые устройства, включая виртуальные, USB 3.0 Controller, System High-Performance Event Timer, System Timer и т.п.). Безрезультатно.

Ноутбук MSI GT72S 6QE, система Win7 SP1 (6.1.7601) x64 En. Прошивки BIOS/EC стоят последние, что есть у производителя.

Что еще можно попробовать?
acpi system cpu acpiworkerthread starttimeslicepassive runcontext wpr wpa
Re: Как понять, чем столь активно занимается acpi.sys?
От: reversecode google
Дата: 22.02.18 08:26
Оценка:
сдампить ACPI ASL
любыми способами достать аргументы IO обращения по функциям PCI в стеке
открыть карту адресного распределения IO в винде
медитировать куда к кому оно там лезет опрашивать на этих данных

пробовать еще запрещать критические
нетворк контроллеры всякие езернет, фавля, мышкарус итд
Re[2]: Как понять, чем столь активно занимается acpi.sys?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 22.02.18 10:19
Оценка:
Здравствуйте, reversecode, Вы писали:

R>сдампить ACPI ASL


Чем это можно сделать? Я с ним вообще никогда не имел дела.

R>любыми способами достать аргументы IO обращения по функциям PCI в стеке


А какими способами это можно сделать в пределах одной машины? Мне даже WinDBG подключить некуда — IEEE1394 у этого ноутбука нет, сетевой адаптер стоит от Killer (нет драйвера для WinDBG), а когда я изучал вопрос о соединении по USB 2/3 — сложилось мнение, что таким образом почти не получить работающего соединения.

R>пробовать еще запрещать критические

R>нетворк контроллеры всякие езернет, фавля, мышкарус итд

Так я их все запрещал, в чем их критичность? Критическими я назвал те, без которых система не сможет работать.
Re[3]: Как понять, чем столь активно занимается acpi.sys?
От: reversecode google
Дата: 22.02.18 10:35
Оценка:
есть тулы в гугле которые дампят сами таблицы
и нужно еще искать какими тулами эти таблицы вывести в asl
либо взять бут диск линкуса, загрузится с под него
и сдампить под ним
там это одной командой выводится как я помню
и сразу в asl

зачем вам интерфейсы ? локально уже не работает ?
ну накидайте на коленке драйвер который будет хучить функции
и залогирует все параметры обращения
Re[4]: Как понять, чем столь активно занимается acpi.sys?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 23.02.18 16:51
Оценка:
Здравствуйте, reversecode, Вы писали:

R>есть тулы в гугле которые дампят сами таблицы

R>и нужно еще искать какими тулами эти таблицы вывести в asl

Нашел пару утилит для винды, но сперва решил попробовать включить "ACPI AML Enumeration" в HWiNFO, в надежде увидеть что-то полезное. HWiNFO в процессе обработки намертво завесил ноутбук, а когда я его выключил/включил, после перезагрузки повышенная активность acpi.sys исчезла. На всякий случай посмотрел в BIOS Setup, вдруг там чего сбросилось, но настройки не изменились. Попереключал Power Schemes, выдернул/воткнул сетевую вилку — все нормально, активность не возрастает.

Так и не понял, что это было.

R>зачем вам интерфейсы ? локально уже не работает ?


А как локально ставить стоп-точки, или хотя бы ловить прохождение через указанные адреса? Последним, кто это умел, был SoftICE.

R>ну накидайте на коленке драйвер который будет хучить функции


Чтоб накидать "на коленке", надо уметь обходить Integrity Check. Или для его полного отключения достаточно загрузиться с соответствующей опцией?
Re[5]: Как понять, чем столь активно занимается acpi.sys?
От: reversecode google
Дата: 23.02.18 18:55
Оценка:
выключить обратно AML Enumerator и посмотреть не возрастет ли ?

в ida загрузить acpi.sys она подтянет pdb
список ваших функций у вас есть, изучаем их в ида и кол агрументов
описываем траплины
пишем драйвер который грузится и в процессе загрузки ловит acpi.sys и хучит нужные ваши функции которые нужно залогировать

пишем логер с буфером(скорость наверняка будет большая)
и по кольцу буфера сбрасываем содержимое буфера в файл
вуаля
я такими фокусами занимался когда всякие дрова для DVB карт портировал
и нужны были данные по портам мапинга отслеживатьии
Re[6]: Как понять, чем столь активно занимается acpi.sys?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 24.02.18 02:01
Оценка:
Здравствуйте, reversecode, Вы писали:

R>выключить обратно AML Enumerator и посмотреть не возрастет ли ?


В смысле? Это локальный режим утилиты HWiNFO, он используется только в ней, когда она запускается. Потребление-то было вне зависимости от использования каких-либо средств, сразу после загрузки системы. А теперь я, наоборот, не могу добиться возрастания потребления.

R>пишем драйвер который грузится и в процессе загрузки ловит acpi.sys и хучит нужные ваши функции которые нужно залогировать

R>пишем логер с буфером(скорость наверняка будет большая)
R>и по кольцу буфера сбрасываем содержимое буфера в файл

Угу, только времени это заняло бы неслабо — я надеялся, что за двадцать лет уже придумали что-нибудь относительно готовое, хоть бы и в виде конструктора.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.