Обновлён план перевода Firefox на многопроцессную архитектуру

2016-12-22

Разработчики Mozilla опубликовали обновлённый план перевода Firefox на многопроцессную архитектуру с разделением на разные процессы обработчиков контента и интерфейса (все обработчики контента выполняются отдельно от интерфейса, но пока в одном процессе друг с другом). Сообщается, что предварительное внедрение многопроцессного режима для отдельных категорий пользователей прошло успешно и если не возникнет непредвиденных проблем, включение многопроцессного режима для всех пользователей ожидается в выпуске Firefox 51, запланированном на 24 января. Исключение будет сделано только для конфигураций, в которых встречаются дополнения, помеченные как явно несовместимые с многопроцессной архитектурой.

Напомним, что в Firefox 48 многопроцессный режим был предложен примерно 1% пользователей (затем расширен до 50%), не использующих дополнения и средства для людей с ограниченными возможностями. В Firefox 49 тестирование было расширено на пользователей ограниченного списка дополнений, проверенных на предмет совместимости с многопроцессным режимом. В Firefox 50 многопроцессный режим был включен для систем со всеми проверенными дополнениями. В Firefox 51 вместо белого списка разрешённых дополнений, будет применён чёрный список явно не совместимых дополнений.

Многопроцессный режим позволяет увеличить безопасность, повысить отзывчивость интерфейса, минимизировать подвисания во время сборки мусора и заметно ускорить работу браузера на многоядерных системах за счёт организации параллельного выполнения неблокирующих друг друга операций. По тестам Mozilla на многоядерных системах наблюдается увеличение отзывчивости интерфейса на 400% и ускорение загрузки страниц на 700%. Параллельно разработчики развивают две инициативы по расширению многопроцессного режима:

  • В ночных сборках проходит тестирование возможность обработки контента в разных процессах. В отличие от уже применяемого разделения на два процесса - один для обработки содержимого вкладок и один для формирования интерфейса, новая возможность позволяет запустить более одного процесса для обработки контента (число запускаемых процессов для обработки контента задаётся через переменную dom.ipc.processCount в about:config). Подобный подход позволяет обеспечить дополнительную изоляцию обработчиков, повысить надёжность (крах одной вкладки не приведёт к закрытию всех остальных вкладок), повысить эффективность использования ресурсов многоядерных процессоров (разнесение нагрузки на все ядра), уменьшить фрагментацию памяти при длительной работе браузера.
  • Реализация sandbox-изоляции, ограничивающей доступ дочерних процессов Firefox к системным вызовам, файловой системе и сторонним процессам. В настоящее время sandbox-изоляция уже применяется на платформе Windows и в одном из следующих релизов будет предложена для macOS и Linux. Для изоляции в Linux применяется ограничение доступа к системным вызовам при помощи Seccomp-bpf, также для изоляции используются PID namespace и chroot в пустую директорию. В Windows применяются разработанные Google библиотеки sandboxbroker и sandboxtarget, используемые в Chromium и Chrome.