Укрепляем GNOME — дело о пропавшей памяти и неучтенных картинках

Материал из Rosalab Wiki
Перейти к: навигация, поиск
м (moved Blog:Точка Росы/Укрепляем GNOME — дело пропавшей памяти и неучтенных картинках to [[Blog:Точка Росы/Укрепляем GNOME — дело о пропавшей памяти ...)
 
м
Строка 15: Строка 15:
 
Мы сделали специальную сборку, прошитую Valgrindом и мучали ее неделями — но никак не могли найти серьезных зарегистрированных утечек.
 
Мы сделали специальную сборку, прошитую Valgrindом и мучали ее неделями — но никак не могли найти серьезных зарегистрированных утечек.
 
Однако еженочное автоматическое тестирование, запускавшее все пользовательские программы, включая кучу игр, подтвердило сигналы тестировщиков — система в какие-то моменты подьедала память, и часто при тестах, когда система съедала больше четырех гигов — падала тестирующая виртуалка.
 
Однако еженочное автоматическое тестирование, запускавшее все пользовательские программы, включая кучу игр, подтвердило сигналы тестировщиков — система в какие-то моменты подьедала память, и часто при тестах, когда система съедала больше четырех гигов — падала тестирующая виртуалка.
 +
 +
[[File:iceberg-js.svg|480px|right]]
  
 
Все это выглядело, как будто вроде как добротный сборщик мусора GNOME, не спешил отдавать память.
 
Все это выглядело, как будто вроде как добротный сборщик мусора GNOME, не спешил отдавать память.
Строка 44: Строка 46:
 
<!-- Когда статья будет готова к публикации, сотрите эту строчку и раскомментируйте следующую -->
 
<!-- Когда статья будет готова к публикации, сотрите эту строчку и раскомментируйте следующую -->
 
[[Category:ToROSAPoint]]
 
[[Category:ToROSAPoint]]
 +
{{wl-publish: 2014-01-20 11:01:45 +0400 | Stanislav.fomin }}

Версия 10:01, 20 января 2014


Продолжим тему невидимых, но очень полезных доделок и исправлений GNOME.

Ведь на поверхности, что всплывает в разных обзорах — это фичи, внешний вид, обои и иконки, … а реально пользователей в первую очередь беспокоит надежность работы системы, чтобы работало без глюков и торможений месяцами.

Да, месяцами, хотя казалось бы месячный аптайм нужен только серверным системам, пользователям же надо спать и все-такое. Но современный пользовательский подход — работа без перезагрузки, чтобы не терять открытых окон программ, контекстов работы, и десктоп-лептоп не выключается в перерывах, а только засыпает или гибернируется.

Поэтому любые утечки памяти достаточно критичны — ведь стоит оболочке «наестся памяти», система «зароется в своп», все начнет дико тормозить и придется перегружаться, как в давно забытые времена.

Мы серьезно подходим к тестированию клиентских систем, и если говорить о «нагрузочном тестировании» тут наверно некорректно, поэтому мы проводим, как мы это называем, «марафонское тестирование» — автоматическое и ручное тестированием системы в течении недель с непрерывным воспроизведением различных сценариев — это и броузер с флеш-видео с ютубом, это и поочередный запуск абсолютно всех установленных программ.

И при этом тестировании мы начали получать неприятные сигналы — тестировщики жаловались, что «этот ваш GNOME есть память, как не в себя». Мы сделали специальную сборку, прошитую Valgrindом и мучали ее неделями — но никак не могли найти серьезных зарегистрированных утечек. Однако еженочное автоматическое тестирование, запускавшее все пользовательские программы, включая кучу игр, подтвердило сигналы тестировщиков — система в какие-то моменты подьедала память, и часто при тестах, когда система съедала больше четырех гигов — падала тестирующая виртуалка.

Iceberg-js.svg

Все это выглядело, как будто вроде как добротный сборщик мусора GNOME, не спешил отдавать память.

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

Ловили эту проблему несколько итераций, … опустим грустные и неинтересные сложности, расскажем о некоторых выявленных причинах.

Например, внутри Javascriptовой логики (в background.js), создавался внутренний джаваскриптовый кеш-словарь картинок-обоев, причем картинка создавалась для каждого разрешения. В результате, часть программ, особенно которые перехватывали весь экран, как игрушки, в этом кеше происходило накопление картинок.

Теоретически, Garbage Collector от GNOME должен был удалять неиспользуемые картинки, но. Этого не происходило из-за тонкостей биндинга JavaScriptoвой логики с C-шными библиотеками — GC просто не видел, и не учитывал память, занимаемую картинками, учитывая только JavaScriptовые структуры ссылающиеся на них. Да, если бы он освободил их — то освободилась бы и захваченная на «C»-уровне память, но т.к. он эту память не учитывал, то он и не спешил со сборкой мусора и освобождением.

В результате, мы внесли пару точечных патчей именно в JavaScriptовую логику ([1], [2]), и эта проблема ушла.

Так что знайте — в нашем дистрибутиве мы не только впиливаем красоту и фичи, но и серьезно исследуем проблемы надежности — к сожалению, там еще есть что копать.

Надеюсь, эта новость вас…

Ввела в экстаз ^_^42
65%
Порадовала :)18
28%
Оставила равнодушным -_-2
3%
Огорчила :(3
5%

[ Хронологический вид ]Комментарии

Не нашёл ссылки на багрепорт (с патчем?) в bugzilla.gnome.org.

Войдите, чтобы комментировать.