Как приручить дракона: заставляем локальные LLM и VirtualBox работать строго на P-cores в Windows 11

В мире высокопроизводительных вычислений на персональных компьютерах всё чаще встаёт вопрос эффективного распределения ресурсов. Особенно остро это проявляется при работе с локальными большими языковыми моделями (LLM) и виртуальными машинами, где каждое ядро процессора на счету. Современные гибридные архитектуры процессоров Intel (12-е поколение и новее) делят ядра на производительные (P-cores) и энергоэффективные (E-cores). По умолчанию Windows 11 пытается балансировать нагрузку между ними, что часто приводит к тому, что тяжёлые вычислительные задачи попадают на медленные E-cores, резко снижая производительность. В этой статье разберём, как заставить локальные LLM и VirtualBox работать исключительно на P-cores, основываясь на недавнем материале с Habr Источник.

Проблема: почему Windows 11 не хочет отдавать P-cores?

Гибридная архитектура, впервые реализованная в процессорах Intel Alder Lake, предполагает, что операционная система сама решает, какие потоки отправлять на производительные ядра, а какие — на энергоэффективные. Windows 11 использует для этого специальный планировщик, который анализирует тип нагрузки. Однако на практике этот механизм работает неидеально. При запуске локальной LLM, например, через llama.cpp или Ollama, или при старте виртуальной машины в VirtualBox, нагрузка часто распределяется хаотично. В результате часть потоков попадает на E-cores, что приводит к просадкам производительности на 20–40% в зависимости от модели и количества потоков.

Авторы статьи на Habr провели серию тестов с разными конфигурациями и обнаружили, что при стандартных настройках Windows 11 до 30% вычислительных потоков LLM могут быть назначены на E-cores, что увеличивает время инференса на 15–25%. Для VirtualBox ситуация ещё более критична: гостевые системы, особенно те, что работают с тяжёлыми приложениями, начинают «тормозить» из-за нехватки ресурсов на быстрых ядрах.

Решение: принудительное назначение P-cores через маски affinity

Основной инструмент для решения этой задачи — маска привязки процессов к конкретным ядрам (CPU affinity). В Windows 11 это можно сделать несколькими способами. Самый простой — через диспетчер задач: кликнуть правой кнопкой по процессу, выбрать «Подробности», затем «Задать сходство» и вручную отметить только нужные ядра. Но этот метод неудобен для автоматизации и не гарантирует, что после перезапуска процесса настройки сохранятся.

Более продвинутый вариант — использование утилиты start с параметром /affinity из командной строки. Например, чтобы запустить процесс только на первых четырёх P-cores (логические процессоры 0,1,2,3), нужно выполнить:

start /affinity 0xF notepad.exe

Где 0xF — маска в шестнадцатеричном формате (для четырёх ядер это 1111 в двоичной). Для VirtualBox можно создать ярлык с такой командой, указав путь к VBoxHeadless.exe.

Однако авторы статьи рекомендуют более гибкий подход — использование скрипта PowerShell, который автоматически назначает маску affinity для заданного процесса при его запуске. В материале приводится пример скрипта, который отслеживает появление процесса llama.exe и принудительно назначает ему только P-cores. Это особенно актуально для LLM, которые часто запускаются и завершаются.

Практическая реализация: пошаговый гайд для LLM и VirtualBox

Для локальных LLM (Ollama, llama.cpp, LM Studio)

  1. Определите, какие ядра являются P-cores. Используйте утилиту Coreinfo от Microsoft или встроенный диспетчер задач (вкладка «Производительность»). У процессоров Intel P-cores обычно имеют логические номера 0-7 (для 4 P-cores с Hyper-Threading), а E-cores — 8-15.
  2. Запустите LLM с принудительной привязкой. Если вы используете Ollama, можно задать переменную окружения OLLAMA_NUM_THREADS и дополнительно настроить affinity через скрипт. Например, в PowerShell:
$process = Start-Process -FilePath "ollama.exe" -ArgumentList "run llama3.2" -PassThru
$process.ProcessorAffinity = 0xFF  # маска для первых 8 логических ядер
  1. Проверьте результат. Запустите инференс и в диспетчере задач убедитесь, что все потоки процесса находятся только на P-cores. Авторы статьи отмечают, что прирост производительности может достигать 30% для моделей размером 7B параметров.

Для VirtualBox

VirtualBox использует несколько процессов: VBoxSVC.exe, VirtualBoxVM.exe и VBoxHeadless.exe. Для виртуальной машины критичен именно VirtualBoxVM.exe. Привязка выполняется аналогично:

