LINUX.ORG.RU

make и ядра


0

0

Здравтсвуйте. Сегодня я собирал небольшой проектик на куте. Ну и заодно решил провести тестирование скорости сборки.

Итак. Процессор Intel Core 2 Duo T6600 2.20GHz.
Изменяли мы следующее.

1) Ставили/Убирали /tmp как tmpfs
2) Ставили/Убирали -pipe
3) Меняли -jN
4) Говорили qt чтобы все промежуточные файлы она сохраняла в /tmp

В итоге ничего не изменялось О_о. И при всех комбинациях ситуация была следующая.

make : 1m 05s
make -j2 : 45s
make -j3 : 45s
make -j4 : 45s
make -j8 : 45s

Т.е. для двухядерного проца установка -j2 делает процесс компиляции на 25% быстее. Дальнейшее увеличение числа запущенных процессов на двухядернеке к ускорению компиляции не приводит. Изменение параметров (-pipe, /tmp -> tmpfs, вынос всех промежуточных файлов на /tmp) тоже не привел к увеличению производительности и вообще на скорость никак не влияет.

Заодно я включал iostat и смотрел сколько у меня пишется на диск и смотрел производительность. Так вот -noatime, tmpfs никак не влияют на производительность вообще никаких команд. Все работает по прежнему.
Только вот идет еще запись на диск.

Программка на куте. У нее есть
precompiled header - 37МB
qrc_*.cpp - 4.6МB
*.оbj, moc_*.cpp, ui_*.h - (забыл)MB
Собраный бинарник - (тоже забыл)MB

Так вот это все каждый раз после ребилда писало на диск 53Метра. Что много и изнашивает жесткий диск (важно если SSD). Чтобы этого не было надо сказать куте чтобы она все записывала в /tmp, а /tmp сделать как tmpfs. После этого запись на жесткий диск прекратилась, но скорость компиляции все равно не увеличилась.

Если включить atime и посмотреть сколько записывается на диск, то можно увидить следующее.

find / -name «*d*» - 40MB
ctags - 50MB

Вообщем запивыется данных много, которые никому не нужны. А потом я провел последний опыт - скопировал папку с проектом на /tmp. И компилил там. И получил следующее.

make : 48s
make -j2 : 36s
make -j3 : 36s
make -j4 : 36s
make -j8 : 36s

Т.е. мне удалось сделать процесс компиляции быстрее только вынеся проект на /tmp. Почему так происходит? А вы проводили какие-нибудь тесты? Вообщем, давайте подумаем что происходит. Почему такие странные результаты?

1) при pipe, временные файлы вообще не создаются - это равносильно по скорости с tmpfs в ОЗУ.

2) -jN зависит от ЦПУ шедуллера, -j2 это в два патока, значит они нагрузили процессор до такой степени, что следующие потоки уже были бесполезны.

3)

Т.е. мне удалось сделать процесс компиляции быстрее только вынеся проект на /tmp

ну это просто экономия на скорости записи на ЖД.

system-root ★★★★★ ()

> Т.е. мне удалось сделать процесс компиляции быстрее только вынеся проект на /tmp. Почему так происходит?

Tmpfs же в оперативной памяти.

Igron ★★★★★ ()

а кэш сбрасывал для чистоты эксперимента?
с -j*кол-во_ядер+1
или
с -j*кол-во_ядер*2+1 быстрее получается чем
с -j*кол-во_ядер
проверял мильён раз
про тмпфс уже сказали - у меня:
винт - ~60+МБ/с
tmpfs - 1.3ГБ/с

megabaks ★★★★ ()
Ответ на: комментарий от Igron

> Tmpfs же в оперативной памяти.

ну или если не хватает то в свопе

ipwww ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.