С момента выпуска стабильной версии FreeBSD 9.0 прошло меньше двух лет, а команда разработчиков уже готова представить следующий релиз своей ОС под красивым номером 10. Новая FreeBSD теперь компилируется с помощью Clang, поставляется в комплекте с DNS-сервером Unbound, имеет собственный гипервизор, аналогичный KVM, умеет работать со сжатыми томами ZFS и включает в себя еще несколько десятков интересных изменений.

Clang вместо GCC

Летом 2007 года фонд свободного ПО опубликовал окончательную редакцию лицензии GPLv3, на которую в скором времени должны были перейти все крупнейшие свободные проекты, координируемые фондом. Сообщество FreeBSD изначально не приняло эту лицензию, поскольку она еще более ограничивала реальную свободу ПО, чем GPLv2, а впоследствии отказалось от включения любого GPLv3-софта в базовую поставку ОС, как противоречащего лицензии BSD.

Из-за полного запрета в тексте GPLv3 так называемой тивоизации, то есть возможности создания железа на базе открытого ПО без возможности установки на него модификаций этого же ПО, разработчикам FreeBSD пришлось полностью отказаться от перехода на новые версии GCC и остаться на GCC 4.2.1. Включение в состав более поздних версий, распространяемых под GPLv3, автоматически создало бы проблемы многим хардварным компаниям, выпускающим железо на базе FreeBSD.

Так как поддерживать устаревшую версию GCC бесконечно нельзя, FreeBSD требовался идеологически правильный компилятор, и открытие исходных текстов Clang в том же году оказалось как нельзя кстати. В отличие от GCC, Clang распространялся под лицензией BSD и, по сути, компилятором не являлся. Это был всего лишь сырой фронтенд, который генерировал промежуточный код LLVM и передавал его последнему для оптимизации и компиляции.

Неспешно, но безостановочно Clang доводился до состояния полноценного компилятора, и к началу 2009 года всю FreeBSD, включая ядро и пользовательские утилиты, уже можно было скомпилировать без помощи GCC. В середине 2010 года Clang становится частью FreeBSD, но пока только в качестве альтернативы GCC. В 2012 году переход на Clang завершается, и он становится компилятором по умолчанию.

Для рядового пользователя такой переход, конечно, пройдет практически незамеченным:make buildworld будет работать так, как и раньше, порты будут собираться без всяких проблем, и даже такие команды, как gcc helloworld.c, будут работать без вопросов благодаря симлинкам. Зато настоящую выгоду это принесет разработчикам, многие из которых и раньше использовали Clang для прогона кода на предмет наличия ошибок (о которых Clang информирует гораздо подробнее GCC), но теперь этот инструмент будет использоваться по умолчанию.

Отключить Clang и перейти на GCC 4.2.1, который еще остается в комплекте FreeBSD, можно, добавив опции WITHGCC и WITHGNUCXX в файл /etc/src.conf.

Clang производит компиляцию быстрее GCC и использует при этом меньше памяти
Clang производит компиляцию быстрее GCC и использует при этом меньше памяти

BHyVe или KVM под лицензией BSD

Благодаря следованию идее тотальной свободы, гарантированной лицензией BSD и сведенной в одну знаменитую цитату «Делайте с кодом что хотите, но только не говорите, что он написан вами», фонд FreeBSD за время своего существования успел обзавестись многими покровителями. В их числе такие мастодонты, как Apple, NetApp и Juniper Networks, которые регулярно открывают код своих наработок на базе FreeBSD и смежных технологий (Clang, например, детище Apple). Очередной такой наработкой стал гипервизор BHyVe, созданный NetApp для использования в своем оборудовании. Его код был открыт в 2011 году и практически сразу включен в состав FreeBSD.

По своей сути BHyVe — это созданный с нуля и выпущенный под лицензией BSD аналог Linux-гипервизора KVM, обеспечивающий возможность запуска сторонних операционных систем в виртуальном окружении поверх FreeBSD. Как и KVM, а также почти любые другие гипервизоры, BHyVe базируется на технологиях виртуализации Intel VT-x и AMD-V, а также VirtIO, которая позволяет пробросить реальные устройства из хост-системы в виртуальное окружение без необходимости использования развитого эмулятора, такого как QEMU; для запуска виртуальных окружений используется минималистичный эмулятор, который вместе с модулем ядра и сопутствующими библиотеками имеет размер не более 250 Кб.

