Просмотров: 11205

FreeBSD – не черный ящик: Константин Белоусов. 1


Накануне приближающегося релиза FreeBSD 9.0, где ожидается как обилие новшеств, так и общая заметная стабилизация кодовой базы, мы решили взять интервью у одного из разработчиков этой известной серверной ОС, чтобы поговоритьс ним о трендах и новшествах в жизни FreeBSD Project.

Тем более, что для этого, признаемся честно, был и ещё один важный повод: впервые в высший управляющий состав по разработке этой знаменитой ОС – FreeBSD Core Team, — избран наш бывший соотечественник по ex-USSR, — Константин Белоусов.

Сегодня мы поговорим с ним как об этой замечательной системе, так и об его личном пути в мир системного программирования и к вершинам иерархии в FreeBSD Project.

 

 

Для начала, можно совсем немного личной информации, чтобы лучше представить вас публике. Где вы сейчас живете и сколько вам лет?

В Киеве (Украина). Мне — 37 лет.

Женаты ли вы? И кстати, сразу злободневный вопрос: мешает ли фанатичное программирование семье?

Разведен. Программированием фанатично лично я не занимаюсь, а именно само программирование семье, уверен, не мешает.

Как вы пришли в программирование? Для всех программистов это самый волнующий и интимный вопрос, расскажите свою историю.

Совсем обычно, даже скучно на самом деле. Программировать я начал лет в 14, на СМ ЭВМ, те, которые DEC PDP-11 (RT11SJ, RSX11M). Использовал при этом Assembler, Fortran, Pascal.

Потом поступил на факультет мехмата, программирование на 5 лет забросил. Где-то через год после поступления в аспирантуру, в году 1996 посмотрел вокруг, и оказалось, что кругом были уже одни персоналки. Очень недолго пытался возиться с DOS/Windows/NT etc, — надоело.

Хорошо, почему дальше выбрали именно FreeBSD, а не скажем популярный у народа Linux? Что такого есть в FreeBSD, что именно в неё вы решили вложить столько своего личного времени, сил, эмоций?

После «надоело» в предыдущем вопросе, я попробовал повозиться с Unix’ ами. У нас в институте, в котором я учился в аспирантуре, поставили списанные в каком-то западном институте SUN’ ы, SPARCstation SLC и IPC. Грузило это все по сети с SPARCstation 20 SPARC’ овый Linux.

После этого интересного опыта я уже даже подумывал бросить аспирантуру, и возможность “покрутить код” под Unix-like-системы выглядела интересно.

Но чтение кода Linux’ а было мне неприятно: я бы так не писал.

Интересно, что другой наш известный FreeBSD-коммитер @ache, также говорил мне, что в момент личного выбора “куда расти дальше”, код Linux’ a ему также очень сильно не понравился по своему качеству, и тогда он выбрал FreeBSD, “который был во всем хорош”.

Очень интересно, можете привести конкретные пример (ы), что с кодом Linux’ a, по вашему мнению, «не так»?

Я уже не помню детали, и в Linux’ е тот код, который вызвал у меня такое резкое неприятие, наверняка переписан уже несколько раз – нужно помнить, что это все происходило 12–15 лет тому назад.

С объектом выбора вашей страсти определились, что было дальше в вашем зарождающемся романе с леди Free?

Я бросил аспирантуру и нашел работу, где я писал прикладной софт для Unix’ ов: HP-UX, SunOS 4.x, Solaris 2. Поскольку как всегда, документации не хватает, лучшим способом найти ответы на вопросы было чтение каких-то исходников. Чтение кода FreeBSD было решением: чем больше я в системе ковырялся, тем больше она мне нравилась.

Я долго использовал FreeBSD как домашний и рабочий десктоп, и как reference guide. Потом поменял работу, моей новой обязанностью стали драйверы для Solaris’а.

Как ни странно, это привело к тому, что однажды, во многом спонтанно, я попробовал послать один простой баг-фикс в current@FreeBSD (я уже ощущал систему “своей”, и системное программирование для чужой системы требовало моральной компенсации). Еще более странным для меня было тогда то, что его сразу же “закоммитили” (багтрек для истории: r145328, апрель 2005). Дальше уже было не остановиться…

Но почему всё-таки именно FreeBSD, а не скажем Open- или NetBSD? Это был осознанный выбор или просто случайность?

На момент того изначального выбора — случайный.

Какие вы видите отличия в идеологии разработки FreeBSD от остальных xBSD. Имеется ввиду не тривиальные: “ опенок” — это безопасность, NetBSD – мульти-платформенность. А какие вам, как человеку увидевшему “ фряху” изнутри, видятся отличия между BSD-шными системами?

