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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

http://habrahabr.ru/post/204982/

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *