В этой статье рассмотрим, как выжать все соки из Хромиума и максимально ускорить его или другой браузер на его движке (Chromium, Google Chrome, Opera, Vivaldi, Яндекс и др.). За счет включения многих экспериментальных возможностей по вынесу вычислений с процессора на видеокарту и включения использования находящихся в разработке программных алгоритмов. За счет этого наш любимый хромиум станет работать быстрее, может перестать тормозить или моргать экраном.

Поехали!

Как сделать резервную копию всего профиля браузера (настройки, история. закладки и пр.), написано в конце статьи.

Заходим по адресу chrome://gpu (да, именно так наберите в адресной строке или скопипастьте)!



Как видите, у меня везде зеленая надпись «Hardware accelerated», что говорит, что данная функция использует аппаратное ускорение за счет выноса вычислений на видеокарту, а «Enabled» говорит, что программный алгоритм включен.

Теперь зайдите в chrome://flags.Здесь и будем производить большую часть настройки.



На скриншоте красным прямоугольников выделил #ignore-gpu-blacklist. Дальше все опции из этого списка буду именовать именно вот так. Можно нажать Ctrl+F и найти настройку по ее скопипащенному названию.



Теперь у нас открыты и chrome://gpu, и chrome://flags. Смотрим, какие параметры есть в chrome://gpu, и, если параметр не зеленый, а желтый или красный, в chrome://flags изменяем соответствующую настройку. Осторожно, некоторые настройки могут сделать работу браузера нестабильной, зависит от железа.

Canvas — аппаратное ускорение отрисовки канваса
В chrome://flags это #ignore-gpu-blacklist
Отключается включением опции #disable-accelerated-2d-canvas

CheckerImaging — суть в том, что растеризация картинки убрана из зависимости от растеризации остальной области, с которой связана картинка, что позволяет отрисовывать веб-страницу, не дожидаясь окончания обработки картинки, как-то так. Говорят, сайт Юлмарта начинает отрисовываться намного быстрее.
Это параметр командной строки --enable-features="CheckerImaging", подробнее ниже.

Flash, Flash Stage3D, Flash Stage3D, Flash Stage3D Baseline profile — аппаратное ускорение декодирования флеш-контента
Тоже #ignore-gpu-blacklist

Compositing — аппаратное ускорение наложения слоев
Скорее всего, тоже #ignore-gpu-blacklist, я не встречал, чтобы это было не работало (было не зеленым) «из коробки».

Multiple Raster Threads — распараллеливание на несколько потоков процесса растеризации векторных элементов веб-страницы
#enable-gpu-rasterization —> Force-enabled for all layers / Принудительно для всех слоев.
Включение этой опции также может помочь, если у вас моргает экран при просмотре сайтов, в т.ч. вконтакте, и видео.

Native GpuMemoryBuffers — исключается дополнительный буфер при копировании элементов между CPU и GPU, по умолчанию выключено, почему — подробно написано по ссылке.
Это параметр командной строки --enable-native-gpu-memory-buffers, подробнее ниже.

Rasterization — применение видеокарты для растеризации
#enable-gpu-rasterization

Video Decode — аппаратное ускорение декодирования видео (при просмотре видео декодируется)
Video Encode — аналогично кодирование
Входит в #ignore-gpu-blacklist

WebGL, WebGL2 — поддержка рендеринга на видеокарте набора инструкций OpenGL, входящих в стандарт WebGL; автоматически выключается, если драйвер видеокарты их не поддерживает.
Входит в #ignore-gpu-blacklist

Еще есть опция #enable-zero-copy, выше приведена ссылка на статью инженеров Intel, которые разрабатывали эту функцию (судя по скриншотам и вступлению в статье, разработка происходит на Ubuntu, но коммерчески выгодна в первую очередь из-за Chrome OS). Есть подозрение, что ее работа будет очень специфична для конкретного железа.

#enable-tcp-fast-openTCP Fast Open, ускоряет работу сетевого стека, фича ядра Linux, на Windows и MacOS недоступно, виндузятниги с**** ничего не подозревая наслаждаются ущербностью своей операционной системы, яблочники от них не сильно отстают (не воспринимайте близко к сердцу, это шутка).

#expensive-background-timer-throttling — ограничивает максимальную нагрузку на процессор фоновыми вкладками (т.е. не та вкладка, с которой вы сейчас работаете) до максимум 1%. Далеко не всегда уместно. Вдруг у вас в фоновой вкладке запущена торговля на бирже.

#v8-cache-options — например, в режиме «Cache V8 compiler data» V8 будет лучше кешировать javascript и не компилировать их заново. Опять же. на некоторых сложных веб-приложениях в теории может вызывать проблемы. V8 — это движок обработки ( в т.ч. компиляции) яваскрипта в Chromium, а компиляция javascript создает основную нагрузку на процессор при работе браузера.

#v8-cache-strategies-for-cache-storage — можно включить агрессивный кеш V8, речь о кеше в предыдущем абзаце, возможное последствия те же.

#shared-array-buffer — экспериментальные функции работы с памятью в javascript, подробное объяснение здесь.

#enable-simple-cache-backend —> Enabled/Включено — вместо реализации своего подобия файловой системы в блочном файле для кеша, работаем с файлами непосредственно внутри файловой системы, возлагая большую часть работы на операционную систему и уменьшая нагрузку на ввод-вывод с диска, в т.ч. уменьшаем количество переключений контекста, что должно ускорить работу.

Теперь про опции командной строки Chromium и Google Chrome. Теоретически, всякие иные поделия браузеры на движке Сhromium должны их поддерживать, но гарантии нет.
Закрываем все открытые копии Chromium, открываем терминал и выполняем вот такую команду:
$ chromium-browser --enable-native-gpu-memory-buffers --enable-features="CheckerImaging"

В chrome://gpu видим, как стали зелеными пункты CheckerImaging и Native GpuMemoryBuffers (либо браузер вообще не запустился :) ) Но ведь каждый раз запускать браузер через терминал неудобно, поэтому открываем графический редактор desktop-файлов и в нем дописываем в команду запуска браузера нужные нам параметры (обратите внимание, что на конце есть %U, оно заменяется на ссылку или путь к файлу, который нужно открыть, так что его не нужно удалять. В KDE это kmenuedit (вызов либо через терминал командой kmenuedit, либо подвести курсор к кнопке вызова меню приложений и нажать на правую кнопку мыши 1 раз, затем левой 1 раз нажать на «Редактор меню» в появившемся списке), на остальных DE (XFCE, GNOME, Budgie, LXDE, LXQt и др.) это menulibre.



Menulibre, Chromium

Kmenuedit, Chromium

Тру-униксоиды могут скопировать /usr/share/applications/chromium-browser.desktop в ~/.local/share/applications/chromium-browser.desktop и отредактировать параметр Exec, получится то же самое:



В зависимости от DE, вам может потребоваться повторно вынести ярлык на рабочий стол и/или панели.

Как измерить скорость работы браузера, понять, какие опции на вашем сочетании железа и видеодрайвера ускоряют работу, а какие замедляют?
Для этого запускайте онлайн бенчмарк web.basemark.com с различными сочетаниями настроек и сравнивайте количество набранных попугаев баллов.

В chrome://gpu браузер может мамой клясться, что включено аппаратное ускорение декодирования видео. Но ведь не каждое видео будет декодироваться аппаратно!
Открываем chrome://media-internals/, параллельно запускаем проигрывание какого-нибудь видео с Youtube и смотрим, каким кодеком оно декодируется.



Сейчас Google все видео отдает в кодеке VP9 собственной разработки, но на довольно многих старых видеокартах возможно аппаратное декодирование только H.264; расширение h264ify заставит браузер сообщать, что он не поддерживает кодеки VP8 и VP9, что заставит Youtube отдавать видео в H.264. См. youtube.com/html5

По умолчанию так:



С включенным h264ify на его стандартных настройках:



Вообще нет единого нормального списка, какие драйверы и на каких видеокартах поддерживают аппаратное декодирование, но вот Chromium 62 появится полноценная работа VA-API (API для аппаратного ускорения кодирования и декодирования видео), которая была и раньше, но только на ChromeOS, а, например, здесь, Хромиум собирали и собирают с патчем, который включает это и на Линуксе. Для работы рекомендуется свежая версия libva; если у вас, к примеру, Ubuntu 16.04, то можно обновить весь графический стек отсюда, что рекомендуется пользователям современных и не очень видеокарт Intel и AMD, т.к. в наши дни опенсорсный графический стек развивается очень быстро, а мы в статье задействовали множество функций работы с видеокартой. Разработчики Ubuntu 17.10 работали над улучшением работы VA-API из коробки. Вообще, с проигрыванием видео на Линуксе никогда не встречал проблем, все хорошо работает из коробки. Для Firefox было дополнение, которое позволяло ролик с Youtube проигрывать во внешнем плеере mpv, что на очень старых машинах могло существенно снижать нагрузку на процессор.

