FreeBSD Scheduling on Hybrid CPUs
Цель
Адаптировать планировщик ULE для гибридных CPU (P- и E-ядер Intel, big.LITTLE ARM), позволяя выбирать приоритет: максимальная производительность, энергоэффективность или баланс.
Проблема
Традиционные cpuset(1) лишь ограничивают, какие ядра разрешены, но не говорят, какие из них предпочтительны. Прямое связывание политик с масками cpuset приводит к жёсткой фиксации и конфликтам при наследовании.
Решение
- Ввести политики как отдельный параметр, привязанный к cpuset.
- Дочерние cpuset могут лишь ужесточать политику, а не расширять.
- Поддержать шкалу «энергоэффективности» 0–100:
0 = все P-ядра, 100 = только E-ядра, промежуточные значения задают пропорцию. - Позволить админу задавать разные политики для разных разделов системы (джейлы, cgroup, NUMA-домены).
Комментарии (24)
- Архитектура P- и E-ядер красива на словах, но на практике планировщик быстро теряет контроль: короткие задачи могут быть латентно-чувствительными, а длинные — срочными.
- Пользователи сравнивают ситуацию с провалом AMD Bulldozer: «много ядер, посредственная производительность» и ощущение непредсказуемости.
- Некоторые ушли на Linux, где можно вручную управлять распределением на гетерогенных CPU.
- Предлагают использовать nice-уровни и источник питания (AC/батарея) как простые эвристики для выбора ядра.
- Многие требуют ручного контроля: «дайте мне кнопку “сейчас всё важно” или “выжми максимум времени автономии”».
- Утверждение, что «все новые Intel уже гибридные», оказалось преувеличением: i3, Pentium, Celeron и часть Xeon всё ещё без E-ядер.