$vm = Start-Process -FilePath "C:\Program Files\Oracle\VirtualBox\VirtualBoxVM.exe" -ArgumentList "--startvm" '"Имя_ВМ"' -PassThru
$vm.ProcessorAffinity = 0xFF

Важно: не привязывайте все процессы VirtualBox к одним и тем же ядрам, иначе служебные процессы будут конкурировать с гостевой системой. Рекомендуется оставить 1-2 P-cores для системы и служебных задач, а остальные отдать виртуальной машине.

Сравнение производительности: до и после

Сценарий Без привязки (смешанные ядра) С привязкой к P-cores Прирост производительности
Инференс LLM (7B, 4 потока) 45 токенов/с 58 токенов/с +29%
VirtualBox (4 ядра, гостевой Windows) 3200 баллов CPU-Z 4100 баллов CPU-Z +28%
Компиляция кода в гостевой Linux 120 секунд 85 секунд +41%

Данные основаны на тестах авторов статьи с процессором Intel Core i7-12700H (6 P-cores + 8 E-cores). Разница особенно заметна в задачах с высокой многопоточностью, где E-cores становятся узким местом.

Нюансы и ограничения метода

Несмотря на эффективность, у метода есть несколько важных ограничений. Во-первых, привязка affinity сбрасывается при перезапуске процесса — требуется автоматизация. Во-вторых, если вы выделите слишком много P-cores виртуальной машине, то системные процессы начнут тормозить, что может привести к лагам интерфейса. Рекомендуется оставлять как минимум 2-3 P-cores для Windows 11 и фоновых задач.

Также стоит учитывать, что на процессорах AMD с архитектурой Zen 4 (Ryzen 7000) и более новых такой проблемы нет, так как у них все ядра однотипные. Метод актуален только для гибридных процессоров Intel и, возможно, для будущих гибридных архитектур AMD (например, Ryzen 8000).

Альтернативные подходы: процессорные парковки и планировщик

Помимо ручного назначения affinity, существуют и другие способы. Например, через редактирование реестра можно отключить парковку E-cores для определённых процессов. Авторы статьи упоминают утилиту PowerSettingsExplorer, которая позволяет настроить политику «предпочтение P-cores» для конкретных приложений. Однако этот метод менее гибкий и требует перезагрузки системы.

Ещё один вариант — использование сторонних утилит, таких как Process Lasso, которые автоматически управляют affinity и приоритетами процессов. Но они платные и не всегда корректно работают с новыми версиями Windows.

Заключение

Принудительная привязка P-cores — это мощный инструмент для повышения производительности локальных LLM и виртуальных машин на гибридных процессорах Intel. Метод прост в реализации, не требует дополнительных затрат и даёт ощутимый прирост в 20–40% в зависимости от задачи. Однако он требует внимательности: неправильная настройка может ухудшить отзывчивость системы. Рекомендуется начать с малого — выделить P-cores только для одного тяжёлого процесса и постепенно настраивать остальные.

Авторы статьи на Habr подчёркивают, что это не панацея, но эффективное решение текущей проблемы с планировщиком Windows 11. Для тех, кто регулярно работает с LLM локально или запускает ресурсоёмкие виртуальные машины, этот метод может стать стандартным шагом в настройке рабочей станции.

← Все статьи

Комментарии

Читайте также

Япония нашла способ извлекать до 90% лития из отработанных батарей электромобилей: что это значит для рынка и как использовать эту технологию

14 июля 2026

15 промтов для ChatGPT и GPT-4: программирование, отладка, рефакторинг — гайд для разработчиков

14 июля 2026

Как зарабатывать на фрилансе в 2026 году: обзор курса «Фриланс — работа на себя» на asibiont.com

14 июля 2026

От 3D к 1D: почему уровень с двумя кнопками оказался сложнее трёхмерной арены

14 июля 2026

Growth Marketing & CRO: как системный подход к росту и AI-обучение меняют правила игры

14 июля 2026

Vera возвращается: как голосовой ассистент превратился в локального AI-агента для Windows

14 июля 2026

Как освоить Observability с Prometheus и Grafana: честный разбор курса на Asibiont в 2026 году

14 июля 2026

PixVerse привлек $439 млн: как видеогенерация на базе AI стала «vibe coding» и что это значит для стартапов

14 июля 2026

Google Coral (Edge TPU) + ASI Biont: on-device ML и AI-автоматизация на грани сети

14 июля 2026