— Памагите!!! Браузер перестал запускаться!!!
— Такое бывает очень редко, но все же иногда случается, когда настройки работы с видеокартой выкручиваются так, что у браузера не получается с ней работать. Открываем в файловом менеджере папку ~/.config (~ — это ваша домашняя папка) и находим папку chromium (для Google Chrome она называется google-chrome, Vivaldi — Vivaldi и т.д.).



В ней хранится наш профиль. Можно просто переименовать папку, например, в chromium.old, а при следующем запуске chromium создаст ее заново и начнет с чистого листа. В качестве резервной копии (бекапа) рекомендую до проведения всех манипуляций заархивировать эту папку (и хранить, как зеницу ока). Если вы что-то поломали, а начинать с чистого профиля не хочется, то попробуйте открыть терминал внутри ~/.config/chromium и выполнить команду:
$ grep -inHr "ignore-gpu-blacklist"

где вместо ignore-gpu-blacklist подставьте название опции, которая, как вы думаете, с тала причиной неполадок. В ответ команда grep выдаст путь к файлу и номер строки, где есть шанс поправить настройку. Возможно, часть настроек хранится в SQLite базе данных, и тогда потребуется какая-нибудь программа для работы с SQLite-БД и поиска по ним. Честно говоря, ни разу не пробовал так делать.



За сим отчаливаю, спасибо за внимание, жду отзывов и вопросов в комментариях.

