LINUX.ORG.RU
ФорумAdmin

Можно ли выбрать boot cpu отличающийся от CPU0?

 ноутбук boot


1

3

Собственно в чем суть. Есть новые интеловские процессоры начиная с метеорлейка , arrow тоже такой же и видимо все последующие линейки плиточных интелов будут такими же. Там есть SOC-плитка с двумя E-ядрами - они последние в списке. В моем случае 125Н это CPU 16 и 17. Остальные P и E ядра на другой плитке, и суть интеловской идеи при легкой нагрузке и в режиме сна S0iX отключать процессорную плитку полностью, а все легкие ждущие задачи крутить на ядрах SOC плитки. Ее по любому не отключишь - там контроллер памяти, порты , шина и прочая хабовая часть.

Под оффтопом так и работает, а вот онтопик бутится всегда с CPU0. Засунуть команду в ядро ограничить количество CPU на буте можно - но это всегда будет CPU0 а это всегда жручий P-core. И соффланить его потом после загрузки с передачей всех функций на 16 или 17 cpu не выходит. Нагрузку через шедьюлер можно перебросить на E-ядра (с этим отлично справляется intel_lpmd) - но вот разные служебные ядерные процессы продолжают вертеться на CPU0 что не позволяет отключить плитку с ядрами поностью и перейти на SOC. Поэтому вот и ищется странное - как заставить линукс грузиться с определенного ядра.

★★★★★

isolcpus - Isolate CPUs from the kernel scheduler. Данный параметр позволяет заставить Linux не использовать определенные процессорные ядра в процессе своей работы, т.е. мы можем выделить себе несколько ядер на многоядерном процессоре и запускать на них необходимый софт.

anonymous
()
Ответ на: комментарий от anonymous

isolcpus - Isolate CPUs from the kernel scheduler.

Тоже думал об этом - но вот только не ясно на каком ядре будет крутиться сам kernel scheduler, RCU и прочая шняга. С изолированием пользовательских процессов от P-ядер отлично справляется intel_lpmd. То есть если наблюдаешь загрузку процессорных ядер - то вся работа летит сначала на LP (ядра SOC), потом на E и только при полно загрузке на P. Но при этом на ядре 0 постоянно выскакивает какая-то смехотворная нагрузка - на уровне «белого шума» можно сказать - но она периодически выскакивает.

Qui-Gon ★★★★★
() автор топика

но вот разные служебные ядерные процессы продолжают вертеться на CPU0

Это точно так? Например в Haiku после инициализации ядра CPU 0 не выполняет каких либо специальных функций и может быть хоть вообще отключён.

X512 ★★★★★
()
Ответ на: комментарий от cobold

Ну в том то и беда онтопика в сравнении с оффтопиком. Как я понял из прочтения истории cpu0 hotplug там вся фенька в том что если заоффлайнить cpu0 то система не проснется из гибернации и S3-suspend. S3 для новых процессоров уже не нужно ибо выпилено как класс, а перед гибернацией нужно cpu0 обратно заонлайнить видимо.

Суть как опять же написано в том что для работы ОС этот cpu0 не сильно важен. Но то что его нельзя вырубить - гадит и в s0ix и в работе системы.

Qui-Gon ★★★★★
() автор топика

Привет, ребята. Пишу сюда, потому что тут вроде как активное обсуждение. Вот установил я Gentoo Linux, да? Теперь нужно установить драйвера на видеокарту (Nvidia GeForce RTX 3060). Вот в Вики пишут что мне нужно поставить USE-флаги vdpau и nvenc, но есть же ещё и vaapi. Так вот, вопрос один: vdpau или vaapi? Или оба? Спасибо.

anonymous
()
Ответ на: комментарий от cobold

хотя бы одно P ядро должно быть активно

Интересно, для какого ядра и на каком ядре выполняется микрокод процессора? Что будет если микрокод попытается выполнить команду неподдерживаемую E-ядром.

anonymous
()
Ответ на: комментарий от cobold

откуда в ноутбуке настройки биос. Это сказки. Сейчас в ноутбуках 2 настройки - время поставить и пароль установить. А для десктопа все это энергосбережение P и E ядра нужны как собаке даже не пятая а сто пятая нога.

Qui-Gon ★★★★★
() автор топика
Ответ на: комментарий от anonymous

nvidia это vdpau. Все остальное - vaapi. Но там вопрос еще совместимости софта - как я понимаю на нвидиевскую технологию все забили и в софт встраивают поддержку vaapi что логично - декодирование через нвидию никакой энергоэффективности не принесет, там и энергосбережение отвратное и декодеры говно. Но как я понимаю для драйверов нужно.