Архитектура BHyVe
Архитектура BHyVe

Согласно тестам, BHyVe показывает отличную производительность и уже пригоден для запуска виртуальных окружений в продакшне. Для желающих опробовать гипервизор в работе предлагаю краткую инструкцию: подгружаем модули vmm и if_tap, создаем виртуальный интерфейс командой ifconfig tap0 create, скачиваем скрипт vmrun.sh и запускаем.

Замеры скорости сборки системы в виртуальном окружении и на голом железе
Замеры скорости сборки системы в виртуальном окружении и на голом железе

VPS или Jail на стероидах

Второй технологией, напрямую связанной с виртуализацией, которая, скорее всего, войдет в состав FreeBSD 10, будет VPS. Это так называемая виртуализация уровня ОС, которая должна прийти на смену устаревшей Jail. Сам Jail, наверное, никуда не исчезнет, но из-за массы технических недостатков, исправление которых затянулось на многие годы, он уже не актуален и не пользуется популярностью среди администраторов.

Что же такое VPS? Это средство запустить виртуальное окружение, не используя эмуляцию как таковую. Поверх одного ядра запускается несколько окружений исполнения, и операционная система как бы разделяется на несколько. Принцип примерно тот же, что и у Jail и даже chroot, с тем исключением, что вместо изоляции виртуального окружения от основной системы используется мультиплексирование ресурсов ОС. Другими словами, гостевая система не отрезается от основной с помощью разных хаков в стиле «если процесс работает внутри Jail, то он не видит списка процессов», а получает доступ к своим собственным копиям ресурсов, включая тот же список процессов.

Все это похоже на линуксовый OpenVZ с его выделенными пространствами имен (namespace) для каждого окружения, но в исполнении для FreeBSD. Каждое виртуальное окружение имеет собственные список процессов, корень файловой системы, разделяемые ресурсы, сетевой стек (используется технология VNET/VIMAGE) и собственные версии аппаратно зависимых системных вызовов. Так, команда reboot, выполненная внутри виртуального окружения, действительно выполнит перезагрузку, но не всей машины, а только виртуального окружения.

VPS уже имеет поддержку снапшотов и заморозки виртуальных окружений, а также возможность Live-миграции окружений с одной машины на другую без остановки работы процессов и без разрыва установленных сетевых соединений. Однако средств лимитирования ресурсов у VPS пока нет, поэтому ограничить окружение в процессорных ресурсах или объемах памяти не получится.

Пример конфига VPS
Пример конфига VPS

Хранение данных

При подготовке десятой версии много внимания было уделено системам хранения данных и файловым системам. Наиболее важным новшеством стал написанный с нуля стек iSCSI, для реализации которого фонд FreeBSD нанял фултайм-разработчика. Новый стек производительнее, надежнее и гораздо удобнее в управлении, чем прежняя реализация протокола, а главное, включает в себя не только инициатор, но и iSCSI target. Другими словами, FreeBSD теперь может выступать в роли как клиента, так и сервера iSCSI, показывающего превосходную производительность. Новая реализация совместима со старым форматом конфигов, поэтому переход будет практически безболезненным.

Файловая система ZFS также была доработана. Из illumos (форк OpenSolaris) была портирована реализация функции NOP-write, которая отменяет перезапись блока ФС в том случае, если его контрольная сумма совпадает с уже имеющимся в ФС. Это позволяет увеличить производительность и сохранить пространство при использовании снапшотов. Также была интегрирована поддержка сверхбыстрого алгоритма сжатия данных LZ4, который позволил поднять производительность работы файловой системы с активированным сжатием на 50–80% в сравнении со стандартным алгоритмом LZJB.

Кроме этого, реализация ZFS во FreeBSD первой среди всех ОС обзавелась поддержкой операции TRIM для твердотельных накопителей. Напомню, что в отличие от жестких дисков SSD-накопители требуют явного очищения своих ячеек перед записью новых данных; это приводит к провалам производительности в том случае, когда заведомо чистых ячеек не остается и контроллеру приходится искать ячейки, ранее занятые данными, и очищать их. Эта операция называется TRIM, и по-хорошему она должна выполняться во время простоя накопителя, а не в момент записи. Теперь ZFS поступает именно так; низкоприоритетный процесс просыпается в моменты простоя и запускает операцию TRIM в отношении уже свободных блоков памяти.

