[Linux] USB-устройство запрещает переход в C3

procenkotanya

см. также
Давно известна вот такая проблема: подключение USB-устройства приводит к тому, что процессор не переходит в энергосберегающее состояние C3 (Deep Sleep для Celeron M|Pentium M). Поиск в гугле по запросу "usb device prevents entering C3" даёт кучу ссылок на описание проблемы, но путей решения мне пока найти не удалось.
Собственно, проблема, как я понял, заключается вот в чём:
при подключении USB устройства контроллер постоянно производит DMA транзакции, что не позволяет процу переходить в C3, так как в этом состоянии он не может поддерживать согласованность кеша. Поэтому, к примеру, подключение оптической мышки приводит к существенно более быстрому расходу энергии.
В частности, выгрузкой uhci_hcd проблема решается:
 :~$ cat /proc/acpi/processor/CPU0/power 
active state: C2
max_cstate: C8
bus master activity: ffffffdf
states:
C1: type[C1] promotion[C2] demotion[--] latency[000] usage[00000010]
*C2: type[C2] promotion[C3] demotion[C1] latency[001] usage[03270513]
C3: type[C3] promotion[--] demotion[C2] latency[085] usage[00051429]
:~$ cat /proc/acpi/processor/CPU0/power
active state: C2
max_cstate: C8
bus master activity: ffffffff
states:
C1: type[C1] promotion[C2] demotion[--] latency[000] usage[00000010]
*C2: type[C2] promotion[C3] demotion[C1] latency[001] usage[03274605]
C3: type[C3] promotion[--] demotion[C2] latency[085] usage[00051429]
:~$ sudo modprobe -r uhci_hcd
:~$ cat /proc/acpi/processor/CPU0/power
active state: C3
max_cstate: C8
bus master activity: 00000000
states:
C1: type[C1] promotion[C2] demotion[--] latency[000] usage[00000010]
C2: type[C2] promotion[C3] demotion[C1] latency[001] usage[03284802]
*C3: type[C3] promotion[--] demotion[C2] latency[085] usage[00052087]
:~$ cat /proc/acpi/processor/CPU0/power
active state: C2
max_cstate: C8
bus master activity: f2000000
states:
C1: type[C1] promotion[C2] demotion[--] latency[000] usage[00000010]
*C2: type[C2] promotion[C3] demotion[C1] latency[001] usage[03286809]
C3: type[C3] promotion[--] demotion[C2] latency[085] usage[00053028]
:~$ sudo modprobe uhci_hcd
:~$ cat /proc/acpi/processor/CPU0/power
active state: C2
max_cstate: C8
bus master activity: ffffffff
states:
C1: type[C1] promotion[C2] demotion[--] latency[000] usage[00000010]
*C2: type[C2] promotion[C3] demotion[C1] latency[001] usage[03299110]
C3: type[C3] promotion[--] demotion[C2] latency[085] usage[00058182]

Видно, что выгрузка uhci_hcd приводит к уменьшению счётчика bus master activity и к тому, что C3 начинает использоваться.
Так вот, мне хочется знать, можно ли сделать так, чтобы подключение USB-устройства (точнее, загрузка uhci_hcd) не приводило(a) к тому, что в C3 проц заходить не будет. Может у кого-нибудь есть идеи? Или я просто плохо искал, и проблема давно решена?

procenkotanya

Товарищи с линуксом, поддержкой ACPI и С3, скажите, пожалуйста, у вас тоже вставка/извлечение uhci_hcd к таким эффектам приводит?
Например, выполните от рута (желательно, когда загрузка 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

Spin

А этот режим кроме как понижению чистоты проца что нить еще делает?
У меня 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 #

procenkotanya

C3 не имеет ничего общего со снижением частоты. Для Pentium M/Celeron M этот режим соответствует Deep Sleep, в котором снижено напряжение на процессоре и остановлены почти все блоки процессора.
Оставить комментарий
Имя или ник:
Комментарий: