Меня не устраивало, что мой мини-ПК на Windows 11 с AMD Ryzen 7 7735HS (8 ядер, 16 потоков) и 32 ГБ DDR5 (в одноканальном режиме) компилирует WebGL для яндекс игр в полтора раза дольше, чем MacBook Air M1 с 16 ГБ.
Эта статья о том, как получить двойную скоростью без апгрейда комплектующих! От создания флешки до первого билда с использованием tmpfs и символьных ссылок Symlinks (для одновременной работы над несколькими проектами).
Шаг 1. Подготовка и правильная запись ISO-образа
Для миграции был выбран дистрибутив CachyOS (форк Arch Linux), оптимизированный под современные процессоры (в репозиториях пакеты скомпилированы под инструкции x86-64-v3 с флагами -O3 и LTO).
Скачиваем актуальный образ с официального сайта. Если пишете из-под Windows, используйте Rufus строго в режиме DD-образ (а не ISO).
Шаг 2. Установка системы и выбор окружения
Вставляем флешку, включаем пк. ДЛЯ ФОРМАТИРОВАНИЯ SSD ВЫБИРАЙТЕ XFS!!! В процессе установки CachyOS предложит выбрать графическое окружение. Я выбрал XFCE. Оно легковесное, не нагружает GPU лишними эффектами. Во время кастомизации системы установщик спросит про оптимизированные библиотеки:
Заменить sdl2 на cachyos-extra-v3/sdl2-compact? [y/N]
Нажимаем y (Yes). Это заменит стандартные библиотеки на версии, собранные под архитектуру Zen 3+, что сделает работу самого редактора Unity плавнее. Также в приветственном окне CachyOS Hello обязательно включаем системный демон ananicy-cpp.
Шаг 3. Переключаемся на планировщик BORE
По умолчанию в системе может быть активно ядро EEVDF. Нам для тяжелой компиляции нужен планировщик BORE (Burst-Oriented Response Enhancer). Он идеально распределяет кванты времени процессора, когда все 16 потоков забиты IL2CPP-сборкой, сохраняя интерфейс XFCE отзывчивым.
-
Открываем встроенную утилиту CachyOS Kernel Manager.
-
Ищем строку cachyos-v3/linux-cachyos-bore.
-
Ставим напротив неё галочку, прокручиваем вниз и нажимаем Apply/Execute.
-
После установки перезагружаем ПК. В меню загрузчика выбираем ядро с припиской bore и нажимаем клавишу d (Default), чтобы оно всегда запускалось по умолчанию. Проверить, что всё получилось, можно в терминале:
uname -r# Должно вывести что-то вроде: 7.0.12-1-cachyos-bore
Шаг 4. Настройка приоритетов в Ananicy-cpp
Утилита ananicy-cpp работает в фоне и управляет приоритетами. Заставим её отдавать всё самое лучшее процессам Unity. Из-за особенностей структуры ananicy-cpp кастомный файл конфигурации нужно создать прямо в корне её директории:
sudo nano /etc/ananicy.d/custom_unity.rules
Вставляем туда две строчки кода (в терминале вставка через Ctrl + Shift + V):
{ "name": "unityhub", "type": "game" }{ "name": "Unity", "type": "game" }
(Тип game заставляет планировщик выделять процессам Unity максимальный приоритет процессора и ввода-вывода). Сохраняем файл (Ctrl + O, затем Enter, затем Ctrl + X для выхода из nano) и перезапускаем службу:
sudo systemctl restart ananicy-cpp
Шаг 5. Радикальное устранение Disk IO: Перенос Library в ОЗУ
Папка Library в проектах Unity состоит из сотен тысяч мелких файлов кэша, метаданных и объектного кода. При сборке WebGL даже быстрый NVMe SSD начинает сильно греться, ловить троттлинг и урезать скорость на операциях случайной записи (Random Write 4K). Мы полностью уберем SSD из этой цепочки, создав виртуальный RAM-диск на 18 ГБ в оперативной памяти (благо у нас её 32 ГБ).
-
Открываем конфигурацию монтирования дисков:
sudo nano /etc/fstab
-
Листаем в самый низ и дописываем строку:
tmpfs /mnt/unity_ramdisk tmpfs rw,nodev,nosuid,size=18G,mode=1777 0 0
-
Критически важный нюанс Linux: После последней цифры 0 обязательно нажмите Enter, чтобы перевести курсор на новую пустую строку! Иначе системный парсер fstab может проигнорировать эту запись.
-
Сохраняем и выходим (Ctrl+O, Enter, Ctrl+X). Теперь создаем физическую папку на диске и активируем монтирование:
sudo mkdir -p /mnt/unity_ramdisksudo mount -asudo systemctl daemon-reload
Проверяем командой df -h | grep unity. Должен появиться раздел на 18 ГБ, работающий со скоростью вашей DDR5.
Шаг 6. Скачиваем Unity через терминал
В CachyOS (как и в Arch) самый быстрый и чистый способ поставить среду разработки — использовать AUR (Arch User Repository). Открываем терминал и запускаем установку Unity Hub:
paru -S unityhub
В процессе paru выведет на экран содержимое технического файла PKGBUILD через утилиту просмотра less. Не пугаемся!!! — просто нажимаем клавишу q на клавиатуре (выход из просмотра), а затем на вопрос Proceed with installation? [Y/n] вводим y и жмем Enter. После завершения открываем Unity Hub из меню приложений, логинимся, скачиваем нужную версию Unity Editor и обязательно ставим галочку напротив модуля WebGL Build Support.
Шаг 7. Автоматизация и обман движка через Bash-скрипт
Unity не умеет переносить Library в другую папку через настройки. Мы свяжем её с RAM-диском с помощью символьных ссылок (symlinks).
-
Создаем в Unity Hub новый пустой проект (или открываем существующий), например, по пути ~/Develop/MyUnityProject. Закрываем Unity.
-
Переходим в папку проекта через терминал:
cd ~/Develop/MyUnityProject
-
Создаем скрипт запуска:
nano run_project.sh
-
Вставляем в него следующий код:
#!/bin/bashPROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"PROJECT_NAME=$(basename "$PROJECT_DIR")RAM_DIR="/mnt/unity_ramdisk/$PROJECT_NAME"echo "=== Запуск проекта $PROJECT_NAME с RAM-диском ==="mkdir -p "$RAM_DIR"if [ -d "$PROJECT_DIR/Library" ] && [ ! -L "$PROJECT_DIR/Library" ]; then echo "Копируем существующую Library в оперативную память..." cp -r "$PROJECT_DIR/Library/"* "$RAM_DIR/" 2>/dev/null rm -rf "$PROJECT_DIR/Library"fiif [ ! -L "$PROJECT_DIR/Library" ]; then rm -rf "$PROJECT_DIR/Library" ln -s "$RAM_DIR" "$PROJECT_DIR/Library" echo "Символьная ссылка на RAM-диск успешно создана."fiecho "Запускаем Unity Hub..."unityhub &
(Этот скрипт универсален: его можно закинуть в корень любого проекта, он сам определит пути). 5. Сохраняем, выходим (Ctrl+O, Enter, Ctrl+X) и делаем его исполняемым:
chmod +x run_project.sh
Теперь проект нужно запускать строго через этот скрипт командой ./run_project.sh. Он автоматически подменит папку Library ссылкой на ультрабыструю оперативную память, откроет Unity Hub, а вы просто выберете этот проект из списка.
Шаг 8. Тюнинг настроек внутри Unity Editor
Открываем проект через наш скрипт. Идем в Edit ➔ Project Settings ➔ Player ➔ вкладка WebGL (иконка HTML5):
-
Other Settings ➔ Optimize for: Меняем значение на Optimize for Build Time. Это отключит долгие микро-оптимизации компилятора clang, которые во время разработки нам не нужны.
-
Publishing Settings ➔ Compression Format: Ставим Disabled. Сжатие билда в Brotli или Gzip сильно нагружает процессор в самом конце сборки. Отключаем его на время тестов (включать стоит только перед финальной загрузкой игры на площадки вроде Yandex Games).
Итог: Результаты замеров
Мы получили двукратное ускорение абсолютно бесплатно, перейдя с ntfs на xfs и настроив tmpfs!
На Windows 11 компиляция WebGL-версии проекта занимала долгие 2 часа. Система упиралась в однопоточную линковку, дисковую активность и планировщик задач. После переезда на оптимизированную CachyOS, переноса кэша сборки в RAM-диск и настройки планировщика BORE, время компиляции на том же самом железе и с той же одноканальной памятью сократилось до 1 часа.
Я намеренно не апгрейдил память до двухканального режима для этого эксперимента, хотя с ним компиляция станет еще быстрее (прирост составит дополнительные 30-50%).
ссылка на оригинал статьи https://habr.com/ru/articles/1049556/