Q: FreeBSD и CPU C-states
Вот мучаюсь в непонятках, есть две FreeBSD-коробки с одинаковым ядром и одинаковыми же настройками (потому что сделаны клонированием), разница в железе (и процессор и сетевые карты и материнки - проще сказать что одинаковое.... ничего там нет одинакового). И у одной процессор жрет ~1ватт (если на коробке ничего не происходит), а на другой - целых два (по powermon)
Видимая разница в C-states.
Коробка №1 (i3-6300T), которая 0.95-1вт
# sysctl dev.cpu.0 dev.cpu.0.cx_method: C1/mwait/hwc C2/mwait/hwc C3/mwait/hwc dev.cpu.0.cx_usage_counters: 1902729 301031 6950232 dev.cpu.0.cx_usage: 20.78% 3.28% 75.92% last 5104us dev.cpu.0.cx_lowest: C8 dev.cpu.0.freq_levels: 3201/35000 3200/33218 3100/31812 2800/27748 2700/26449 2600/25170 2400/22685 2200/20302 2000/18010 1900/16900 1700/14749 1500/12692 1300/10722 1200/9770 1000/7934 800/6182 dev.cpu.0.freq: 800
Коробка №2 (i3-7100U), которая ~2-2.2 ватта в простое
# sysctl dev.cpu.0 dev.cpu.0.cx_method: C1/mwait/hwc C2/mwait/hwc C3/mwait/hwc dev.cpu.0.cx_usage_counters: 1097457 6112991 77 dev.cpu.0.cx_usage: 15.22% 84.77% 0.00% last 725us dev.cpu.0.cx_lowest: C3 dev.cpu.0.freq_levels: 2401/15000 2400/15000 2300/14088 2100/12607 2000/11888 1800/10495 1700/9680 1500/8372 1400/7738 1300/7119 1100/5789 1000/5209 800/4090 700/3550 500/2386 400/1885 dev.cpu.0.freq: 400
Не то, чтобы я сильно озабочен был одним ваттом (это рубля три в месяц разницы), но неаккуратненько. Несмотря на то, что 7200U снижает частоту аж до 400 мегагерц (против 800 у 6300Т), жрет - вдвое.
Смущает cx_lowest ну и вообще полное отсутствие использования C3. Не надо ли в BIOS что-то про C-states поковырять, например?
Comments
powerd-то запущен? С
powerd-то запущен? С одинаковыми профилям?
Я ещё бы попробовал в качестве эксперимента отключить турбо в BIOS (Вижу, что тон у тебя включён).
А то мне тут попалась коробка (скорее – матплата, но там всё-в-одном, типа NUC'а) у которой включение Turbo приводило к совершенно хаотичному и странному поведению (я не поленился проверить — и под Linux тоже, так что особо FreeBSD не пообвиняешь).
У i3 нету турбы, но поищу :)
У i3 нету турбы, но поищу :)
powerd запущен и все вообще одинаково, кроме собственно железки.
ACPI считает, что есть: dev
ACPI считает, что есть: dev.cpu.0.freq_levels: 2401/15000
Вот эта частота 2401 (max + 1) – это состояние турбы. Которое P-States, и рулится в обработчике SMM, в BIOS.
Ну это место у двух ящиков
Ну это место у двух ящиков выглядит одинаково.
А, матери и BIOS одинаковые?
А, матери и BIOS одинаковые? Тогда да, врядли в этом дело.
матери и BIOS разные
матери и BIOS разные
А. Ну тогда я вообще ничему
А. Ну тогда я вообще ничему не удивлюсь. Энергопотребление и особенно во сне очень сильно зависит от матери и BIOS'а.
А ещё есть пор sysutils
А ещё есть пор sysutils/turbostat (портированный с линуха) который показывает текущие честные частоты. Включая турбу.
Только надо хорошо понимать,
Только надо хорошо понимать, что turbostat показывает, вот тут описание https://www.mankier.com/8/turbostat мне пришлось раз 5 прочесть.
Ну уж CPU%c3 я пойму - и там
Ну уж CPU%c3 я пойму - и там нули
Правда не нули в CPU%c7, что
Правда не нули в CPU%c7, что отдельно интересно.
Может и правда в BIOS где-то
Может и правда в BIOS где-то ещё lowest state в C2 стоит? Я видел на некоторых матерях настройку типа «Какие C states разрешать».
Может быть, конечно.
Может быть, конечно.
Но это уже боевой роутер, полезу туда с утра, когда семейство еще спать будет и интернету не просить.
Вообще, я не настоящий
Вообще, я не настоящий сварщик, просто буквально неделю назад возился с железкой, которая мсебя вела странно в этом месте, но там всё, что помогло, — отключить Turbo в BIOS.
Ну я лазил в BIOS и бежал в
Ну я лазил в BIOS и бежал в ужасе - ничего трогать не стал :)
https://ark.intel.com/search
https://ark.intel.com/search?q=i3-7200U не знает о таком процессоре.
Покажите вывод ports sysutils/x86info 'x86info -r'.
7100U конечно. x86info с
7100U конечно. x86info с утра уже
x86info v1.31pre
x86info v1.31pre
Found 4 identical CPUs
Extended Family: 0 Extended Model: 8 Family: 6 Model: 142 Stepping: 9
Type: 0 (Original OEM)
CPU Model (x86info's best guess): [Kabylake mobile]
Processor name string (BIOS programmed): Intel(R) Core(TM) i3-7100U CPU @ 2.40GHz
eax in: 0x00000000, eax = 00000016 ebx = 756e6547 ecx = 6c65746e edx = 49656e69
eax in: 0x00000001, eax = 000806e9 ebx = 00100800 ecx = 7ffafbbf edx = bfebfbff
eax in: 0x00000002, eax = 76036301 ebx = 00f0b5ff ecx = 00000000 edx = 00c30000
eax in: 0x00000003, eax = 00000000 ebx = 00000000 ecx = 00000000 edx = 00000000
eax in: 0x00000004, eax = 1c004121 ebx = 01c0003f ecx = 0000003f edx = 00000000
eax in: 0x00000005, eax = 00000040 ebx = 00000040 ecx = 00000003 edx = 11142120
eax in: 0x00000006, eax = 000027f5 ebx = 00000002 ecx = 00000009 edx = 00000000
eax in: 0x00000007, eax = 00000000 ebx = 029c67af ecx = 00000000 edx = 0c000000
eax in: 0x00000008, eax = 00000000 ebx = 00000000 ecx = 00000000 edx = 00000000
eax in: 0x00000009, eax = 00000000 ebx = 00000000 ecx = 00000000 edx = 00000000
eax in: 0x0000000a, eax = 07300404 ebx = 00000000 ecx = 00000000 edx = 00000603
eax in: 0x0000000b, eax = 00000001 ebx = 00000002 ecx = 00000100 edx = 00000000
eax in: 0x0000000c, eax = 00000000 ebx = 00000000 ecx = 00000000 edx = 00000000
eax in: 0x0000000d, eax = 0000001f ebx = 00000440 ecx = 00000440 edx = 00000000
eax in: 0x0000000e, eax = 00000000 ebx = 00000000 ecx = 00000000 edx = 00000000
eax in: 0x0000000f, eax = 00000000 ebx = 00000000 ecx = 00000000 edx = 00000000
eax in: 0x00000010, eax = 00000000 ebx = 00000000 ecx = 00000000 edx = 00000000
eax in: 0x00000011, eax = 00000000 ebx = 00000000 ecx = 00000000 edx = 00000000
eax in: 0x00000012, eax = 00000000 ebx = 00000000 ecx = 00000000 edx = 00000000
eax in: 0x00000013, eax = 00000000 ebx = 00000000 ecx = 00000000 edx = 00000000
eax in: 0x00000014, eax = 00000001 ebx = 0000000f ecx = 00000007 edx = 00000000
eax in: 0x00000015, eax = 00000002 ebx = 000000c8 ecx = 00000000 edx = 00000000
eax in: 0x00000016, eax = 00000960 ebx = 00000960 ecx = 00000064 edx = 00000000
eax in: 0x80000000, eax = 80000008 ebx = 00000000 ecx = 00000000 edx = 00000000
eax in: 0x80000001, eax = 00000000 ebx = 00000000 ecx = 00000121 edx = 2c100800
eax in: 0x80000002, eax = 65746e49 ebx = 2952286c ecx = 726f4320 edx = 4d542865
eax in: 0x80000003, eax = 33692029 ebx = 3031372d ecx = 43205530 edx = 40205550
eax in: 0x80000004, eax = 342e3220 ebx = 7a484730 ecx = 00000000 edx = 00000000
eax in: 0x80000005, eax = 00000000 ebx = 00000000 ecx = 00000000 edx = 00000000
eax in: 0x80000006, eax = 00000000 ebx = 00000000 ecx = 01006040 edx = 00000000
eax in: 0x80000007, eax = 00000000 ebx = 00000000 ecx = 00000000 edx = 00000100
eax in: 0x80000008, eax = 00003027 ebx = 00000000 ecx = 00000000 edx = 00000000
Total processor threads: 4
This system has 1 dual-core processor with hyper-threading (2 threads per core) running at an estimated 2.40GHz
Ok, CPUID[6].eax[2] == 1, так
Ok, CPUID[6].eax[2] == 1, так что C3 запрещено или из-за того, что есть постоянная активность устройств, или из-за бага в BIOSе.
Сделайте вот что:
# kgdb /boot/kernel/kernel /dev/mem
(kgdb) p/x cpu_quirks
и покажите результат.
Кроме того, попробуйте отключить USB или в BIOSе, или не загружать xhci.ko/ehci.ko/uhci.ko или не добавлять устройства в конфиг ядра.
(kgdb) p/x cpu_quirks
(kgdb) p/x cpu_quirks
$1 = 0x0
Отключить USB так просто не могу, это надо искать куда консоль воткнуть (IPMI на этой мамке нету)
BIOS на предмет C-states
BIOS на предмет C-states изучу, да.
Раз quirks == 0, это точно из
Раз quirks == 0, это точно из-за того, что какое-то устройство все время пишет/читает память. USB хост обычно первый кандидат.
Если в BIOSе есть опция C1E, то с ней C1 может стать более экономным, чем C2/C3.
Выключить USB я скорее не
Выключить USB я скорее не могу чем могу.
Ну то есть выключив - не смогу его включить :)
Выключить энергопотребление
Выключить энергопотребление USB можно средствами операционки, а не в BIOS: первым делом переместить все драйвера USB из конфига ядра в /boot/loader.conf
Вторым делом почитать # sysctl -d hw.pci.do_power_nodriver
hw.pci.do_power_nodriver: Place a function into D3 state when no driver attaches to it. 0 means disable. 1 means conservatively place devices into D3 state. 2 means aggressively place devices into D3 state. 3 means put absolutely everything in D3 state.
Третьим делом в /boot/loader.conf закомментировать загрузку драйверов USB-устройств и включить hw.pci.do_power_nodriver=1
Я правильно понимаю, что если
Я правильно понимаю, что если я уберу загрузку USB-драйверов, то USB-клавиатура тоже не будет работать?
Подожду тогда шнурка RS232->USB, а то включить загрузку USB будет нечем (если где-то, к примеру, ошибусь)
Но раз уж тут:
Но раз уж тут:
Кого убирать из ядра, все вот эти:
device uhci # UHCI PCI->USB interface
device ohci # OHCI PCI->USB interface
device ehci # EHCI PCI->USB interface (USB 2.0)
device xhci # XHCI PCI->USB interface (USB 3.0)
device usb # USB Bus (required)
device ukbd # Keyboard
device umass # Disks/Mass storage - Requires scbus an
?
Или только *hci ?
Если не отключать USB в BIOS,
Если не отключать USB в BIOS, то в loader prompt клавиатура работать будет, так как loader использует сервисы BIOS для доступа к оборудованию.
В loader.conf переносить из ядра вообще всё USB-шное. Если после этого закомментировать загрузку USB-стека со всеми драйверами, то клавиатура после загрузки ядра работать не будет, но всегда можно будет ребутнуться в loader prompt и сказать там load /boot/kernel/uhci.ko и usb.ko и ukbd.ko и kernel и потом boot.
USB нету, использование C3 не
USB нету, использование C3 не появилось :(
Я писал не про использование
Я писал не про использование C3, а про снятие питания с USB-устройств.
Ну я к тому, что тут выше
Ну я к тому, что тут выше поставили диагноз по переписке "дело может быть в USB"
Ну вот пока рецепт "убрать его на" - не спас. Буду пробовать в BIOS отключить. Недельки через три, как кабель придет.
... все время пишет/читает память
А есть ли на этих ящиках zfs?
Там где меньшее потребление в
Там где меньшее потребление в простое - есть. Где больше - нет.
Тогда мимо. Подумалось на
Тогда мимо. Подумалось на l2arc, который с заданным интервалом непрерывно сканирует arc.
Не могу ничего сказать про
Не могу ничего сказать про FreeBSD, но могу сказать за интеловские C-states, энергопотребление и линукс. Эти самые C-states нынче есть не только у CPU, но еще и у GPU и у всего package целиком. В свежих версиях turbostat это обозначается как CPU%c*, GFX%rc6 и Pkg%pc* соответственно. В простое у меня по данным того же turbostat больше всего кушает именно package (т.е. всяческий uncore), и это хорошо коррелирует с тем, что говорит о потреблении батарея.
На глубину package C-state (PC) и время нахождения в нем влияют состояния не только CPU и GPU, но и различных контроллеров, про которые Интел говорит «у нас теперь в процессоре есть специальная поддержка %interfacename во имя скорости/безопасности». У себя я больше всего воевал с отключением Thunderbolt, но кроме того это может быть IOMMU aka VT-d (в линуксе контролируется опциями ядра), SATA, возможно USB (начиная где-то со Skylake?), далее везде.
Для укрощения встроенного GPU в линуксе можно покрутить ручки RC6, FBC (особенно актуально для hidpi мониторов), PSR (возможно, все еще с осторожностью) и какие-нибудь еще, в i915 их много.
Да, и про С-states CPU в BIOS
Да, и про С-states CPU в BIOS: возможно, имеет смысл прицельно поискать Intel® Speed Shift Technology
https://ark.intel.com/compare/95442,90728
Кстати, если проц совместимый
Кстати, если проц совместимый, то нынче завезли забавную штуку sysutils/powermon чтоб посмотреть сколько жрётся
Да, ее в соседнем треде где
Да, ее в соседнем треде где-то посоветовали, пользую вовсю.
Но turbostat еще прикольнее.
Ну... если уж упарываться по
Ну... если уж упарываться по полной https://github.com/opcm/pcm в порты не знаю затащил ли кто, но билдилась и вроде работало
У меня к сожалению только на лаптопе проц по полной поддерживает, а в десктопный как то плохо эту фичу завезли :(
Оно есть и собирается, но
Оно есть и собирается, но счастья не приносит: Unsupported processor model (158).