[Linux] USB-устройство запрещает переход в C3
Например, выполните от рута (желательно, когда загрузка cpu очень мала)
cat /proc/acpi/processor/CPU0/power; sleep 1; \
cat /proc/acpi/processor/CPU0/power; modprobe -r uhci_hcd; sleep 1; \
cat /proc/acpi/processor/CPU0/power; modprobe uhci_hcd
У меня turion и загрузка модуля uhci_hcd не как не сказывается на возможность снижение чистоты проца. Снижение чистоты проца не приводит к изменению вывода:
turion linux # cat /proc/acpi/processor/CPU0/power
active state: C2
max_cstate: C8
bus master activity: 07e07dff
states:
C1: type[C1] promotion[C2] demotion[--] latency[000] usage[00037150]
*C2: type[C2] promotion[C3] demotion[C1] latency[018] usage[00886069]
C3: type[C3] promotion[--] demotion[C2] latency[083] usage[00010797]
turion linux #
C3 не имеет ничего общего со снижением частоты. Для Pentium M/Celeron M этот режим соответствует Deep Sleep, в котором снижено напряжение на процессоре и остановлены почти все блоки процессора.
Оставить комментарий
procenkotanya
см. такжеДавно известна вот такая проблема: подключение USB-устройства приводит к тому, что процессор не переходит в энергосберегающее состояние C3 (Deep Sleep для Celeron M|Pentium M). Поиск в гугле по запросу "usb device prevents entering C3" даёт кучу ссылок на описание проблемы, но путей решения мне пока найти не удалось.
Собственно, проблема, как я понял, заключается вот в чём:
при подключении USB устройства контроллер постоянно производит DMA транзакции, что не позволяет процу переходить в C3, так как в этом состоянии он не может поддерживать согласованность кеша. Поэтому, к примеру, подключение оптической мышки приводит к существенно более быстрому расходу энергии.
В частности, выгрузкой uhci_hcd проблема решается:
Видно, что выгрузка uhci_hcd приводит к уменьшению счётчика bus master activity и к тому, что C3 начинает использоваться.
Так вот, мне хочется знать, можно ли сделать так, чтобы подключение USB-устройства (точнее, загрузка uhci_hcd) не приводило(a) к тому, что в C3 проц заходить не будет. Может у кого-нибудь есть идеи? Или я просто плохо искал, и проблема давно решена?