[an error occurred while processing this directive]
 
vremont.by
республиканская сеть компьютерных клиник

ремонт ноутбуков в вашем городе


Большие и Страшные Демоны: интервью с ведущим разработчиком FreeBSD Константином Белоусовым

Накануне приближающегося релиза FreeBSD 9.0, где ожидается как обилие новшеств, так и общая заметная стабилизация кодовой базы, мы решили взять интервью у одного из разработчиков этой известной серверной ОС, чтобы поговорить о трендах и новшествах в жизни FreeBSD. Тем более, что для этого, признаемся честно, был и еще один важный повод: впервые в высший управляющий состав по разработке этой знаменитой ОС – FreeBSD Core Team - избран наш бывший соотечественник по exUSSR, Константин Белоусов. Сегодня мы поговорим с ним как об этой замечательной системе, так и о его личном пути в мир системного программирования и к вершинам иерархии в 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-коммитер @achi также говорил мне, что в момент личного выбора “куда расти дальше”, код 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.

Сейчас традиционная парочка для сравнения (для т.н. holy war) - это FreeBSD и Linux, можно ли услышать ваше экспертное мнение, какие сейчас у них ГЛАВНЫЕ технологические отличия, если оставить в покое разные лицензии и организационные моменты разработки?

Давайте я на этот вопрос отвечу так - понятия не имею. Мне Linux СОВЕРШЕННО не интересен.

О’кей, тогда давайте это спросим по-другому. Какие, по вашему мнению, сейчас самые слабые стороны/места в FreeBSD 8? Меня интересуют именно технические особенности этой ОС. Если можно, перечислите, по возможности, откровенно.

. X-ы. Сейчас X-ы крайне активно меняются (рука не поднимается написать "улучшаются"), но это разработка крайне Linux-центрична. В какой-то момент мы должны спортировать новые X-ы;

. Journaling в UFS еще слишком сырой;
. usermode tools у нас уделяется гораздо меньше внимания, чем ядру;
. в базовой системе старый gdb, а релизы gnu gdb не понимают очень многих вещей, специфичных для FreeBSD;
. драйверы для нового consumer-level железа появляются поздно;
. многие писатели приложений в последнее время считают единственной Unix-like платформой - Linux (см. выше про X), отсюда частые проблемы с приложениями.

И еще, сюда же: у FreeBSD нет поддержки NUMA, это правда? Если нет - причины?

Нет, в том смысле, что нет специального allocator’a, который бы пытался активно угадывать будущее. В HEAD появился примитивный NUMA-aware allocator, который, насколько я понимаю, пытается выделить страницу на той ноде, на которой выполняется нитка. К сожалению, от него больше вреда, чем пользы.

Что касается NUMA вообще, то правильно подобранный benchmark может показать, по-моему, 2-кратное превосходство NUMA-aware планировщика и allocator’a. В реальных же нагрузках, на обычных x86 SMP машинах, поверьте, вся разница теряется в погрешностях измерений.

Хорошо, теперь давайте сыграем наоборот. В чем сейчас FreeBSD 8 технологически и объективно очень сильна по сравнению с другими ОС?

. "Ядро" в очень хорошем состоянии, глубоко отлажено и содержит массу очень правильных и продвинутых архитектурных решений. Как частные примеры, можно упомянуть interrupt threads, крайне малое количество спинлоков в системе (это все предмет предстоящих RT-патчей для Linux’a, по крайней мере, я об этом читал).
. Наша VM по-прежнему очень понятна и реализует эффективные алгоритмы.
. IPv6 стек в FreeBSD считается одним из лучших, например, из совсем недавнего см. http://isoc.org/wp/newsletter/?p=2522 – кстати, это один из наших самых активных разработчиков.
. Virtual Access Points предоставляют, насколько мне известно, уникальную возможность запускать несколько виртуальных точек доступа на одной Wi-Fi-карточке.
. Совершенно прозрачная реализация superpages, не требующая от приложений никаких усилий для их использования, в отличие от Linux’а или Solaris’а.
. ^T на терминале (почти шутка, этого мне очень не хватало в других Unix’ах).
. Jail’ы “из коробки”. Не нужно ставить какой-то VPS (для Linux’а). Зоны в Solaris’e уже переросли наши Jail’ы, но после того, как VIMAGE все- таки окончательно закончат, это будет эквивалентно.
. Для кого-то важным будет наличие DTrace, ZFS, аудита или MAC’а.

Ко всему этому хочу добавить: очень важным качеством FreeBSD для меня лично является очень понятный и во всем логичный код системы - она не “черный ящик”.

Насколько эффективно использует текущая FreeBSD 8 современные многоядерные процессоры, по вашему мнению?

