Архив метки: оптимизация

Разбираемся с Gentoo и MAKEOPTS=”-j${core} +1″

Восстанавливаю похеренный пост. Значится так, задался я вопросом оптимизации. Начал читать всякое, что еще можно в Gentoo подкрутить, чтобы система работала быстрее. И нашел один пост, автор (участник Gentoo Linux ARM Development, наверное что-то да соображает) пишет, что сборка по формуле j={core} + 1 чуть медленнее, чем просто j={core}.

Посмотрев на его результаты, решил проверить все на своем калькуляторе с 6-ти ядерным AMD Phenom II X6 1055T. Я выделил только результаты со значением j от 5 до 7, ибо понятно, что при значениях меньше 5 и больше 7 будет сильная регрессия. И потом, просто для интереса, добавил опции --load-average=6 и --jobs=6, а также переключил процессор в режим perfomance командой "cpupower frequency-set -g performance".

Сборка происходит в оперативной памяти, emerge собирает с опциями "-q1OB".

Опция -q уменьшает объем сообщений emerge, опция -B создает бинарый пакет, но не устанавливает его, -O устанавливает пакет без его зависимостей, -1 не заносит пакет в world файл.

Итак, приступим. Первый кандидат на тест - Firefox 40.0.2

Стандартные значения, процессор переключен в режим ondemand

job 5 = 19m27.126s
job 6 = 17m0.438s
job 7 = 17m17.294s

Процессор переключен в режим perfomance

job 5 = 18m44.965s
job 6 = 16m25.896s
job 7 = 16m39.971s

Добавлена опция --jobs=6

job 5 = 18m46.808s
job 6 = 16m26.300s
job 7 = 16m42.490s

Добавлена опция --load-average=6

job 5 = 21m6.846s
job 6 = 18m24.210s
job 7 = 19m10.559s

Потом последовал пакет Kdelibs 4.14.8, опции те же самые.

Процессор переключен в режим ondemand

job 5 = 9m18.974s
job 6 = 8m8.003s
job 7 = 8m20.969s

Процессор переключен в режим perfomance

job 5 = 8m51.200s
job 6 = 7m50.196s
job 7 = 7m58.345s

Добавлена опция --jobs=6

job 5 = 8m53.102s
job 6 = 7m50.039s
job 7 = 7m58.541s

Добавлена опция --load-average=6

job 5 = 9m3.678s
job 6 = 8m37.215s
job 7 = 8m52.021s

И на последок - сборка @system.

Вот что собиралось

