Где узкое место скорости просмотра веб-страниц на Raspberry Pi?

23

На модели B 512 МБ Pi с распбиенским «хрипом» я пробовал Midori, Chromium и Iceweasel. Когда веб-страница становится больше, загрузка идет медленно, даже после того, как я разогнал ее до 1 ГГц. На телефоне Android с процессором 1 ГГц загрузка веб-страницы выглядит намного быстрее.

Я хочу знать, где узкое место в Пи? Это ЦП, размер ОЗУ или X-сервер без ускорения? Возможно ли, чтобы браузер использовал GPU напрямую, чтобы ускорить его?

hello.wjx
источник
И пи управляет экраном 3,5 "480 x 800?;) Если не один, то это один из факторов ...
Златовласка
Монитор VGA используется для отображения через кабель HDMI-VGA, и конфигурация hdmi_mode=35 1280x1024 60Hz... Но я не вижу каких-либо улучшений после изменения конфигурации наhdmi_mode=9 800x600 60Hz
hello.wjx
Без сомнения. Я думаю, что у получателя есть правильный ответ на этот вопрос, но я добавил еще один с идеей для вас.
Златовласка

Ответы:

15

Это комбинация довольно слабого процессора ARM11 от Raspberry Pi и X-сервера без ускорения. Поскольку он не ускоряется графическим процессором, процессор должен выполнять весь рендеринг; на чем-то вроде ядра ARM11 в Pi это создает дополнительную нагрузку на и без того слабый процессор.

Как ни странно, когда я смотрел, htopкак Midori на Pi загружает тяжелый веб-сайт, такой как Facebook, я видел, как процесс X занимает до 25% процессорного времени.

Нечестно сравнивать чип вашего телефона Android с чипом (даже разогнанным) в Pi. Чип 1 ГГц в вашем телефоне, вероятно, похож на Cortex-A8 или A9, которые используют версию архитектуры ARMv7; таким образом, они имеют более высокую производительность за такт, чем ARM11, который использует ARMv6.

nc4pk
источник
Какая операция 2D-рисования может ускоряться GPU?
Трисмегистос
@ Trismegistos Заполнение регионов цветами. Объединение слоев с прозрачным фоном. Сглаживание краев шрифта.
Дмитрий Григорьев
14

Это уже правильный ответ IMO, и то, что я предлагаю, вероятно, не будет иметь большого значения, но это может быть полезно знать.

Если все, что вам нужно, это запустить браузер, вам также не нужно запускать среду рабочего стола. Создайте файл, который выглядит так $HOME/.xinitrc:

#!/bin/sh

midori

Если .xinitrc уже существует, временно переместите его или закомментируйте что-нибудь еще. Теперь startx(очевидно, вы не должны быть в нем уже - делайте это с консоли без запуска GUI). Вуаля, у вас есть только браузер, нет рабочего стола.

Это экономит крошечный объем памяти, хотя браузер на данный момент является слоном в комнате, а сам сервер Xorg (который работает) больше, чем базовый lxde (который сейчас не работает). Если вы загрузили столько памяти в ОЗУ, что используете swap, это повлияет на производительность. Вышеупомянутый midori + bare X использует <100 МБ резидента согласно free:

             total       used       free     shared    buffers     cached
Mem:        448708     242604     206104          0      82660     105156
-/+ buffers/cache:      54788     393920
Swap:       102396          0     102396

448708 - 393920 = 54788/1024 = 53,5 МБ

Это с 4 открытыми вкладками. Опять же, если вы посмотрите на них и увидите, что ваша RAM почти заполнена, это проблема производительности. Обратите внимание, что это нормально - использовать немного подкачки, даже если оперативная память не заполнена, так что не беспокойтесь об этом - этот обменный объект имеет низкий приоритет.

Еще одна вещь, о которой стоит подумать, в отношении производительности - это значение буферов и кеша . Я не включил их в общую сумму и заметил, что на самом деле это больше, чем выделенная память (примерно вдвое больше). Это нормально. Если вы заполняете память фиксированными данными, система просто использует меньше кеша и / или передает его для обмена. В любом случае, что будет снижением производительности , поскольку кэш является важным (это просто не витало или неизменного размер мудрой, поэтому не является часть совершенного стата ими памяти).

Другими словами, оптимально вы хотите, чтобы ваш преданный баран составлял не более 75% от того, что доступно на пи, и, возможно, меньше этого. Если вы используете LXDE и начинаете открывать другие вещи, вы можете быстро приступить к этому.

Златовласка
источник
5

Отказ от ответственности : ниже описано использование экспериментальных функций с сомнительными эффектами. Обязательно проверьте введенные регрессии и фактический прирост производительности.

Вы можете попробовать некоторые из флагов Google Chrome / Chromium под, chrome://flagsчтобы улучшить (очевидную) производительность просмотра. Есть статья, объясняющая некоторые флаги, относящиеся к производительности . Я постараюсь собрать некоторые здесь:

Принудительное ускорение графического процессора путем включения «Перезаписи программного рендеринга списка» будет использовать графический процессор для рендеринга за счет возможных артефактов, даже если драйвер не включен в белый список. Однако я не знаю, насколько хорошо это работает с графическим процессором Пи.

Компоновка GPU на всех страницах будет использовать GPU для прокрутки всех слоев. Поэтому производительность прокрутки должна улучшаться на страницах без слоев с GPU-ускорением.

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

Рендеринг в отдельном потоке будет выполнять рендеринг асинхронно и поддерживать отзывчивость интерфейса. Вы можете прокрутить, пока страница все еще рендерится.

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

После включения / выключения любых переключателей вам придется перезапустить Chrome / Chromium, чтобы настройки вступили в силу. Кнопка внизу страницы флагов может сделать это за вас.

Более того, переключатели командной строки могут быть использованы для оптимизации Chrome / Chromium. См. Список ключей командной строки Chromium для полного списка.

--default-tile-widthи --default-tile-heightможет быть установлен, чтобы соответствовать части размера экрана, чтобы ускорить начальный рендеринг каждой страницы.

Бенгт
источник
Я попробовал флаги Override software rendering list, GPU compositing on all pagesи Threaded compositingна Пи, но не кажется , никаких явных улучшений. Я также попробовал эти флаги на ПК, кажется, никаких улучшений тоже.
hello.wjx
Обязательно перезапустите Chrome после редактирования флагов. Для тестирования Override software rendering listоткройте демо-версию WebGL. Чтобы проверить, Threaded compositingпопробуйте прокрутку, пока большая страница еще загружается.
Bengt
Из того, что я читаю здесь: chromium.org/developers/design-documents/… использование «многопотоковой компоновки» не поможет на пи - у него только одно ядро ​​- и может ухудшить его , в зависимости от того, насколько важно «Работа с копией текущего состояния рендеринга» есть.
Златовласка
Да, загрузка страницы снизится. Но Javascript не будет блокировать и ждать рендеринга, и страница останется отзывчивой. Вы обмениваете объективную производительность на воспринимаемую производительность.
Бенгт