С OpenBSD у меня два сильных отторгающих фактора — атмосфера общения в их списках рассылок, и их технические решения. К примеру, у них нет даже поддержки SMP, полностью нерабочие нитки… о чем тут вообще говорить? Отчасти, последнее обусловлено не выбором, а банальным отсутствием рабочих рук.

В отличии от OpenBSD, в FreeBSD любой человек, систематически приносящий пользу проекту, будет чувствовать себя комфортно. Грубость или 'наезды' отторгаются публикой очень эффективно, с другой стороны велика вероятность получить полезный ответ на правильно поставленный технический вопрос (здесь я говорю не о support-вопросах, а о попытках писать код).

Про NetBSD я не могу сказать ничего. Я краем уха слышал о некоторых интересных технических вещах в NetBSD, но код не читал, в списки рассылки не заглядывал. Когда-то с интересом прочел статью про их UVM, но это все.

Очень позитивно вы написали о FreeBSD Project. Но я хорошо знаю, что там тоже бывают бурные конфликты внутри команды, в связи с этим можете привести какой-то пример конфликта и как он “разруливался” Core Team?

Нет, это строго приватная информация.

Хорошо, позвольте тогда уже мне добавить немного “перца”. Разрешите процитировать вам часть интервью с вашим коллегой, также бывшим членом первого состава FreeBSD Core Team, — ache@:

Участвовать во FreeBSD было интереснее всего после старта проекта, когда это был своего рода междусобойчик. Теперь проект вырос в целую структуру с бюрократическим аппаратом, где сидят люди, не то что не умеющие вникнуть в код, а попросту не желающие этого.

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

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

Я считаю, что это мнение ache@ совершенно ничем не подкреплено; это просто его мнение, которое я в принципе не разделяю. Возможно, он просто не понимает текущей модели разработки, при которой основной репозиторий проекта — не средство разработки, а место для публикации работы. Предполагается, что код в основной ветке, не говоря уже о ветке STABLE, всегда рабочий. Настоящая разработка должна вестись только в приватных репозиториях.

Так вот @ache широко известен как раз тем, что слишком много раз “ломал дерево”, за что, по моему мнению, вполне справедливо и получал от лидеров проекта, отсюда и такая острая личная реакция.

Кстати о вас: чем именно вы занимаетесь в FreeBSD, какая ваша специализация там?

Я поддерживаю код VFS, участвую в текущих переделках VM, какое-то время очень активно исправлял/переписывал/добавлял недостающий KPI в devfs.

Кроме того, мне нравится работать с инфраструктурным кодом, я сильно переписал код обработки syscall’ ов, выделив машинно-независимую часть. Добавил возможность использования XMM-регистров в ядре для i386/amd64. Я реализовал поддержку Wine для amd64 (сегменты). Я основной автор новой функциональности в rtld в последнее время. Кроме того, я портировал libunwind на FreeBSD.

Это то, что я помню за последнее время. Если суммировать по направлениям, то получится, что область моих основных интересов:

  • файловые системы
  • VM
  • архитектуры x86 (i386, amd64)
  • динамический загрузчик.

Интересно, сколько вы в среднем тратите времени на программирование в день?

8 часов на работе. Ещё от 0.5 до 2 часов на FreeBSD уже после работы. В выходные и нерабочие дни примерно часов по 5.

И ещё вопрос как к программисту. Какая из задач, из тех, что вы делали для FreeBSD, была самой сложной для вас?

Багфиксы в VFS/UFS/devfs были самыми сложными вещами, которыми я занимался вообще в жизни. Я очень благодарен коллеге Tor Egge (tegge@), который потратил на меня огромное количество электронов, объясняя мне слишком многие неочевидные вещи в нашей VFS.

Хочу также упомянуть здесь, что Peter Holm (pho@) был и остается совершенно уникальным участником проекта, который обеспечивает педантичное тестирование всех подобных, потенциально опасных для всей системы изменений в VFS.

Что можете сказать о характеристиках нового менеджера памяти jemalloc, специально оптимизированном для параллельных вычислений. Как он вам нравится, какие его узкие места?

Он уже работает. Его код я не читал (по крайней мере до такой степени, чтобы высказывать о нем свое детальное мнение).

В Unix’ ах давно бы уже нужно стандартизировать какой-нибудь более “фичастый аллокатор”, который бы умел работать с приватными кучами и настраивать политики обращения с многопоточностью, получения и возвращения памяти в систему. Что-то наподобие dlmalloc’а по API.