>>> Emerging (1 of 44) sys-apps/man-pages-4.00::gentoo
>>> Emerging (2 of 44) sys-apps/util-linux-2.25.2-r2::gentoo
>>> Emerging (3 of 44) sys-apps/grep-2.21-r1::gentoo
>>> Emerging (4 of 44) sys-apps/kbd-1.15.5-r1::gentoo
>>> Emerging (5 of 44) sys-apps/busybox-1.23.1-r1::gentoo
>>> Emerging (6 of 44) virtual/service-manager-0::gentoo
>>> Emerging (7 of 44) sys-devel/binutils-2.24-r3::gentoo
>>> Emerging (8 of 44) virtual/man-0-r1::gentoo
>>> Emerging (9 of 44) sys-apps/net-tools-1.60_p20130513023548::gentoo
>>> Emerging (10 of 44) virtual/shadow-0::gentoo
>>> Emerging (11 of 44) virtual/modutils-0-r1::calculate
>>> Emerging (12 of 44) sys-apps/gawk-4.0.2::gentoo
>>> Emerging (13 of 44) app-arch/xz-utils-5.0.8::gentoo
>>> Emerging (14 of 44) sys-apps/sed-4.2.1-r1::gentoo
>>> Emerging (15 of 44) sys-process/psmisc-22.21-r2::gentoo
>>> Emerging (16 of 44) sys-fs/e2fsprogs-1.42.13::gentoo
>>> Emerging (17 of 44) sys-apps/file-5.22::gentoo
>>> Emerging (18 of 44) app-arch/bzip2-1.0.6-r6::gentoo
>>> Emerging (19 of 44) app-arch/tar-1.27.1-r2::gentoo
>>> Emerging (20 of 44) virtual/package-manager-0::gentoo
>>> Emerging (21 of 44) net-misc/rsync-3.1.1::gentoo
>>> Emerging (22 of 44) sys-apps/openrc-0.17::gentoo
>>> Emerging (23 of 44) virtual/editor-0::gentoo
>>> Emerging (24 of 44) sys-apps/coreutils-8.23::gentoo
>>> Emerging (25 of 44) sys-devel/make-4.1-r1::gentoo
>>> Emerging (26 of 44) sys-process/procps-3.3.9-r2::gentoo
>>> Emerging (27 of 44) sys-apps/iproute2-3.19.0::gentoo
>>> Emerging (28 of 44) virtual/ssh-0::gentoo
>>> Emerging (29 of 44) virtual/dev-manager-0::gentoo
>>> Emerging (30 of 44) sys-apps/findutils-4.4.2-r1::gentoo
>>> Emerging (31 of 44) virtual/os-headers-0::gentoo
>>> Emerging (32 of 44) app-arch/gzip-1.6::gentoo
>>> Emerging (33 of 44) net-misc/wget-1.16::gentoo
>>> Emerging (34 of 44) sys-apps/which-2.20-r1::gentoo
>>> Emerging (35 of 44) net-misc/iputils-20121221-r1::gentoo
>>> Emerging (36 of 44) virtual/pager-0::gentoo
>>> Emerging (37 of 44) sys-apps/diffutils-3.3::gentoo
>>> Emerging (38 of 44) sys-apps/baselayout-2.2::gentoo
>>> Emerging (39 of 44) sys-apps/less-478::gentoo
>>> Emerging (40 of 44) app-shells/bash-4.3_p39::gentoo
>>> Emerging (41 of 44) sys-devel/patch-2.7.5::gentoo
>>> Emerging (42 of 44) virtual/libc-0::gentoo
>>> Emerging (43 of 44) sys-devel/gnuconfig-20150308::gentoo
>>> Emerging (44 of 44) sys-devel/gcc-4.8.4::gentoo

Процессор переключен в режим ondemand

-j5 = 48m32.519s
-j6 = 46m2.547s
-j7 = 46m39.452s

Процессор переключен в режим perfomance

-j5 = 28m55.455s
-j6 = 28m27.521s
-j7 = 29m15.811s

Добавлена опция --jobs=6

-j5 = 29m13.803s
-j6 = 27m6.803s
-j7 = 27m18.675s

Добавлена опция --load-average=6

-j5 = 37m52.365s
-j6 = 35m25.080s
-j7 = 35m47.117s

Как видно, при значении опции j={core} компиляция проходит чуть быстрее. И еще в скрипте сборки в оперативной памяти (которым всегда пользуюсь, ссылка в начале поста) я добавил переключение процессора в режим perfomance в начале сборки и возврат в режим ondemand после её окончания ибо это дает дополнительный прирост скорости.

 

Новый зомбоящик K47DS712

Приобрел себе телевизер марки DNS - K47DS712. Хотел изначально взять телек фирмы Гнусмас UE40F6400, но пока я чесался, его раскупили. В комплекте - 3Дэ очки, очки SyncView - для вывода сигнала с 2-х разных источников, через эти очки кажет каждому свое, чтобы не было битв за телевизор. Звук идет пока по старинке - с одного источника через колонки телевизора, а с другого через наушники.

Что имею сказать по поводу покупки. Кабельное я не подключал (хотя кабель от него проложен в комнате) и подключать не буду, так что сказать о качесте показа цифровых и аналоговых каналов ничего не могу. Агрегат брался для играния в PS4 и просмотра фильмы в офигитительном качестве. Поэтому требования были такие - наличие Wi-Fi, SmartTV (установлен Android 4.2.1).

Прежде чем купить телевизор, почитал отзывы - там рекомендуют сразу обновить прошивку, подрихтованную народными умельцами. Лично у меня без данного обновления телек не хотел подцепляться через Wi-Fi к роутеру. Дальше на сервер был поставлен Plex, в gentoo он обзывается plex-media-server, доступен через Layman в нескольких оверлеях, рекомендую ставить с "megacoffee", там свежая версия. Изначально поставил из "stuff", который создал Megabaks (я уже писал о его статьях про оптимизацию Gentoo), но там не совсем новая версия и с сайта нужный .deb пакет уже удален.

Главная пляска началась при попытке воспроизведения видеофайлов с сервера через Plex. Сначала не мог найти нормальную программу для работу с Plex, сам клиент для Android платный. Стал заходить через браузер на IP Plex'a и смотреть через браузер. Фильмы в 720р казало нормально, а вот в 1080р уже начинались подзаикивания и притормаживания, плюс не работала кнопочка для включения 3Дэ, было написано, что данная программа не поддерживает эту функцию. Сначала грешил на Plex, что это он плохо транскодирует, не хватает мощности процессора, запустил top на сервере -  процессор практически не загружен. Решил попробовать через Samb'y - поставил, скачал клиент на телевизор - требует пароль и логин, хотя в настройках стоял доступ для всех. Вычитал в интернете, что в качестве DLNA клиента рекомендуют BubbleUPnP, а в качестве плеера MxPlayer.  Поставил, включил Аватара в 3Дэ - заработали кнопки 3Дэ и DTS на пульте, все кажет без запинок. Пробовал скормить другого Аватара  у которого 120 кадр/сек, вот тут уже пошли запинки, из-за большого колличества кадров в секунду, как я понял. Комп тоже нормально не воспроизводит - звуковая дорожка "убегает" вперед (или видео отстает). Возможно, если покопаться с настройками Mplayer'a, то все будет воспроизводиться нормально, но нет желания.

В общем вывод такой - своих денег телевизор стоит.

GCC 4.5.1 и оптимизация

Решил попробовать в деле GCC 4.5.1, с оверлея toolchain, как говорят - производительность повышается, да и программы работают нормально. Сейчас он скомпилится, ну а далее - emerge -e world на всю ночь, а то и следующий день.
UPD:
GCC нормально собрался, осталось переключить профиль на использование нового компилятора, добавить флаги оптимизации, включить Graphite через USE-флаг "graphite" и дать GCC пересобрать самого себя. Соберется  - можно оставлять на ночь emerge -e world 🙂

Теперь такое в CFLAGS="-O2 -march=prescott -pipe -fomit-frame-pointer -floop-parallelize-all -floop-interchange -floop-block -floop-strip-mine  -mfpmath=387,sse -msse2 --param l2-cache-size=2048". И да, в флаге "-mfpmath=387,sse" именно 387, это не опечатка.
Можно использовать вместо этого флага другой - "-ftree-vectorize", но с ним в сегфолт будет выпадать лиса из-за zlib, так же будут проблемы с glib. По ссылке ниже все достаточно подробно описано.

Описание опций и прочие оптимизации sites.google.com/site/linuxoptimization/home/GCC, а также ссылки на ЛОР и Опеннет - 1, 2, 3, 4, 5.
UPD2:
Ага, разбежался выставлять флаги в make.conf. Нужно было сначала GCC собрать с поддержкой Graphite, а потом уже выставлять флаги, иначе сборка будет валится с жалобами на то, что компилятор не может создать выполняемый файл. Все исправил, пересобрал GCC с графитом, добавил флаги, сейчас опять пересборка GCC и можно будет пересобирать всю систему.
Выкинул эти флаги, с остальными нормально собиралось все " -floop-parallelize-all -floop-interchange -floop-block -floop-strip-mine  -mfpmath=387,sse --param l2-cache-size=2048".

Оптимизация Linux

Нашел сайт по оптимизации Linux, сам автор расписывает все под Gentoo – всякие параметры в файле make.conf, планировщики процессов и ввода-вывода, много интересного.

В общем, рекомендую – http://sites.google.com/site/linuxoptimization/