Яндекс.Практикум

Ручная компиляция Firefox 48.0 в GNU/Linux + мультипроцессорный режим

Вот практически и подошла к финалу моя сборочка LFS’ки, осталось только офисный пакет прикрутить. Но я как посмотрел сколько libreoffice компилируется и ужаснулся. Возможно на днях займусь этим. Однако последний шаг, необходимый для миграции пройден – Firefox больше не падает. До этого в dmesg сыпались такие ошибки:
nouveau 0000:00:0d.0: bus: MMIO write of 00540001 FAULT at 00b000

А за ними сыпалась лиса.

Получение исходных текстов Firefox для GNU/Linux

Скачать Firefox можно из официального репозитория. Там есть как бинарники, так и исходные тексты, в моём случае это выглядело так:
$ wget https://ftp.mozilla.org/pub/firefox/releases/48.0/source/firefox-48.0.source.tar.xz

Затем их необходимо распаковать:
$ tar -xvf firefox-48.0.source.tar.xz

Компиляция Firefox в Linux

Переходим в папку с исходными текстами:
$ cd firefox-48.0

Процесс сборки достаточно прост, но я бы настоятельно рекомендовал получше изучить вывод команды:
./configure --help

После детального просмотра всех доступных опций создаём файл mozconfig в корневой папке с исходниками. У меня получился он примерно такого содержания:
# У меня не установлен dbus ac_add_options --disable-dbus # И dbus-glib ac_add_options --disable-necko-wifi # GStreamer тоже я не ставил, НЕ НУЖЕН ;-) #ac_add_options --enable-gstreamer=1.0 # И alsa мне хватает за глаза ac_add_options --disable-pulseaudio # GConf мне тоже не нужен ac_add_options --disable-gconf # В качестве тулкита используется gtk2 ac_add_options --enable-default-toolkit=cairo-gtk2-x11 # По умолчанию из готовых бинарников убираются специальные символы # необходимые для дебага. Первую сборку я бы рекомендовал сделать с ними # отключив эту функцию. При нормальной работе можно будет закомментировать # эту строку ac_add_options --disable-strip ac_add_options --disable-install-strip # Указывается префикс и приложение для компиляции ac_add_options --prefix=/usr ac_add_options --enable-application=browser # Отключение всевозможных НЕ НУЖНО ac_add_options --disable-crashreporter ac_add_options --disable-updater ac_add_options --disable-update-channel ac_add_options --disable-update-packaging ac_add_options --disable-tests ac_add_options --disable-gnomeui ac_add_options --disable-mobile-optimize ac_add_options --disable-webapp-runtime ac_add_options --disable-webrtc ac_add_options --disable-websms-backend ac_add_options --disable-webspeech ac_add_options --disable-webspeechtestbackend ac_add_options --disable-calendar ac_add_options --disable-gamepad ac_add_options --disable-b2g-bt ac_add_options --disable-b2g-camera ac_add_options --disable-b2g-ril # Отключение добавления компилятором специальных символов, необходимых дебаггеру. # Если всё работает хорошо - можно будет расскомментировать # эти строчки. #ac_add_options --disable-debug #ac_add_options --disable-debug-js-modules #ac_add_options --disable-debug-symbols # Включаем разной степени НУЖНО ac_add_options --enable-optimize ac_add_options --enable-gio ac_add_options --enable-official-branding ac_add_options --enable-safe-browsing ac_add_options --enable-url-classifier # Указываем библиотеки и программы, которые установлены в системе. # Это уменьшает время, необходимое для компиляции и конечный объём бинарников. ac_add_options --enable-system-ffi ac_add_options --enable-system-pixman ac_add_options --enable-system-hunspell ac_add_options --enable-system-sqlite ac_add_options --enable-readline ac_add_options --with-pthreads ac_add_options --with-system-bz2 ac_add_options --with-system-jpeg ac_add_options --with-system-zlib ac_add_options --with-system-libevent ac_add_options --with-system-libvpx ac_add_options --with-system-nspr ac_add_options --with-system-nss ac_add_options --with-system-icu # Cairo необходимо указывать с осторожностью. Ибо это может привести к # падениям браузера. #ac_add_options --enable-system-cairo

Затем необходимо выйти из папки с исходниками и создать отдельную директорию для компиляции:
$ mkdir ../build $ cd ../build

Очень важный шаг, который нельзя пропускать при сборке Firefox

Необходимо добавить к глобальным переменным CFLAGS и CXXFLAGS опции компилятора, без которых полученная сборка будет периодически падать:
$ export CFLAGS+=" -fno-delete-null-pointer-checks -fno-lifetime-dse -fno-schedule-insns2" $ export CXXFLAGS+=" -fno-delete-null-pointer-checks -fno-lifetime-dse -fno-schedule-insns2"

Осталось дать создать рабочее окружение для сборки в папке, согласно нашим параметрам, указанным в файле mozconfig:
$ ./configureНачать компиляцию Firefox 48.0 в Linux:
$ makeИ установить браузер:
# make install

Ручная активация многопроцессорного режима в Firefox 48.0

Заходим на страницу about:support Firefox и находим такую строчку:
Многопроцессные окна 1/1

Значит, многопроцессорный режим включен, если же вместо 1/1 виднеется 0/1, то следует перейти на страницу настройки about:config в Firefox. Затем изменить значение browser.tabs.remote.autostart на true. Кроме того, можно принудительно включить многопроцессорный режим в Firefox 48.0, создав логическую переменную browser.tabs.remote.force-enable со значением true на странице about:config. Осталось только изменить количество процессов для вкладок с помощью переменной dom.ipc.processCount.

Странички стали шустрее грузиться, но памяти стало кушать больше =) У всего есть плюсы и минусы.

Сравнение производительности браузера в Debian и собственной сборки на базе LFS

Цифры говорят лучше всяких слов. Для сравнения я использовал тот же сайт, что и в случае патчей BFS+BFQ для ядра Linux.

Результат для Debian (таки после обновления на свеженькую версию Firefox значительно просели результаты, по сравнению с всё теми же патчами):

Результат для LFS:

Да, действительно, разные версии браузера. В итоге полученный результат очень субъективен. Но хоть какой-то для ориентира он есть. Кстати, Firefox 47.1 без многопроцессорного режима получала 2570 баллов.

Стоит отметить и то, что у меня дискретная видеокарточка, использующая свободные драйвера, и не поддерживает аппаратное ускорение. Поэтому графика может медленно рисоваться в тестах из-за этого.

Заключение

Таки не менял используемые в лисе шрифты по умолчанию, поэтому они выглядят местами не очень. Но я исправился, правда уже тест производительности браузера заново не проходил, ленив я, что тут поделать.

Осталось только установить Adobe Flash Player и можно смотреть фильмецы онлайн =) Ну а я на днях пошаманю с хомяком и буду использовать LFS в качестве основной системы.

Понравилась статья? Поделиться с друзьями:
IPCalc Blog