В принципе для совместимости есть прослойка транслирующая vaapi в vdpau или наоборот.

Qui-Gon ★★★★★
() автор топика
Ответ на: комментарий от anonymous

На каждом же. И микрокод не выполняет команды процессора. Он их реализует - то есть он написан не на тех командах на которых работают программы а на внутренних никому за пределами интела не известных командах и он четко свой под каждое ядро.

Qui-Gon ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Как я понял по документации, без cpu0_hotplug нельзя перекинуть обработку системных прерываний на другие ядра

А если так попробовать

cat /proc/irq/32/smp_affinity 
echo 0x030000 >/proc/irq/32/smp_affinity

каждый бит - одно ядро, т.е. 0x030000 это ядра 16 и 17 (нумерация с нуля)

router ★★★★★
()
Ответ на: комментарий от router

А если так попробовать

У меня этим занимается intel_lpmd. Этот демон может выводить ядра из шедъюлера через cgroup и мигрировать irq через smp_affinity в зависимости от нагрузки на комп. То есть если комп не нагружен - ну как сейчас - активеы только 16-17 и smp_affinity 0x30000. Если что-то запущу - то демон сначала расчехлит E-ядра, а затем уже и P. Кстати штука классная и очень полезная - без нее ужор батареи катастрофический на интеле.

То есть по запускаемым процессам все отлично, проблема - нутро самого кернела. Нагрузка там смешная просто, но она есть. То есть жырное P-ядро просыпается за каким-то хреном и поджирает энергию. Причем судя по утилизации 16-17 ядра легко бы осилили эту задачу.

Расширенные настройки BIOS (комментарий)

Почти все - преданья старины глубокой. Единственный ноут из попадавшихся мне в руки где реально можно вывалиться в инженерные настройки - GPD Win Max 2. Для АМД есть внешняя приблуда - делаешь загрузочный флеш и там можно копаться в процессорных настройках(ну в том что АДМшное - понятно что фичи ноута не от АМД эта приблуда не умеет). Еще иногда получается хакнуть биос и вытащить из него список UEFI переменных - и потом править их через расширенный GRUB. Таким баловался на Dell когда undervolt еще был закрыт на уровне биоса а не на уровне железа. Но в нынешнем варианте - Honor, у этой штуки нипойми какой биос и как к нему подступиться. Впрочем новые леновы не сильно лучше.

Qui-Gon ★★★★★
() автор топика

Нет, Linux всегда загружается с CPU0. Обходных путей нет, так как CPU0 жестко привязан к инициализации системы и обработке прерываний. Intel не предоставляет механизмов смены boot CPU, и Linux не поддерживает такую возможность.

anonymous
()
Ответ на: комментарий от anonymous

Intel не предоставляет механизмов смены boot CPU

Для линукса. В вындовз все норм - выжимают по 18 часов со сраного метеорлейка против 6 в линуксе. Не зря прижился термин wintel - вроде как и вкладываются в линукс, и в драйвера, и в разработку - но какую-нибудь вонючку надо зарыть чтобы в чем-то линукс был принципиально непреодолимо хуже. Ну в общем нам не привыкать…

Qui-Gon ★★★★★
() автор топика
Ответ на: комментарий от router

тогда не будет работать поверсейвинг в видеокарте. Он приземлился только в 6.14-rc, а этот импакт будет поболе чем легкая загрузка CPU0. Да и вообще поддержка Arc в 6.1 грустная.

В общем куда ни плюнь а поддержка этого Little-Big архитектуры x86 в линуксе грустна. А теперь еще и амд пошел тем же путем и запихал малые и большие ядра. И куда теперь крестьянину податься….

Qui-Gon ★★★★★
() автор топика

Пока добавил только rcu_nocbs=0-7 в параметры загрузки

Получил

rcu: Offload RCU callbacks from CPUs: 0-7.

Не то чтобы полностью получилось разгрузить P-ядра, но хоть что-то.

Юзерскими процессами и перемещаемыми IRQ рулит intel_lpmd - достаточно эффективно в общем-то рулит.

В итоге удалось выжать из 3К амолед ноута потребления ниже 7 ватт при проигрывании VP09 FHD ютуба в окне. Ну правда на 138-nightly со всеми последними патчами от Мартина. И да - на малой яркости конечно. Но это в общем-то вполне достойно, особенно учитывая что без всех этих оптимизаторских извращений ноут просил на тот же ролик ватт 12.

Qui-Gon ★★★★★
() автор топика
Ответ на: комментарий от Qui-Gon

rcu_nocbs=0-7

А если наоборот, раз cpu0 не усыпить, пусть все прерывания только он и обрабатывает, за одно и частоту у него порезать? А остальные будить только для приложений?

anonymous
()
Ответ на: комментарий от router

не - там 4 гипертредовых P-ядра. Они дают 0-7. И их вообще теребить не хочется никогда ну разве кроме реально тяжелых вычислений. Но вот boot cpu - P ядро, и туде прилетает всякое говно. А раз оно активируется - то туда и RCU прилетает.

Потом еще 8 E ядер - на том же чиплете что и P ядра. Эти ядра не бутовые и они четко следуют рекомендациям intel_lpmd. Туда ничего лишнего не летит. А когда есть средняя нагрузка - ну пусть обрабатывают все что досталось.

Ну и еще 2 ядра лежат на SOC чиплете. По идее они как раз на малой нагрузке - ну вот например сейчас - все и тянут. По сути двухядерный атом. Но гораздо мощнее - наверное что-то вроде 10-го поколения с ограничением на 2 ггц

Тут главная проблема - boot ядро, оно живет своей жизнью. Конечно большой вопрос интелу - нахухуа вы долбоящеры сдеали CPU0 P-ядром? Какая там такая безумная нагрузка загрузить ОС с ссд и раскидать несколько десятков байтов по регистрам? В этом решении прямо стоит вонища маркетологами и эффективными менеджерами - как так загузка 1 секунду? А ну сделайте 0.5!

Qui-Gon ★★★★★
() автор топика
Ответ на: комментарий от anonymous

нафиг - P ядро жрет за четверых. Лучше с него убрать по максимуму что можно - и пусть оно сидит с C10 99% времени.

С прерываниями справятся LP и E ядра в перерывах от обработки задач. Их тут много.

Главная засада - что интел в рекламных заявлениях уверял что они специально вывели 2 ядра в по сути хабовую часть комбайна. То есть комп может функционировать вообще выключив процессор и оставив только хаб. Но эта идея по ходу такой же пис дил как и их хваленый thread director который на хардверном уровне будет раскидывать задачи. Ну не шмогла штарушка.

Qui-Gon ★★★★★
() автор топика
Ответ на: комментарий от Qui-Gon

CPU0 всё равно будет периодически просыпаться для аппаратных прерываний, например, по таймеру [1000 Гц?], то он не успеет уйти в глубокий сон. Пусть заодно и системными задачими занимается, раз не дают спать. А остальные пусть спят не прерываясь.

anonymous
()
Ответ на: комментарий от anonymous

Для корпоративно-телеметрических нужд?

Для маркетолого-мудических. Иных вариантов не вижу.

У интела наблюдается желание и рыбку съесть и на МПХ присесть - удовлетворив и геймеров и мобильных пользователей. Но как бывает в таких случаях делали как лучше а получилось как всегда. Геймеры готовы платить дополнительное бабло за проц с отключенным Е-ядрами - не с большим количеством P а просто обычный но с отключенными E, чтобы не мешали геймингу подхватывая задачи. А ноутбукеры вынуждены сливать часы автономности в ненасытную пасть нахрен не сдавшегося P-ядра CPU0. Маркетологи и эффективыне менеджеры походу везде одинаковы - как гном с его идиотической концепцией «компьютер это просто большой смартфон - зачем нам разные интерфейсы», так и интел - что ультрабук что геймерский десктоп- одно и тоже. По уму в десктопах вообще нах не сдались E-ядра, ну что там пара ватт разницы на Idle для включенного в розетку компа… С этой точки зрения кстати чиплетный дизайн может дать свои плюсы - будет проще создавать процы с разными наборами модулей для разных нужд. Ну как говорится будем посмотреть.

Qui-Gon ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Успеет.

На самом деле пробовал экспериментально благо intel_lpmd позволяет всем этим управлять - ну кроме вот этих нежданчиков на CPU0. По батарее получается выгоднее максимально увести все на E и LP.

Qui-Gon ★★★★★
() автор топика
Ответ на: комментарий от Qui-Gon

По батарее получается выгоднее максимально увести все на E и LP.

так и будет с intel_lpmd. Просто системную/ядерную нагрузку кинуть на первое ядро rcu_nocbs=2-17, которому не спится.

anonymous
()
Ответ на: комментарий от Qui-Gon

Китайский нонейм ноутбук на ryzen 5700U с нонейм экраном 2560x1440 240Гц(!), intel wifi. Никакой настройки. Проигрывание онлайн потока 2K. По показаниям нонейм сенсора батареи:

  • на минимуме яркости 8.41V * 1.16A ~= 10W
  • на максимуме яркости 8.46V * 2.56A ~= 21W
anonymous
()