Библиотека сайта rus-linux.net
MemShrink
Глава 5 из книги "Производительность приложений с открытым исходным кодом".
Оригинал: MemShrink
Автор: Kyle Huey
Перевод: А.Панин
Постоянное присутствие является ценой превосходства
Проект MemShrink достиг значительного прогресса в области исправления проблем системы управления памятью веб-браузера Firefox, но большой объем работы все еще должен быть выполнен. Большинство несложных проблем на данный момент решено - оставшиеся же требуют значительных инженерных усилий. У нас есть планы по поводу продолжения работы, направленной на сокращение фрагментации памяти интерпретатора JS путем использования специализированного сборщика мусора, который может объединить фрагменты памяти. Мы производим повторную разработку механизма обработки изображений для повышения его эффективности в плане использования памяти. В отличие от большинства уже произведенных изменений, данные изменения требуют значительного рефакторинга запутанных подсистем.
Не менее важно проследить за тем, чтобы не возникало регрессий функций, работу которых мы уже улучшили. В организации Mozilla с 2006 года существует строгая культура тестирования программных продуктов на наличие регрессий. Так как мы достигли успехов в уменьшении используемого Firefox объема памяти, наши требования к системе тестирования на наличие регрессий в области системы резервирования памяти резко возросли. Тестировать производительность гораздо сложнее, чем тестировать работоспособность функций. Сложнейшим этапом в рамках процесса создания этой системы был этап поиска реалистичной рабочей нагрузки на браузер. Существующие тесты систем управления памятью могут выявлять неудачно завершенные операции в довольно не реалистичных условиях. MemBuster, например, быстро загружает множество страниц wiki и блогов в новые окна браузера в определенной последовательности. Большая часть пользователей на сегодняшний день использует вкладки вместо новых окон и просматривает более сложные страницы, чем wiki и блоги. Другие системы тестирования загружают все страницы в одной и той же вкладке, что также полностью не реалистично для современного веб-браузера. Мы использовали достаточно реалистичную на наш взгляд нагрузку. Она заключается в загрузке 100 страниц в фиксированном наборе из 30 вкладок с задержками между загрузками для приближения теста к реальной ситуации чтения страницы пользователем. При этом используются страницы из существующего набора страниц Tp5 организации Mozilla. Tp5 является набором страниц, созданным на основании рейтинга Alexa Top 100 и используемым для тестирования производительности механизма загрузки страниц в нашей существующей инфраструктуре тестирования производительности. Эта нагрузка оказалась достаточно полезной для наших целей тестирования.
Другим аспектом тестирования является выявление параметров, которые следует измерять. Наша система тестирования измеряет потребление памяти браузером на трех различных этапах в ходе тестирования: перед загрузкой любых страниц, после загрузки всех страниц и после закрытия всех вкладок. На каждом этапе мы также производим измерения после 30 секунд бездействия, а также после запуска сборщика мусора. Эти измерения помогают нам обнаружить повторное проявление встреченных нами ранее проблем. Например, значительное различие результатов измерений после 30 минут бездействия и после принудительного запуска сборщика мусора может указывать на то, что эвристический анализ, проводимый нашим сборщиком мусора, является слишком консервативным по своей природе. Значительное различие между результатами измерений, произведенных перед загрузкой любых страниц и после закрытия всех вкладок может указывать на то, что происходит утечка памяти. Мы производим измерения множества величин на всех этих этапах, включая объем резидентной памяти, "точный" объем памяти (объем памяти, которая была зарезервирована с помощью вызовов malloc()
, mmap()
, и.т.д.), а также объем памяти, которая относится к определенным категориям, выделенным на странице about:memory
, например, памяти, не относящейся к определенной системе резервирования.
Сразу после создания этой системы мы начали использовать ее для регулярного тестирования разрабатываемых версий Firefox. Мы также использовали ее для тестирования предыдущих версий Firefox, примерно до версии Firefox 4. В результате была создана система псевдо-непрерывной интеграции с возможностью записи большого набора данных. После недолгого процесса веб-разработки у нас появился ресурс areweslimyet.com
, представляющий собой публичный веб-интерфейс для доступа ко всем данным, собранным с помощью нашей инфраструктуры тестирования систем резервирования памяти. После завершения разработки ресурса areweslimyet.com
с его помощью удалось обнаружить несколько регрессий, ставших результатом работы над различными частями браузера.
Продолжение статьи: Сообщество.