Вопрос совершенно некорректный. Масштабируемость FreeBSD на MP-системах, как и любой современной SMP-aware системы, зависит лишь от нагрузки. На таких нагрузках, как make -j N buildworld, рост линейный с ростом N до числа процессоров.

Известное проблемное место у FreeBSD - одновременные чтения и записи из разных ниток в один файл. Кроме того, у подсистемы VM появляются проблемы с contention при некоторых нагрузках и числе процессоров в районе 32.

Как профессиональный системный программист драйверов для Solaris, копались ли вы во внутренностях OpenSolaris? Что можно сказать про эту ОС с технической точки зрения?

Нет, я почти не читал код Solaris’а.

Но с технической точки зрения система очень интересная. FreeBSD, помимо импорта zfs и dtrace, использовала некоторые важные идеи из Solaris’a. Как пример, можно упомянуть interrupt threads и turnstiles. Но тут заимствование было только на уровне идей, а не кода. В качестве источника для этого использовалась известная книга "Solaris Internals".

Solaris основан на коде System V Release 4, что делает его фактически reference implementation для ELF и runtime linker.

Да, я знаю, Solaris – это ОС, которую вы очень уважаете, но она ныне попала в “кровожадные руки” Oracle. Как, по вашему мнению, будут развиваться события далее, какая судьба ждет Solaris? Выступите в роли предсказателя, пожалуйста :).

Понятия не имею. Возможно, он окончательно откатится в ту же нишу, в которой сейчас прозябают HP-UX и AIX. Другими словами, он будет безразличен большинству.

Все-таки, что вы можете сказать новичкам - годится ли FreeBSD как десктопная система в настоящий момент... Все-таки превалирует то мнение, что FreeBSD - это более серверная ОС, не годная для десктопа.

Разъясните мне разницу между "десктопной" и "серверной" ОС, иначе я просто не смогу ответить на этот вопрос... На моем лэптопе и домашней рабочей workstation стоит FreeBSD (stable/8 latest). Я использую машины для почты, браузинга web’а, моих репозиториев кода, компиляции и отладки (ядро - в QEMU), просмотра фильмов, музыки, IRC, чтения документации и иногда книжек и т.д. Чем FreeBSD непригодна для всего перечисленного?

Что конкретно можно пожелать людям, мечтающим стать настоящими системными программистами или продвинутыми администраторами в FreeBSD? Какие есть вспомогательные источники информации для этого старта?

Сначала нужно уверенно освоить базовое администрирование Unix, научиться программировать на C, освоить API Unix’а и работу с CVS/SVN. Потом нужно разобраться с архитектурой ядра FreeBSD и научиться непосредственно читать сам код.

Что касается вспомогательной информации… Очень много полезного для новичка есть в системных man’ах, кроме того, очень давно в начале своего пути я прочитал книжку Кернигана и Пайка "Unix Programming Environment". Именно после нее мне начала нравиться система и у меня возникло желание разобраться с ней лучше. Нужно также помнить, что у проекта для этого случая есть свой FreeBSD Developers' Handbook.

Более общий вопрос. Какие технологии из мира open source вы считаете по-настоящему перспективными и думаете, что за ними будущее, можете их перечислить? Какие проекты лично вас впечатляют? Например, сейчас очень много восхищений и эпитетов можно услышать про ZFS...

ZFS я не пользуюсь. Мне тяжело что-либо сказать о “новых технологиях”, я человек сравнительно консервативный и ничем новым в последние 10 лет пользоваться не начал, разве что nginx’ом, и совсем недавно стал использовать Cassandra. Cassandra действительно произвела на меня большое впечатление.

Скажите, работа в FreeBSD на таком высоком посту - это полностью бесплатный труд, или все же есть гранты, или еще какая-то система материальной стимуляции вашей работы в Core Team?

Полностью бесплатный, в том смысле, что я не получаю никаких материальных поступлений от проекта. Скорее, я сам трачу свои средства на Интернет, нормальное железо для себя, свое время и т.д. С другой стороны, статус в проекте производит впечатление на работодателя.

Конечно, мне бы хотелось заниматься только FreeBSD, и иметь за это денег не меньше, чем я сейчас зарабатываю, но это нереально, скорее всего…

Как вы относитесь к современным высокоуровневым языкам программирования, типа Java или C#? Какие ваши предпочтения как программиста вне проекта FreeBSD?

Нормально отношусь. Я всегда предпочитаю кодировать usermode-код на языках достаточно высокого уровня, то есть по крайней предоставляющие встроенные средства работы с развитыми структурами данных, type safety и GC.

Если бы была возможность, то на работе я бы использовал Common Lisp. Пару раз так и делал. Если нет, то Perl, Python (раньше любил Python, в последнее время больше Perl), Java.

Игорь Савчук

© Компьютерная газета :: главная страница