...

пятница, 9 августа 2013 г.

локальная компиляция без лагов

Abstract: использование cgroups для ограничения прожорливости компилятора по процессору и диску.

Лирика




Дано:

программист 1шт,

ноутбук с ноутбучным диском на 5200 rpm — 1шт,

исходных файлов на хаскеле 300 шт

Файлы coffee-script (будущий JS) — 300 шт

время компиляции — 40 минут.

Задача: компилировать в бэкграунде не ставя всю систему в состояние «ад и погибель». Можно даже ценой увеличения времени сборки до 50-60 минут.


Решение?


Допустим, у нас в ноутбуке примерная (на глазок) производительность диска — около 80 IOPS в пике. Мы решаем отдать на компиляцию 40 IOPS и 300% от всех процессоров (из доступных 4 ядер).

Дальше всё просто:



sudo -s
mkdir -p ~/cg/io
mkdir -p ~/cg/cpu
mount -t cgroup -oblkio none ~/cg/io
mount -t cgroup -ocpu none ~/cg/io
mkdir ~/cg/cpu/g1 (создаём группу)
stat /dev/sda




(получаем вывод, из которого нас интересует только Device type: 8,0, выделенное жирным — искомое)

Запускаем рядом второй шелл, из которого будет компиляция. Смотрим его PID:



echo $$




(получаем число)

Пишем в первом шелле:



echo (PID шелла для компиляции) >~/cg/g1/cpu/tasks
echo (PID шелла для компиляции) >~/cg/io/tasks




(это мы сказали, какие pid'ы и их потомки будем резать, туда можно записать больше одного процесса, но для целей компиляции достаточно просто шелла)

Дальше выставляем лимиты:

IO:



echo "8:0 20" > ~/cg/io/blkio.throttle.read_iops_device
echo "8:0 20" > ~/cg/io/blkio.throttle.read_iops_device




Для устройства 8:0 (см выше как его узнать) выставили максимум в 20 записей в секунду и 20 чтений.

CPU:



echo 300000 > ~/cg/cpu/g1/cpu.cfs_quota_us


Мы выставили квоту 300 000 µs (для каждого тика в 100 000 µs), то есть 300% CPU.


После этого мы можем смело запускать компиляцию в нашем шелле (чей PID мы записали в tasks) — и он больше не будет съедать все доступные ресурсы, тормозить и бибикать.


Значения, кстати, можно менять на ходу.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html


Комментариев нет:

Отправить комментарий