Сборка Android 10 на слабом железе

Подскажите, кто сталкивался с такой проблемой.
Система: Archlinux
Окружение: KDE
Процессор: AMD Authlon II X4 631
Памяти: 8Gb
Использую: Swap на 20 гигов + ccache на 50Gb на отдельном HDD
Сборщик soong: 100% загрузка по всем ядрам.
ключ при сборке -j1 - не помогает
Зависает при сборке вся графика, ПК не отвечает.
Вопрос: Возможно ли как-то ограничить использование CPU для сборщика soong.
После компиляции soong, сборка идёт в нормальном режиме.
Panda911
Возможно ли как-то ограничить использование CPU
Начни с самого простого - cpulimit
Ошибки не исчезают с опытом - они просто умнеют
Panda911
Вопрос: Возможно ли как-то ограничить использование CPU для сборщика soong.
это не поможет, известная проблема линукс №12309 похоже будет жить вечно

на некотором железе, при работе диска\свопинге система сначала жутко фризит потом встаёт колом, io улетает в космос
не спасают никакие лимиты, ionice к примеру

решение только 2 или добавление достаточного количества озу или смена материнки на ту где такого жёсткого эффекта не заметно
если озу хватает, то сборку делать в tmpfs, по умолчанию это /tmp

в южный мост вроде всё упирается, обычно проявляется на недорогих мамках
Из сложных способов (на много ... много сложнее cpulimit)
- cgroup - использовал несколько раз, но только для ограничения памяти
- ananicy-cpp (аналог ananicy), есть в AUR - сам никогда не использовал, но как пишут: существено повышает отклик системы и вроде бы имеет в составе cgroup, то есть можно задавать ограничения.

Раньше не которым помогало отключение многопоточности (SMT) ... но сам никогда не пробоавал.
Ошибки не исчезают с опытом - они просто умнеют
В части cgroup - написано довольно заумно и способов использования несколько, можно ограничивать даже конкретный процесс …. например, в этом топике описал ограничение процесса (palemoon) по использованию memory.
Но вообще можно довольно просто, используя cgroup, ограничить user в части использоания им cpu.
Привожу сначала результаты тестирования без ограничения.
Смотрим что имем в системе по дефолту - привожу вывод systemd-cgtop
1. Без нагрузки
Control Group                                                    Tasks   %CPU   Memory
/                                                                            536       6.0         1.7G
user.slice                                                             418       5.5         2.3G
user.slice/user-1000.slice                                  418       5.7         2.3G
user.slice/user-1000.slice/session-1.scope     358      4.7          2.2G
2. С нагрузкой (для нагрузки cpu использовал stress)
Control Group                                                    Tasks   %CPU   Memory
/                                                                           548      400.7       1.7G
user.slice                                                            428      367.7       2.3G
user.slice/user-1000.slice                                 428     367.7        2.3G
user.slice/user-1000.slice/session-1.scope    368     367.3         2.2G
И как видим нагрузка составляет 400% (100% на ядро)

Пробуем ограничить, но не отдельный процесс, а все процессы user (так намного проще) до 30%
Создаем файл /etc/systemd/system/user.slice и пропысываем в нем всего две строчки
[Slice]
CPUQuota=30%
Запускаем команду: sudo systemctl daemon-reload
Нагружаем (stress) … и смотрим вывод
Control Group                                                    Tasks   %CPU   Memory
/                                                                           547        34.1       1.7G
user.slice                                                            427        31.7       2.3G
user.slice/user-1000.slice                                 427        31.6       2.3G
user.slice/user-1000.slice/session-1.scope    367        31.4       2.2G
Все получилось.
В конце не забываем выполнить
sudo rm /etc/systemd/system/user.slice
sudo systemctl daemon-reload

EDIT - забыл отметить, что температура cpu при нагрузке (stress) составляла
- без использования ограничения cpu - 70 - 72 град.
- с использованием ограничения cpu - 57 - 59 град.
Ошибки не исчезают с опытом - они просто умнеют
vasek
В части cgroup - написано довольно заумно и способов использования несколько, можно ограничивать даже конкретный процесс …. например, в этом топике описал ограничение процесса (palemoon) по использованию memory.
Но вообще можно довольно просто, используя cgroup, ограничить user в части использоания им cpu.
Привожу сначала результаты тестирования без ограничения.
Смотрим что имем в системе по дефолту - привожу вывод systemd-cgto
Спасибо, попробую отпишусь
Судя по описанию, железо не такое уж ахово слабое. Слабоват только процессор, но он, как и у меня, тоже 4-ядерный AMD, правда, частота с разгоном - 4200. И памяти у меня 8 Гб, и под кэш столько же (50 Гб) выделено. И вот на такой конфигурации я собирал TWRP для 10 Андроида. Да, soong отрабатывает долго и всё как будто тоже зависает, но потом "развисает", и компиляция доходит до конца. Собирается в среднем долго - минут 45-50.

Проц разогнан? И ещё, почему "-j1", когда надо давать "-j(количество_ядер+ 1)" - он же у вас не 0-ядерный, надо нагружать все ядра. Я всегда делаю -j5. Плюс, при сборке закрываю все открытые окна, и за компом не работаю - просто жду в сторонке.
Если проц слабый у виртуалки будут тормоза, есть вариант запустить через Anbox но его запустить это чудо, он редко обновляеться, еще есть Archon на основе хрома в нем можно запускать apk, еще был shashlik но в аур его уже нет, так через genimotion образы запускал на 2 ядерном проце были жесткие тормоза
 
Зарегистрироваться или войдите чтобы оставить сообщение.