И если мы уже заговорили про новшества, скажите, насколько завершена реализация долгожданного VIMAGE? VIMAGE – это какая-то продвинутая разновидность Jail?

VIMAGE — никак не связан с Jail. Jail по сути своей представляет способ resource compartment  (я не хочу тратить время на придумывание хорошего русского перевода). Т.е. никакой виртуализации в jail’ах вообще нет, чем они и ценны, т.к. накладные расходы при использовании jail’ов отсутствуют в принципе.

Основная же идея VIMAGE заключается в предоставлении каждой паре контейнер/подсистема ядра — своей копии данных ядра. Это уже больше похоже на виртуализацию в прямом смысле этого слова.

Я не очень слежу за этим проектом, как я понимаю, сетевая часть в основном закончена, хотя ещё не все крупные изменения “закоммичены” в svn. Насколько мне известно, некоторые другие подсистемы тоже уже адаптированы, так я знаю о System V IPC.

Ещё один технический вопрос. Знаю, что на OpenKyiv 2008 вы активно дискутировали с выступавшим там Михаилом Белопуховым (проект OpenBSD) о том, почему сейчас разработчики FreeBSD уходят от polling’а сетевых карт.

Итак, многим будет интересно узнать, в самом деле, почему такая известная техника как polling сейчас уже не перспективна, можно пояснить нашим читателям?

Текущая архитектура FreeBSD обрабатывает прерывания от устройств, и, в частности, сетевых карт, в специально запущенных для этого нитках. Если нить блокирована, единственное действие кода обработки прерывания — разблокировка этой нити. Для иллюстрации, вот кусочек вывода ps auxww на машине, с которой я это пишу:

root 218 0.0 0.0 0 8 ? WL 9:46PM 0:00.79 [irq20: rl0 fwohci0] root 220 0.0 0.0 0 8 ? WL 9:46PM 0:05.69 [irq22: skc0 ath0]

Далее, почти все современные сетевые адаптеры для 1000baseTx имеет feature называемую «interrupt coalescing», задерживающую вызов прерывания до заполнения Rx-кольца адаптера.

Третье обстоятельство — это так называемый direct dispatch. Если вы помните, упомянутый вами докладчик OpenBSD говорил на конференции об отдельном процессе netisr, предназначенном для обработки Rx-фреймов. Причина существования netisr - тот факт, что прерывание от Rx может прийти в момент, когда процессор уже выполняет сетевой код, и полная обработка пакета из interrupt handler привела бы к рекурсивному входу в сетевой стек. Альтернативой было бы поднять приоритет процессора до splnet (в терминах OpenBSD), но это бы означало, что прерывания будут блокированы на длительное время.

Но, поскольку FreeBSD выполняет настоящий обработчик прерывания в отдельной нитке, то netisr не нужен. Вся обработка входящего пакета может произойти без дорогостоящего переключения контекста.

Это и есть direct dispatch. Direct dispatch включен по умолчанию на FreeBSD >= 7: net.isr.direct: 1

Нетрудно видеть, что комбинация всех трех упомянутых архитектурных элементов эквивалентна polling’у и даже эффективнее его. Конечно, пока ещё есть старые сетевые карты, для которых polling выигрывает, но тенденция развития современных сетевых карт состоит в том, что direct dispatch уже не хуже и при этом более естественен, чем polling.


Вторую, заключительную часть интервью с Константином читайте в следующем посте

Игорь Савчук ©  "Системный администратор” (samag.ru), 2011

twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru rutvit.ru friendfeed.com blogger.com liveinternet.ru livejournal.ru memori.ru google.com bobrdobr.ru yandex.ru del.icio.us

Подписка на обновления блога → через RSS, на e-mail, через Twitter
Теги: , , , , , ,
Эта запись опубликована: Понедельник, 29 августа 2011 в рубрике Unix'овоеИнтервью.

3 комментария

Следите за комментариями по RSS
  1. Спасибо! Пожалуйста делайте побольше подобных интервью!

  2. спасибо

    Спасиба! и константину тоже спасибо

  3. Спасибо за интересное интервью.

Оставьте комментарий!

Не регистрировать/аноним

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Зарегистрировать/комментатор

Для регистрации укажите свой действующий email и пароль. Связка email-пароль позволяет вам комментировать и редактировать данные в вашем персональном аккаунте, такие как адрес сайта, ник и т.п. (Письмо с активацией придет в ящик, указанный при регистрации)

(обязательно)


⇑ Наверх
⇓ Вниз