C января этого года Билл Макклоски вместе с Дэвидом Андерсоном работали над тем, чтобы сделать «Файерфокс» мультипроцессовым, в этом им помогали Том Шустер (evilpie), Фелипе Гомез и Марк Хаммонд. И теперь настал момент, когда они хотели бы узнать мнение сообщества о проделанной работе.
В «Файерфоксе» всегда использовалась однопроцессовая модель построения. Интерес к изменениям в области распараллеливания подстегнул выход браузера «Хром», в нём использовались один процесс для интерфейса и отдельные процессы для работы с контентом веб-страницы. (Тем не менее за шесть месяцев до «Хрома» несколько процессов начал использовать «Интернет эксплорер 8».) Вскоре, примеру «Хрома» последовали и некоторые другие браузеры, «Мозилла» начала проект Electrolysis для адаптации движка «Гекко» к использованию нескольких процессов.
Что вынуждает «Мозиллу» переключаться на подобную модель построения своего браузера? В первую очередь это производительность и отзывчивость. Основной целью является уменьшение подвисания (jank), проявляющегося при стандартных операциях — загрузке особенно крупной страницы, наборе текста в веб-форме или прокрутке перегруженной элементами страницы.
Отзывчивость сегодня является несколько более важной, чем производительность. Часть работ была произведена в рамках проекта Snappy. Основными задачами являлись:
- Перемещение длинных операций в отдельный поток, чтобы главный процесс сохранял отзывчивость.
- Реализация асинхронного ввода-вывода таким образом, чтобы главный процесс не был заблокирован дисковыми операциями.
- Разбиение длинных операций на части с event loop между ними. Примером подобного является параллельный сбор мусора.
Простейшие из этих задач уже были выполнены, сейчас остались наиболее трудные.
Другой необходимостью является безопасность. Сейчас, после обнаружения незакрытого бага в «Файерфоксе» злоумышленник может выполнить произвольный код на машинах пользователей. Для решения проблем безопасности используется множество техник и приёмов, но самым эффективным остаётся запуск кода в «песочнице».
Однако, размещение текущей однопроцессовой архитектуры «Файерфокса» в «песочнице» не представляется эффективным: режим песочницы не даёт процессу выполнять действия, которые он делать не должен, а текущая организация «Файерфокса» (особенно, с множеством дополнений) требует широкого доступа к сети и файловой системе. Мультипроцессовый «Файерфокс» будет обеспечивать работу каждого из процессов веб-контента в режиме песочницы с глубокими ограничениями, что, как надеются разработчики, позволит уменьшить количество уязвимостей в браузере. Контроль за доступом к файловой системе будет производиться главным процессом.
Кроме того, разработчики пытались повысить стабильность «Огненной лисы», даже несмотря на то, что «Файерфокс» остаётся самым стабильным браузером в мире. Вместо падения целого браузера будет падать лишь процесс, ответственный за конкретную вкладку или элемент.
Уже сейчас можно попробовать посмотреть, что получилось. Для этого достаточно скачать ночную сборку браузера и установить параметр browser.tabs.remote
равным true
. Разработчики настойчиво рекомендуют создать новый профиль. about:memory
уже отображает потребление для отдельных процессов.
Так выглядит окно мультипроцессного «Файерфокса». Подчёркнутое название вкладки отражает то, что её контент обрабатывается в отдельном процессе.
Так падает отдельная вкладка.
Первый вопрос, который возникает у большинства, связан с потреблением оперативной памяти. Пользователи убеждены, что больше процессов значит больше занятой памяти. Разработчики обещают ряд оптимизаций и внедрение определённых видов кэша, общих для нескольких процессов. Если в одном из них существуют какие-либо данные, записанные одним процессом, другой процесс сможет проверить их наличие и использовать данные из этого кэша вместо создания новых в своей области памяти. Подобная модель позволит как повысить безопасность, так и сохранить некоторое быстродействие.
С использованием бенчмарка MemBench и открытием 50 вкладок потребление памяти возросло всего лишь на 10 мегабайт (с 974 мегабайт до 984 мегабайт). С течением времени эта разница станет минимальной.
На данный момент остаётся неизвестным, когда мультипроцессовый «Файерфокс» достигнет стадии релиза — перед разработчиками стоит слишком много работы. Детали новой архитектуры отражены в публикации Билла Макклоски.
Автор: FakeFactFelis