ZFS и UFS теперь поддерживают увеличение размера в режиме онлайн. Это значит, что юзер может в любой момент увеличить размер раздела с файловой системой, а затем увеличить размер самой ФС. И все это на живой системе, без размонтирования.

Фреймворк FUSE, позволяющий создавать работающие в пространстве пользователя файловые системы, теперь включен в состав ядра, поэтому необходимости в установке порта fuse-kmod теперь нет. Также в ядро была интегрирована обновленная реализация файловой системы UDF из NetBSD (о том, зачем и кому она нужна, не сообщается).

Сетевая подсистема

Переработке подверглись также многие сетевые подсистемы ОС. Был существенно доработан стек 802.11n, добавлена поддержка чипов AR93xx, AR94xx, AR95xx, обновлены драйверы чипов AR9280, AR9285 и AR9287. Протокол 802.11n теперь поддерживается в режиме adhoc (децентрализованная сеть), но только теми сетевыми картами, которые умеют работать в таком режиме (в основном это карты Atheros). Поддерживается агрегация линков, обработка BAR TX, программная повторная отправка кадров и энергосберегающие режимы.

Во FreeBSD 10 должна появиться начальная реализация протокола MPTCP (Multipath TCP), которая позволяет организовать доставку TCP-пакетов сразу по нескольким маршрутам, например через двух разных провайдеров. В будущем MPTCP можно будет использовать для увеличения надежности передачи данных и расширения канала за счет виртуального объединения двух каналов в один. Например, одно из возможных применений MPTCP найдет в мобильных устройствах, благодаря чему удастся сделать переход между сетями абсолютно бесшовным. Поддержка MPTCP уже есть в Linux и Apple iOS 7.

Еще одним важным новшеством сетевой подсистемы FreeBSD 10 станет технология NetMap (на самом деле уже доступна в 9.1), позволяющая достичь теоретических скоростей передачи пакетов современными 10-гигабитными сетевыми адаптерами даже на бюджетной машине. NetMap работает в ядре и позволяет передавать пакеты напрямую от приложения к сетевой карте в обход внутриядерных механизмов обработки пакетов. NetMap способен осуществлять отправку одного пакета всего за 60–65 циклов процессора, что позволяет одним ядром с частотой 900 МГц генерировать поток в 14,8 Mpps (миллионов пакетов в секунду), которого достаточно для того, чтобы достичь теоретической скорости передачи на 10-гигабитном канале.

К другим интересным изменениям в сетевой подсистеме можно отнести интеграцию в ядро кода клиента NFSv4.1 с поддержкой pNFS и избавление кода брандмауэра pf от глобальной блокировки, которая не позволяла ему эффективно работать на многопроцессорных системах.

Сравнение производительности NetMap с Linux и FreeBSD
Сравнение производительности NetMap с Linux и FreeBSD

Улучшения в поддержке ARM

Поддержка ARM всегда была одной из самых слабых сторон FreeBSD. Современные SoC не поддерживались, расширенные процессорные инструкции не задействовались, в целом код был неэффективным и использовался в основном энтузиастами для запуска системы на различных одноплатных компьютерах. Учитывая ориентированность FreeBSD на серверы и различные железки на базе архитектуры x86, это была вполне нормальная ситуация.

Однако время идет, и на смену железкам на x86 приходят высокопроизводительные и энергоэффективные решения на базе ARM, включая серверы общего назначения, NAS и роутеры. Поэтому сейчас разработчикам FreeBSD приходится, так сказать, наверстывать упущенное. Только в FreeBSD 10 поддержка архитектуры ARM впервые стала полноценной. Низкоуровневая часть кода была существенно переработана и расширена, появилась полноценная поддержка многоядерных процессоров и многопоточности, реализована поддержка расширенных инструкций VFP/Neon и технологии Superpages (страницы памяти расширенного размера), которая необходима для эффективной работы FreeBSD на ARM-серверах.

Появилась поддержка более современных SoC, включая Marvell MV78x60, TI OMAP4 и AM335x (используются в Pandaboard и Beaglebone), Allwinner A10 (Cubieboard и Hackberry), LPC32x0 и начальная поддержка NVIDIA Tegra 2. Наконец появилась полноценная поддержка Raspberry Pi. О том, как собрать FreeBSD для Rpi, можно прочитать здесь.