Комментарии (23)


  1. gentux
    03.10.2017 22:58

    В chromium тоже можно запускать ролики youtube через mpv watch with mpv + инструкция по запуску сервиса для разных ОС


    1. Laney1
      04.10.2017 12:03

      я запускаю просмотр просто из консоли. mpv --ytdl-format=bestvideo+bestaudio ...
      а список форматов можно посмотреть в youtube-dl


  1. Airat_Halitov
    04.10.2017 03:46

    Делал это раньше, находил подобные инструкции в интернете. Но, как показала практика (через несколько месяцев использования в «быстром» режиме), ноут стал больше нагреваться, а кулер чаще запускаться (а меня напрягает этот звук, я люблю тишину). Иногда он вообще работал без остановки, я уже было задумался о подставке с доп.охлаждением, плюс чистил ноут от пыли и заменял термопасту (хотя там у меня всегда всё чисто).

    А если ноут будет работать от батареи, то она сядет гораздо быстрее. Нужно будет отключать аппаратное ускорение вручную.
    В итоге просто вырубил его (аппаратное ускорение) сейчас и все настройки в chrome://flags/ поставил по умолчанию, и всё норм.

    Но в любом случае можете протестировать. Всё зависит о того, для каких задач вы используете свой браузер. Оперативно посмотреть видос на youtube можно и на стоковых настройках.

    P.S. Махинации с файлом /usr/share/applications/chromium-browser.desktop нужно будет проводить каждый раз после обновления браузера (у меня Chromium на Ubuntu)


    1. specblog Автор
      04.10.2017 03:48

      Не нужно их проводить каждый раз. Копия файла делается в домашнем каталоге, она приоритетнее файла вне /home, входящего в пакет. Аппаратное ускорение в большинстве случаев экономит батарею. У вас, мне кажется, Windows, а не Линукс, и ноутбук с дискретной видеокартой, судя по описанным проблемам с батареей, я прав?


      1. Airat_Halitov
        04.10.2017 15:34

        Да, потом уже заметил, что ошибся по поводу файла, т.к. я не копировал его в локальную директорию. Но коммент уже ушел на модерацию. Ваш вариант будет работать.

        Как это вам может казаться, что у меня винда, если у меня Ubuntu Linux 16.04 (я написал об этом выше)? :) А видеокарта действительно дискретная: GeForce GT 635M. Драйвер nvidia версии 375.66 (может пригодится).

        Раньше на win10 у меня батарея держала примерно 2-3 часа, а как на Ubuntu Linux перешел в качестве домашней ОС (почти год назад), батарея держит меньше часа. Ставил какую-то утилиту для энергосбережения, но чет не помогло (пока забил на этот вопрос). Надо будет найти решение этой проблемы.

        А по поводу того, что вы говорите, что аппаратное ускорение в большинстве случаев экономит батарею — тут я сильно сомневаюсь, т.к. отдельная видеокарта в принципе потребляет больше (это в добавок к CPU). И что за такое «большинство случаев» и как в него попасть. Может вы имеете в виду встроенную видеокарту?


        1. specblog Автор
          04.10.2017 18:14

          Как это вам может казаться, что у меня винда

          А, может, на винде автоматически включается дискретная карта при высокой (по мнению драйвера) нагрузке на встроенную, что вызывает высокое потребление батареи. Из комментария не однозначно следует, что проблема у вас прям на текущей системе.
          Вам нужно в первую очередь не утилиту для энергосбережения ставить, а в открыть nvidia-settings и переключить PRIME Profile на интегрированную видеокарту Intel. Дискретную включать только при надобности (или настроить bumblebee). Сейчас у вас наверняка дискретная видеокарта работает 100% времени, когда как в Windows Nvidia Optimus пытается ее то включать, то выключать автоматически. А уже после перехода на интегрированную Intel пробуйте laptop-mode-tools, powertop --auto-tune. Если у вас процессор Intel и не самый старый, то часть описанных настроек браузера могут дать эффект. Про экономию батареи я говорил для случая интегрированной видеокарты, плохо выразился.


          1. Airat_Halitov
            04.10.2017 22:01

            Автоматическое переключение между видеокартами похоже на правду)

            По поводу текущей конфигурации и энергосбережения:
            Процессор: Intel® Core(TM) i5-3317U
            Встроенная видеокарта Intel® HD Graphics 4000
            У меня стоял до этого пакет tlp (и tlp-rdw)
            Сделал, как вы написали, т.е. переключил PRIME Profile. Установил laptop-mode-tools (tlp удалил, т.к. они взаимоисключающие).
            sudo powertop --auto-tune выдал:

            Скрытый текст
            modprobe cpufreq_stats failedЗагружены 29 предварительные замеры
            Невозможно загрузить из файла /var/cache/powertop/saved_parameters.powertop
            Файл будет загружен после выполнения минимального количества измерений (только с батареей)
            RAPL device for cpu 0
            RAPL Using PowerCap Sysfs : Domain Mask d
            RAPL device for cpu 0
            RAPL Using PowerCap Sysfs : Domain Mask d
            RAPL device for cpu 0
            RAPL Using PowerCap Sysfs : Domain Mask d
            Devfreq not enabled
            Невозможно загрузить из файла /var/cache/powertop/saved_parameters.powertop
            Файл будет загружен после выполнения минимального количества измерений (только с батареей)
            To show power estimates do 256 measurement(s) connected to battery only
            Завершение PowerTOP


            1. specblog Автор
              04.10.2017 22:08

              В powertop можно смотреть, какая программа как часто дергает процессор. Если правильно помню, compiz это делает чаще других WM.


          1. Airat_Halitov
            04.10.2017 22:10

            Продолжение...
            Сейчас я включил аппаратное ускорение, и зарядка упала с 30% сразу на 20%, а потом и до 0%, т.е. ноут вырубился :)

            Пока не знаю, с чем связано. Видимо режим с аппаратным ускорением у меня «прожорливее»


  1. Protactinium236
    04.10.2017 03:46

    А можно тоже самое для Firefox 57 ?


    1. specblog Автор
      04.10.2017 03:49

      Я знаю только о layers.acceleration.force-enabled = true


  1. zbestr
    04.10.2017 03:46

    Спасибо! Как раз хотел найти готовый мануал на эту тему и погонять, да всё времени не было заняться.
    Чисто субъективно почему-то кажется что шрифты стали приятнее. Глаз прям сам за это зацепился.
    Ну и мониторинг показывает что процессору стало жить проще и прохладней.


  1. mrobespierre
    04.10.2017 06:40

    если инет быстрый, а папка профиля не на ssd, то имеет смысл рассмотреть отключение диского кеша вообще (--disk-cache-size=1 --media-cache-size=1)


  1. domix32
    04.10.2017 11:58

    Галочка аппаратного ускорения в настройках хромиума делала какой-то странный трюк с рендеренгом изображений на канвасе (Ubuntu 16.04.3 LTS).


  1. Laney1
    04.10.2017 12:08

    но вот Chromium 62 появится полноценная работа VA-API

    если я правильно понял то что написано по ссылке, то там код еще не смерджен, так как не прошел ревью


  1. Star_Hobbit
    04.10.2017 18:09

    ещё пользуюсь --process-per-site, меньше памяти кушает за счёт того, что сайты с 1 ip обрабатываются в 1 процессе (на веб-дев машине актуально)


  1. SeeOleg
    04.10.2017 18:09

    А что типичное под windows можно сделать?
    Есть видюха, и она простаивает, как бы бы ее мощность пустить на работу с браузером.


  1. UNIm95
    04.10.2017 18:09

    Возник вопрос(в реале нужна помощь с опциями)
    Есть 2 компа: Ноут на CPU, GPU Intel и десктоп CPU Intel, GPU AMD R7 250X(дискретка к которой подключены мониторы) GPU Intel(интегрирована, ничего не подключено).
    При воспроизведении youtube в местах где в ролике нет звука десктоп начинает фризить кадры. То есть видео замирает, после чего появляется звук со следующим не тихим моментом, видео или ускоренно перематывается на момент со звуком или сразу прыгает на этот участок.
    Причем профиль Chromium перенесён из десктопа в ноут.
    Думаю что это как-то связано с двумя видеокартами на десктопе.
    Есть какие-либо опции привязывающие ускорение к дискретной видюхе?
    OS: Ubuntu 16.04
    Драйвера: На обоих машинах открытые.


    1. specblog Автор
      04.10.2017 18:16

      Покажите вывод
      glxinfo | grep OpenGL
      uname -a


      1. UNIm95
        04.10.2017 20:34

        Ноут

        unim95@laptop:~$ glxinfo |grep OpenGL
        OpenGL vendor string: Intel Open Source Technology Center
        OpenGL renderer string: Mesa DRI Intel(R) Kabylake GT2 
        OpenGL core profile version string: 4.5 (Core Profile) Mesa 17.0.7
        OpenGL core profile shading language version string: 4.50
        OpenGL core profile context flags: (none)
        OpenGL core profile profile mask: core profile
        OpenGL core profile extensions:
        OpenGL version string: 3.0 Mesa 17.0.7
        OpenGL shading language version string: 1.30
        OpenGL context flags: (none)
        OpenGL extensions:
        OpenGL ES profile version string: OpenGL ES 3.2 Mesa 17.0.7
        OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
        OpenGL ES profile extensions:
        unim95@laptop:~$ uname -a
        Linux laptop 4.11.0-14-generic #20~16.04.1-Ubuntu SMP Wed Aug 9 09:06:22 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
        

        Десктоп
        unim95@desktop:~$ glxinfo |grep OpenGL
        OpenGL vendor string: X.Org
        OpenGL renderer string: AMD OLAND (DRM 2.43.0 / 4.4.0-96-generic, LLVM 5.0.0)
        OpenGL core profile version string: 4.2 (Core Profile) Mesa 17.3.0-devel
        OpenGL core profile shading language version string: 4.20
        OpenGL core profile context flags: (none)
        OpenGL core profile profile mask: core profile
        OpenGL core profile extensions:
        OpenGL version string: 3.0 Mesa 17.3.0-devel
        OpenGL shading language version string: 1.30
        OpenGL context flags: (none)
        OpenGL extensions:
        OpenGL ES profile version string: OpenGL ES 3.0 Mesa 17.3.0-devel
        OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.00
        OpenGL ES profile extensions:
        unim95@desktop:~$ uname -a
        Linux desktop 4.4.0-96-generic #119-Ubuntu SMP Tue Sep 12 14:59:54 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
        


        1. specblog Автор
          04.10.2017 22:00

          Не должно быть связано с двумя видеокартами, система работает полностью на AMD. Попробуйте ядро 4.11 (sudo apt install linux-generic-hwe-16.04-edge) или более новое из http://kernel.ubuntu.com/~kernel-ppa/mainline/
          Также попробуйте вот эту сборку Хромиума с патчем для VA-API: https://launchpad.net/~saiarcot895/+archive/ubuntu/chromium-dev


  1. Sly_tom_cat
    05.10.2017 08:59

    Спасибо, зазеленил себе страничку chrome://gpu. На работе не сильно заметно (но там машина мощная), а вот дома, на нетбуке с AMD E450 Chromium стал заметно шустрее работать.


  1. rvt
    06.10.2017 16:53

    Под Windows тоже многое работает.