Мне нужно оценить, сколько стоит перенести процесс linux на другое ядро того же компьютера.
ОК, стоимость можно оценить как:
время, необходимое для установки привязки нового ЦП и выполнения «yield» или «sleep(0)
» для принудительного переключения / перепланирования задачи (включая накладные расходы на переключение задач и т. Д.).
стоимость пропуска кэша для каждого будущего »была кэширована на старом ЦП, но не кэширована на новом ЦП, но все же« доступ к памяти
стоимость TLBпропустить каждое будущее "виртуальный к физическому переводу был кеширован на старом ЦП, но еще не кеширован на новом ЦП" доступ к памяти
штрафы NUMA
проблемы с балансировкой нагрузки (например, миграция с «слегка загруженного» ЦП или ядра на «сильно загруженный другими процессами» ЦП или ядро может привести к серьезным проблемам с производительностью, включая стоимость решения ядра перенести другие процессы на другие ЦП для исправлениябалансировка нагрузки, гдезатраты / накладные расходы, оплачиваемые другими процессами, вероятно, должны быть включены в общую стоимость, вызванную переносом вашего процесса.)
Обратите внимание, что:
a) существует несколько уровнейкеши (кэш трассы, кеш инструкций, кеш данных L1, кеш данных L2 и т. д.) и некоторые кеши совместно используются несколькими ЦП (например, L1 может быть разделен между логическими ЦП в одном и том же ядре, L2 может использоваться совместно двумя ядрами, L3может совместно использоваться 8 ядрами).
b) Затраты на пропуск TLB зависят от многих факторов (например, если ядро использует средства защиты от Meltdown без функции PCID и в любом случае удаляет информацию TLB при каждом системном вызове).
c) Штрафы NUMA - это затраты на задержку - каждый доступ к ОЗУ (например, потеря кеша), который был выделен на предыдущем ЦП (для предыдущего узла NUMA), будет иметь большую задержку, чем доступ к ОЗУ, выделенной на новом/ текущий процессор (правильный узел NUMA).
d) Все затраты на кэш, расходы на TLB и штрафы NUMA зависят от доступа к памятисс узоры. Тест, который не имеет доступа к памяти, будет вводить в заблуждение.
e) Затраты на кэш, затраты на TLB и штрафы NUMA сильно зависят от используемого оборудования - например, тест на один "медленный процессор с быстрой оперативной памятью икомпьютер без NUMA не будет иметь никакого отношения к другому компьютеру с «быстрыми процессорами с медленной оперативной памятью и многими доменами NUMA». Точно так же это сильно зависит от того, какие процессоры (например, миграция с CPU № 0 на CPU № 1 может стоить очень мало, а миграция с CPU № 0 на CPU № 15 может быть очень дорогой).
Для миграции процесса я использую системный вызов sched_setaffinity, но я заметил, что миграция не всегда происходит мгновенно, что является моим требованием.
Поставьте "sleep(0);
" после"sched_setaffinity();
".