- PVSM.RU - https://www.pvsm.ru -

Мультипроцессовый Firefox

Мультипроцессовый FirefoxC января этого года Билл Макклоски вместе с Дэвидом Андерсоном работали над тем, чтобы сделать «Файерфокс» мультипроцессовым, в этом им помогали Том Шустер (evilpie), Фелипе Гомез и Марк Хаммонд. И теперь настал момент, когда они хотели бы узнать мнение сообщества о проделанной работе [1].

В «Файерфоксе» всегда использовалась однопроцессовая модель построения. Интерес к изменениям в области распараллеливания подстегнул выход браузера «Хром», в нём использовались один процесс для интерфейса и отдельные процессы для работы с контентом веб-страницы. (Тем не менее за шесть месяцев до «Хрома» несколько процессов начал использовать «Интернет эксплорер 8».) Вскоре, примеру «Хрома» последовали и некоторые другие браузеры, «Мозилла» начала проект Electrolysis [2] для адаптации движка «Гекко» к использованию нескольких процессов.

Что вынуждает «Мозиллу» переключаться на подобную модель построения своего браузера? В первую очередь это производительность и отзывчивость. Основной целью является уменьшение подвисания (jank), проявляющегося при стандартных операциях — загрузке особенно крупной страницы, наборе текста в веб-форме или прокрутке перегруженной элементами страницы.

Отзывчивость сегодня является несколько более важной, чем производительность. Часть работ была произведена в рамках проекта Snappy [3]. Основными задачами являлись:

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

Простейшие из этих задач уже были выполнены, сейчас остались наиболее трудные.

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

Однако, размещение текущей однопроцессовой архитектуры «Файерфокса» в «песочнице» не представляется эффективным: режим песочницы не даёт процессу выполнять действия, которые он делать не должен, а текущая организация «Файерфокса» (особенно, с множеством дополнений) требует широкого доступа к сети и файловой системе. Мультипроцессовый «Файерфокс» будет обеспечивать работу каждого из процессов веб-контента в режиме песочницы с глубокими ограничениями, что, как надеются разработчики, позволит уменьшить количество уязвимостей в браузере. Контроль за доступом к файловой системе будет производиться главным процессом.

Кроме того, разработчики пытались повысить стабильность «Огненной лисы», даже несмотря на то, что «Файерфокс» остаётся самым стабильным браузером в мире [4]. Вместо падения целого браузера будет падать лишь процесс, ответственный за конкретную вкладку или элемент.

Уже сейчас можно попробовать посмотреть, что получилось. Для этого достаточно скачать ночную сборку [5] браузера и установить параметр browser.tabs.remote равным true. Разработчики настойчиво рекомендуют создать новый профиль. about:memory уже отображает потребление для отдельных процессов.

Так выглядит окно мультипроцессного «Файерфокса». Подчёркнутое название вкладки отражает то, что её контент обрабатывается в отдельном процессе.

Мультипроцессовый Firefox

Так падает отдельная вкладка.

Мультипроцессовый Firefox

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

С использованием бенчмарка MemBench и открытием 50 вкладок потребление памяти возросло всего лишь на 10 мегабайт (с 974 мегабайт до 984 мегабайт). С течением времени эта разница станет минимальной.

На данный момент остаётся неизвестным, когда мультипроцессовый «Файерфокс» достигнет стадии релиза — перед разработчиками стоит слишком много работы. Детали новой архитектуры отражены в публикации Билла Макклоски [6].

Автор: FakeFactFelis

Источник [7]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/razrabotka/50059

Ссылки в тексте:

[1] хотели бы узнать мнение сообщества о проделанной работе: http://billmccloskey.wordpress.com/2013/12/05/multiprocess-firefox/

[2] Electrolysis: https://wiki.mozilla.org/Electrolysis

[3] Snappy: https://wiki.mozilla.org/Performance/Snappy

[4] «Файерфокс» остаётся самым стабильным браузером в мире: http://habrahabr.ru/post/191308/

[5] скачать ночную сборку: http://nightly.mozilla.org/

[6] публикации Билла Макклоски: http://billmccloskey.wordpress.com/2013/12/05/multiprocess-firefox/#work

[7] Источник: http://habrahabr.ru/post/204982/