Bsdconfig

Начиная с девятой версии, FreeBSD была переведена на использование инсталлятора bsdinstall, пришедшего на смену неуклюжему sysinstall, который сами разработчики называли «запутанным куском кода, который никто не хочет поддерживать». Новый инсталлятор отличался простотой, интеллектуальностью, модульностью и расширяемостью, однако очень сильно уступал sysinstall в плане постинсталляционных настроек. Этот недочет исправили к выходу десятой версии, включив в комплект утилиту bsdconfig.

Новый конфигуратор, как и установщик, написан на шелл, обладает модульной структурой и может быть использован обособленно или в составе другого приложения (в данном случае bsdinstall). Уже сейчас bsconfig позволяет настраивать следующие сущности:

  • управлять настройками /etc/rc.conf (используется утилита sysrc);
  • создавать аккаунты и группы пользователей в системе и управлять ими;
  • конфигурировать часовые пояса (используется tzdialog);
  • конфигурировать сетевые интерфейсы, указывать параметры хоста, используемые DNS-серверы и шлюзы по умолчанию;
  • создавать и редактировать дисковые разделы;
  • настраивать консоль (шрифты, кодировки, локаль, хранитель экрана и прочее);
  • управлять запуском сервисов.
Bsdconfig собственной персоной
Bsdconfig собственной персоной

Другое

Из менее заметных, но значимых изменений можно назвать замену DNS-сервера BIND и сопутствующих утилит на кеширующий рекурсивный сервер Unbound и утилиты из комплекта LDNS. О полноценной замене здесь, конечно, речи не идет, а всего лишь выполняется требование иметь в базовой поставке ОС кеширующий DNS-сервер и валидатор DNSSEC. BIND, используемый для этой цели десятилетиями, успел превратиться в дырявого неповоротливого монстра, который уже просто неприлично включать в базовый комплект (BIND 10 требует, например, SQLite 3 и Python 3), а вот компактный и производительный Unbound выполняет эту работу на отлично. Те же, кому нужен полноценный DNS-сервер, могут установить BIND 10 из портов.

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

Во FreeBSD 10 будут включены новые инструменты установки и управления пакетами, названные pkgng. В отличие от устаревших утилит pkg_*, которые были всего лишь инструментом для выкачивания пакетов с FTP-сервера и разворачивания их в систему, pkgng представляет собой полноценный современный менеджер пакетов в стиле apt-get. Он работает с сетевыми репозиториями, учитывает зависимости и умеет правильно обновлять пакеты, а также удалять установленные как зависимости пакеты при удалении приложения. Со стороны пользователя работа с новым менеджером пакетов будет выглядеть примерно так:

# pkg update
# pkg install gimp
# pkg search firefox

INFO


Слово тивоизация происходит от названия выпущенного в 1999 году видеоплеера TiVo, который работал на ОС Linux, но при этом не позволял никоим образом изменить свою прошивку.

Кроме правильно лицензированного компилятора, в FreeBSD также появились собственные версии утилит sort и patch.

В FreeBSD 10.0 реализована поддержка USB Audio 2.0.


WWW


Новая, очень быстрая система поиска по исходным текстам FreeBSD, OpenBSD, NetBSD и DragonFlyBSD: bxr.su

Вариантные символические ссылки

Из DragonFlyBSD во FreeBSD наконец портировали реализацию вариантных символических ссылок (varsym). По своей сути varsym — это та же символическая ссылка, в путях которой могут использоваться переменные, при изменении их значений автоматически меняется и сам путь. Основное преимущество таких ссылок в возможности их изменения пачками с помощью одной команды.

Пример изменения пути, записанного в вариантной символической ссылке
Пример изменения пути, записанного в вариантной символической ссылке

Переключение видеорежимов на уровне ядра

При подготовке FreeBSD 10 была проведена работа по интеграции KMS (переключение видеорежимов на уровне ядра) в драйверы для карт AMD, в дополнение к поддержке KVM в драйверах для Intel GPU, появившейся в 9.1. На данный момент технология KMS не имеет практически никакого значения для FreeBSD, однако она является одним из кирпичиков, используемых для построения графических систем будущего. Тот же Wayland, например, для своей работы требует поддержку KMS в ядре.

Выводы

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

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    7 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии