Разработчик подсистемы гибернации ядра Linux Найджел Каннингем любезно нашел время ответить на вопросы читателей Хабра и ЛОР.
В интервью речь идет о развитии TuxOnIce и включении его в ядро, а также хобби и предпочтениях Найджела.
Откуда ты? Я вырос в Окленде, Новая Зеландия, но последние 14 лет живу в Австралии.
Сейчас я живу в Джилонге, что немного южнее Мельбурна.
Программирование — ваша профессия? Когда вы начали это делать? Какой ваш любимый язык программирования? В целом, что касается моей профессии, я служитель христианской (протестантской) церкви, но до этого получил степень бакалавра коммерции в области управления и управления информационными системами.
Даже в детстве я был немного компьютерным фанатом, но со временем я стал больше интересоваться людьми, чем компьютерами.
После окончания богословских курсов около 10 лет назад я работал как в сфере информационных технологий, так и в христианском служении.
То, что я делаю сейчас, сочетает в себе эти две вещи.
Я работаю в Мельбурнском теологическом колледже, координирую их программу дистанционного обучения.
В рамках этого я работаю над программой электронного обучения под названием Moodle, а также над основным веб-сайтом Drupal. Я начал программировать в раннем подростковом возрасте.
Первым семейным компьютером был Dick Smith VZ-200 (он продавался в Австралии и Новой Зеландии), а затем у меня появился Commodore 64, на котором я сделал свою первую попытку программирования.
Я изучил машинный код до такой степени, что написал небольшую систему всплывающих меню, код которой в основном размещался в оперативной памяти, которая обычно была скрыта 16 КБ базового ПЗУ на компьютере C-64. Я не уверен, что у меня есть любимый язык программирования.
Сейчас я в основном использую два: C для ядра и PHP для разработки веб-сайтов.
Мне нравятся они оба, но все имеет свое место: C хорош для базового программирования, а PHP хорош для веб-сайтов.
Перефразируя ваш вопрос, могу сказать, что Scheme мне нравится меньше всего.
Мне довелось изучить его, выполняя задания по информатике, когда я учился на степень бакалавра, и я думаю, что все эти скобки больше предназначены для продажи таблеток от головной боли, чем для удобочитаемости кода! :) Какие у тебя хобби? Мне немного нравится ухаживать за растениями — я уже третий раз наблюдаю, как тюльпаны вырастают из почвы, мне очень нравится на них смотреть.
Я также являюсь активным членом местных экстренных служб — группы волонтеров, которые помогают людям во время наводнений, ураганов и других чрезвычайных ситуаций.
Мне очень понравилось учиться безопасно лазить по крышам, контролировать движение транспорта и т. д., поэтому я с нетерпением жду возможности пройти другие необходимые курсы, чтобы применить полученные навыки на практике.
Есть ли у вас дома домашние животные (особенно интересны кошки, ими помешано большинство наших читателей)? Как их зовут? Они помогают вам программировать? Мне стыдно признаться, что у меня нет домашних животных.
Но есть двое детей, которых я очень люблю.
У нас с женой Мишель есть 13-летний сын Алисдер и 3-летняя дочь Ирен.
Лидер хочет научиться программировать, но еще не научился этому.
Как началась разработка suspend2? Когда это началось? Почему имя было «suspend2», а не «suspend»? Работа над гибернацией началась около 10 лет назад, когда я начал серьёзно изучать Linux. В теологическом колледже я хотел запускать программы по изучению Библии, но они были только для Windows. Пришлось сначала запустить Linux, потом Win4Lin, а потом Logos (та же программа по изучению Библии).
Каждый раз это занимало около пяти минут. И тогда я начал смотреть на спящий режим как на инструмент, позволяющий ускорить весь этот процесс.
Тогда гибернации еще не было в ядре.
Это было примерно во времена версии 2.4.16 и ранних версий ветки 2.5. Габор Кути и Павел Мачек создали очень упрощенную версию программного сна и назвали ее swsusp. Я попробовал это и подписался на список рассылки swsusp на Sourceforge. Затем я постепенно начал изучать, как это работает, и изучать C, а затем начал присылать небольшие патчи, чтобы сделать swsusp быстрее, надежнее и дружелюбнее.
Если я правильно помню, у Габора не было много времени на разработку, поэтому разработкой, естественно, занимался я.
Примерно в это же время Павел добился включения кода в ветку ядра 2.5, но (опять же, если мне не изменяет память) без консультации с сообществом.
Я пробовала работать с Павлом, но ничего не получалось, и наши пути постепенно разошлись.
Что касается названия, меня всегда раздражало то, как произносится это «swsusp»?! Вот почему я назвал это просто «приостановкой программного обеспечения».
Внезапно мы дошли до того, что могли назначить версию 1.0 ( в июле 2003 года ).
Разработка продолжалась до тех пор, пока в конце января 2004 года мы не выпустили версию 2.0. Они назвали ее «suspend2».
Разработка Suspend2 продолжалась, но после 2005 года она значительно замедлилась, поскольку мои приоритеты изменились, а программное обеспечение стало более зрелым.
Недавно в центре внимания оказался Рафаэль Высоцкий, который хотел назвать программное обеспечение, работающее в спящем режиме, «гибернацией», а не «приостановкой».
Чтобы это желание сбылось, я предложил новое имя, и TuxOnIce родился случайно.
Мы продолжили нумерацию версий, поэтому текущая версия — 3.2. Достаточно ли хорош код управления питанием Linux? Что можно сделать, чтобы улучшить его? Этому коду предстоит пройти долгий путь.
Многое сделано, но многое еще предстоит сделать, потому что для эффективного управления питанием необходимо совмещать оперативное управление питанием (т. е.
поддержание питания во время работы системы) и управление состояниями системы (спящий режим).
и/или спящий режим).
Вам нужно работать с кучей разных архитектур и устройств, нужен гибкий подход для удовлетворения требований разных пользователей и разных сценариев работы.
Кроме того, для хорошего управления питанием требуется не только хорошее ядро, но и хорошо написанные приложения.
Лучшая система управления питанием может быть повреждена одной-единственной проблемой, например сбойным циклом опроса событий.
Таким образом, проблема управления питанием — это нечто большее, чем просто небольшая проблема с спящим режимом, над которой я работаю.
Это действительно проблема каждого.
Но позвольте мне подумать немного узче и сосредоточиться на спящем режиме.
Здесь ответ тот же: нет, ИМХО, код в ядре сейчас недостаточно хорош.
Я считаю, что программное обеспечение должно быть надежным, гибким, удобным для пользователя и максимально свободным от ошибок.
Текущий код прошел долгий путь с момента принятия первой версии в ядро, но еще многое предстоит сделать.
Отчасти это моя вина.
Я не приложил достаточно усилий, чтобы внедрить код TuxOnIce в ядро.
Несколько лет назад был толчок к пересмотру кода для включения в ядро, но я уже внес слишком много изменений в код ядра.
Никто не сможет его хорошо рассмотреть.
Плюс я не очень понимаю, что от меня хотят или требуют, поэтому потратил кучу времени и сил.
TuxOnIce имеет множество ценных функций, которые, я думаю, следует включить в ядро.
Но это нужно сделать за один раз, поэтому мне нужен кто-то, у кого больше времени, чем у меня.
Ну, конечно, Линус может стиснуть зубы и принять TuxOnIce таким, какой он есть.
Хотя я не верю, что это когда-нибудь произойдет. Поэтому я думаю, что лучшее, что люди могут сделать для улучшения управления питанием ядра, — это подойти и помочь.
Вы можете попробовать запихнуть TuxOnIce (или его улучшенную версию) в ядро или улучшить то, что уже есть в ядре.
Конечно, вам не обязательно быть программистом — достаточно рассказать о проблемах с отдельными драйверами устройств — это тоже очень полезно.
Никто из разработчиков ядра не может протестировать код на каждой конфигурации, поэтому исправить неизвестные ошибки невозможно.
Просто скажите мне, если есть проблема, помогите найти причину и попробовать исправленную версию — это уже будет огромной помощью даже без написания кода.
Что можно сказать по поводу повышенного энергопотребления в ядре 2.6.38( см.
эту статью )? К сожалению, я не могу вам помочь, я не отслеживаю все изменения между версиями.
В целом могу сказать, что с такой регрессией может помочь любой желающий, используя инструмент git bisect. Основная идея в том, что при тестировании, например, ядер 2.6.37 и 2.6.38 мы пробуем половину изменений между версиями и смотрим, есть ли проблема.
Если это так, вам просто нужно наполовину сузить поиск между двумя версиями.
Это делается несколько раз, пока мы не сможем с уверенностью сказать: «Этот патч — корень зла».
Обычно достаточно 12-16 итераций компиляции и тестирования ядра, но это всё равно гораздо проще и точнее, чем просто гадать.
Короче говоря, погуглите «git bisect», там есть хорошие примеры.
Некоторые люди жалуются, что ACPI в Linux является причиной многих проблем.
Что ты говоришь? Проблема, с которой столкнулись разработчики ПО с открытым исходным кодом с момента его появления, — это взаимодействие с проприетарным ПО, которое, к тому же, зачастую написано плохо.
В контексте ядра Linux это означает, помимо прочего, взаимодействие с BIOS компьютера.
Программисты BIOS, как и все программисты, допускают ошибки, неправильно понимают спецификации или даже читают их по-другому.
Иногда проблемы существуют в самих спецификациях.
Это значит, что если ребята из Intel напишут реализацию ACPI для Linux, то она не будет работать, если тупо следовать спецификациям.
Им придется повсюду экспериментировать с обходными путями.
Я не знаю ACPI достаточно хорошо, чтобы сказать, что с его спецификацией нет проблем, но, судя по тому, что я слышал на протяжении многих лет, большинство проблем связано не с ACPI, а с различными BIOS и таблицами ACPI. которые были написаны разработчиками BIOS. Достаточно ли хорош код гибернации в ванильном ядре? Каковы преимущества и недостатки использования ванильного режима гибернации? Как я уже сказал, я считаю, что нужно многое сделать для его улучшения.
Ее основа стабильна и монолитна, отсутствие необходимости ее изменения является большим преимуществом.
Но есть много вещей, которые необходимо улучшить.
Чтобы не быть голословным, назову, например, скорость, которую можно увеличить, используя – среди прочих методов – введение многопоточной обработки и упреждающего чтения.
Также можно добавить поддержку обычных файлов (не подкачки), что позволит избежать гонок в условиях нехватки памяти и повысит надежность (и больше не будет проблем с нехваткой памяти для снапшота).
Надежность можно повысить, предварительно посчитав, достаточно ли памяти и емкости накопителя для создания атомарной копии (обычно объем памяти, необходимый для драйверов, вполне предсказуем).
А сам код можно разложить по модулям, чтобы освободить память для более нужных вещей в то время, когда гибернация не требуется.
Конечно, это никак не влияет на настольные компьютеры, но встроенные системы тоже хотят переходить в спящий режим, особенно если это можно сделать быстро.
Таким образом, код ванильного ядра прошел долгий путь с момента его включения.
Теперь он стал намного надежнее и дружелюбнее.
Теперь даже BUG_ON() не являются для него стандартным инструментом отладки! Может ли Linux позаимствовать некоторые идеи управления питанием из других систем (например, BSD)? Прошло много времени с тех пор, как я запускал BSD, но я уверен, что мне есть чем поделиться.
В этом мощная сила программного обеспечения с открытым исходным кодом, особенно для маленьких и одиноких разработчиков, таких как я.
Мы не беспокоимся о патентах или о том, как скрыть наши секреты от конкурентов.
Мы больше уделяем внимание качеству самого программного обеспечения.
Так что да, я думаю, что есть идеи, которыми нужно поделиться, чтобы конечный результат стал более удобным для пользователей.
Какова цель существования TuxOnIce? Зачем вы это разрабатываете? TuxOnIce существует для того, чтобы предоставить пользователям наилучшие возможности спящего режима Linux, которые они могут получить.
Я разрабатываю его прежде всего потому, что хочу его использовать, а также потому, что есть множество преданных пользователей, которые заставляют меня поддерживать и улучшать его.
Я более чем счастлив, что могу принести пользу сообществу.
В конце концов, я использую бесплатное программное обеспечение на своих компьютерах уже более 10 лет — честно отдавать что-то взамен.
Вы предпочитаете выключить компьютер или перевести его в спящий режим? Как часто вы полностью выключаете компьютер? Большую часть времени я использую TuxOnIce. Иногда бывает, что я пробую swsusp или просто выключаю компьютер, но это скорее исключение, чем правило.
Около года назад я купил SSD-накопитель для своего ноутбука.
Меня поразила разница в скорости.
На старом диске скорость чтения и записи составляла около 100 МБ/с (50 МБ/с — скорость диска, еще половину прироста скорости обеспечивал алгоритм сжатия LZF).
При использовании SSD-накопителя образ записывается со скоростью около 250 МБ/с и читается со скоростью 380 МБ/с.
На таких скоростях спящий режим с 4 ГБ ОЗУ не занимает много времени, а преимущество в том, что после пробуждения все запущенные программы и открытые документы появляются снова, как будто компьютер и не выключался.
Ну а зачем тогда просто выключать? :) В чем разница между ванильным режимом гибернации и TuxOnIce? TuxOnIce лучше, чем ванильная гибернация? Эти две части имеют много общего кода.
Они делают одни и те же вызовы модели драйвера и следуют одной и той же схеме заморозки процессов, создания атомарной копии, записи ее на диск и отключения питания.
Основное отличие состоит в том, что ванильное ядро выполняет однопоточный ввод-вывод, отправляя страницы пакетами, тогда как TuxOnIce является многопоточным и не использует пакеты.
Это увеличивает пропускную способность (разумеется, все также зависит от характеристик железа).
Второе важное отличие состоит в том, что TuxOnIce сохраняет изображение в двух частях.
Память разделена на страницы, которые не будут использоваться при чтении или записи образа (в основном страницы процесса и LRU), и все остальные страницы (убедиться в том, что первая часть страниц действительно не используется, можно, включив расчет контрольной суммы страницы).
, что увеличит время гибернации).
В этом режиме (по умолчанию он включен, но его можно отключить) TuxOnIce сначала записывает неиспользуемые страницы на диск, затем создает атомарную копию оставшихся страниц, копируя их в неиспользуемую память, а также память, используемую первой группой.
страниц.
Эта атомарная копия затем записывается на диск перед выключением.
Такой подход позволяет записать полный образ памяти (первая группа страниц обычно занимает значительно больше 50% оперативной памяти).
С другой стороны, swsusp создает атомарную копию всех страниц, а это означает, что максимальный размер образа, который можно записать, составляет 50% оперативной памяти.
Если вам все же нужно записать более 50%, алгоритм будет освобождать память до тех пор, пока не будет выполнено условие «50% оперативной памяти свободно».
На самом деле, это освобождает еще больше, поскольку для собственно записи изображения требуется еще и некоторая память.
Компромисс между освобождением памяти и записью всего изображения заключается в том, что запись (и чтение) изображения большего размера занимает больше времени, но делает систему более отзывчивой после пробуждения.
Запись меньшего образа занимает меньше времени, но после пробуждения будет ошибка страницы (которая медленнее, особенно на механических носителях, потому что поиск занимает время, и без того большое из-за ошибок), и освобождение памяти тоже занимает некоторое время.
время.
Исторически TuxOnIce был первым, кто предоставил большое количество новых функций.
В нем впервые появилась поддержка SMP, хороший пользовательский интерфейс, поддержка файлов подкачки, а также теперь есть такие вещи, как проверка времени последнего монтирования, чего нет в ванильной версии.
Есть ли намерение включить TuxOnIce в ядро вместо существующей подсистемы гибернации? Вы пробовали это? Мне бы очень хотелось, чтобы это произошло, но мои приоритеты в последние годы меняются, поэтому мне трудно найти для этого время.
Как я уже упоминал, идея пересмотреть код возникала несколько раз, но по сути этого не произошло.
Так что в будущем мы увидим постепенное улучшение кода, который уже есть в ядре.
Это большая и длительная работа, но я вижу только так.
Если ванильный спящий режим работает нормально, стоит ли мне использовать TuxOnIce? Почему да или почему нет? Если ванильный режим гибернации работает нормально, используйте его.
Если вас что-то не устраивает, не бойтесь попробовать TuxOnIce. А главное, поддерживайте связь с разработчиками, рассказывайте им, что и почему нужно улучшить.
Мы не можем решить проблемы, если не знаем, что они существуют. Сколько разработчиков помимо вас работает над TuxOnIce? На протяжении многих лет Бернард Блэкэм и его коллеги оказывали мне огромную и неоценимую помощь.
Бернард разработал интерфейс пользовательского пространства, который используется до сих пор.
Другие много тестировали TuxOnIce и присылали замечательные отчеты.
Но патч ядра всегда был моим детищем.
Многие люди присылали патчи, но дизайн, разработка, поддержка и документация принадлежат мне.
Вы привержены ванильному ядру? Какие подсистемы вас интересуют помимо управления питанием? Время от времени я делаю коммиты в подсистемы, связанные с гибернацией, например диспетчер памяти, но это происходит не очень часто.
Я стал хакером ядра только потому, что хотел видеть улучшения в коде, который использую каждый день.
Если пользователи сталкиваются с ошибками в TuxOnIce, что им следует сделать, чтобы улучшить его качество? Как собирать отладочную информацию, если TuxOnIce выходит из строя раз в месяц? Главное в поиске багов — получить информацию о том, где возникла проблема.
Идеальная ситуация – это возможность изолировать проблемную линию и проблемную конфигурацию.
Для этого вам понадобится ядро с отладочной информацией.
При возникновении упс (если он связан с багом) следует записать адрес и после перезагрузки утилитой addr2line найти строку, где все вылетело.
Контекст также важен, поэтому вам следует получить адреса 4-5 функций из цепочки вызовов, а также преобразовать их в имена файлов и номера строк.
Это даст вам представление о том, какой код привел к упс.
Другая часть картинки — описание конфигурации компьютера.
Сюда входит файл конфигурации ядра, который должен быть приложен к отчету об ошибке (есть опция компиляции ядра, которая помещает файл конфигурации в /proc/config.gz, я настоятельно рекомендую включить ее!).
Также следует описать, где было сохранено изображение (файл? раздел подкачки? файл подкачки?).
Наконец, вывод команды dmesg в целом может оказаться неоценимым.
Лучше всего использовать netconsole и интерактивный отладчик TuxOnIce, если это возможно, чтобы получить более подробную картину того, что привело к проблеме.
Netconsole может быть полезен для отслеживания всех процессов.
Другими полезными инструментами являются kdb (особенно с KMS!) и цифровая камера (лучше сфотографировать экран, чем записывать все детали вручную — просто выберите разрешение съемки, при котором информация будет читаемой, а размер файла будет небольшим).
Какой дистрибутив вы используете? Какая ваша любимая рабочая обстановка? Я пользователь Ubuntu, главным образом потому, что в целом все просто работает. Рабочая среда — xfce4, но с панелью AWN. Поддерживаете ли вы включение в ядро таких вещей, как BFS, BFQ, reiser4? Считаете ли вы позицию Лайнуса по этому вопросу хорошо продуманной? Отвечая на второй вопрос, признаюсь, что понятия не имею, что думает по этому поводу Лайнус.
В отличие от большинства людей в сообществе ядра, я несколько аутсайдер: у меня нет карьеры программиста (хотя иногда мне бы этого хотелось), и я в первую очередь пользователь, которому нужно быстрое, надежное, и частая спячка! Сейчас я даже не подписан на основной список рассылки.
На самом деле я прочитал только один список, не TuxOnIce - по управлению питанием, и то не весь! А теперь к первому вопросу.
Некоторые проблемы трудно решить, и разные подходы качественно различны.
Кроме того, разные пользователи имеют разные приоритеты в том, что они ищут. Это касается как планировщиков, так и файловых систем, поэтому я всей душой поддерживаю идею предоставления в ядре множества вариантов управления, предоставляющих пользователю возможность выбора.
Это один из принципов, реализованных в TuxOnIce. Если вы заглянете в /sys/power/tuxonice, вы увидите множество параметров, которые можно настроить в соответствии с вашими потребностями, поскольку один ботинок не подойдет всем.
О чем вы думаете изменение нумерации версий ядра ? 3.0 обсуждается уже много лет, я рад, что время наконец пришло.
Конечно, мне бы хотелось увидеть больше изменений в самом ядре.
И еще хотелось бы, чтобы ядро было версии 3.0.0. Зачем усложнять жизнь? Вы сталкивались ошибка №12309 ? Что вы можете сказать по этому поводу? Ах да, каждый раз, когда виртуальная машина в VMware переходит в спящий режим.
Я не хочу это комментировать, так как знаю, что проблемы с планировщиками решить сложно.
Что мне нравится в TuxOnIce, так это то, что если все остальное заморожено, проблем с планировщиком остается не так много! Каких разработчиков ядра вы знаете лично? Ну, с некоторыми из них я встречался в последние годы на основных саммитах и конференциях.
Linux.Conf.Au , но я не знаю ни одного из них достаточно хорошо.
Это все из-за того, что я не работаю в Red Hat, Intel, Ubuntu или чем-то подобном.
Я имел удовольствие поехать в Канберру 7 лет назад и немного поработать с Расти Расселом и некоторыми ребятами из IBM, но там не было ничего серьезного или долговременного.
Какая команда разработчиков ПО с открытым исходным кодом лучше всего организована и состоит из профессионалов? Я работал только с сообществом Drupal (около 4 лет), но меня впечатляет то, как они делают то, что должны делать.
В каких еще проектах с открытым исходным кодом вы принимали участие? Я участвовал во многих модулях Drupal (Mailfix и Fasttoggle и, в меньшей степени, в списке рассылки OG) и недавно начал поддерживать ответвление модуля pam-mysql на Github. Готовы ли вы к IPv6? Нет. Я не разбираюсь в проблемах IPv6, но в будущем нужно будет что-то делать, если адреса закончатся.
Тем не менее, я узнаю только то, что необходимо для того, чтобы эта штука работала.
Вы не можете знать все, Google – ваш друг! :) Какое ваше лучшее достижение в жизни? Хм.
Сложный вопрос.
Я не особо задумываюсь о достижениях или гордости ими.
Я думаю, следует сказать, что я доволен тем, что представляет собой TuxOnIce - он довольно стабилен и зрел (хотя проблемы с драйверами и изменения в ванильном ядре означают, что всегда есть над чем работать).
Мне также повезло оказывать положительное влияние на мою семью, церковь и общество.
В конце концов, я думаю, что лучше служить, чем быть прислугой, и если я смогу оглянуться назад на жизнь, в которой я это делал, я буду счастлив.
Спасибо за ответы! Да, пожалуйста.
Спасибо за ваши вопросы! Оригинальное интервью здесь .
Теги: #linux #Интервью #Настройка Linux #интервью #tuxonice #Найджел Каннингем #Найджел Каннингем
-
Александрийская Грамматическая Школа
19 Oct, 24 -
Как Я Перестал Бояться И Полюбил Поддержку
19 Oct, 24 -
Плеер Cowon S9 – В Шаге От Идеала
19 Oct, 24 -
Рождественская Елка В Твиттере
19 Oct, 24