Обзор FreeBSD 7.0

7 Июл
2008

Популярность Linux фактически затмила другие альтернативы Windows. Но на серверном фронте у админов спросом пользуется именно семейство *BSD систем. Развитие FreeBSD датировано началом 1993 года. За основу были взяты исходные тексты 386BSD — одной из систем разработанных в недрах Калифорнийского Университета Беркли (Berkeley Software Distribution, отсюда и приставка BSD). 

Хотя для соблюдения лицензионной чистоты большая его часть была переделана к версии 2.0. Целью проекта является предоставление программного обеспечения, которое может быть использовано для любых целей и без дополнительных ограничений. Это в том числе и гарантируется применяемой BSD лицензией, которая насчитывает всего 3 пункта и разрешает использование исходного кода системы без его обязательной публикации (как в GNU GPL). FreeBSD в отличие от Linux разрабатывается как целостная операционная система то есть все начиная от исходного кода ядра, драйверов устройств и основных программ пользовательского уровня (я не имею ввиду среды вроде KDE, речь о базовых программах), содержится в одном дереве системы управления версиями (CVS) и поддерживается одной группой разработчиков. В Linux это выглядит несколько иначе, так как код ядра, драйвера устройств и прочее поддерживается разными группами, а в единое целое их собирают уже разработчики дистрибутивов, добавляя свои особенности.Не смотря на изначальное ориентировку на работу в командной строке, FreeBSD является самой современной системой. И хотя эта система больше популярна на серверах, FreeBSD нормально чувствует себя и на рабочих столах. Но отсутствие понятных простому пользователю инструментов установки и настройки привело к появлению отдельных проектов, о которых мы уже говорили: DesktopBSD, PC-BSD, FreeSBIE и других. Но в портах (sysutils/desktopbsd-tools) наконец появились графические инструменты разрабатываемые проектом DesktopBSD, заметно упрощающие настройку этой системы. Помимо программ включенных в базовую поставку, дополнительные утилиты можно установить при помощи прекомпилированных пакетов — пакаджей или системы портов. Последние позволяют буквально одной командой скачать, скомпилировать и установить программу, а сегодняшнее дерево портов насчитывает около 18 тысяч приложений. Плюс, не нужно забывать о бинарной совместимости с Linux.

Параллельно существует две ветки FreeBSD — CURRENT и STABLE. Первая относится к нестабильной, тестовой. В ней обкатывается новый экспериментальный код и предназначена больше для энтузиастов и опытных пользователей. После тестирования новинки попадают в ветку STABLE, которая тем не менее также считается веткой для разработчиков. Рабочие серверы рекомендуется переводить на STABLE, только после проверки работоспособности системы. На основе STABLE периодически появляются тщательно протестированные релизы RELEASE. Итак, мы сегодня имеем релиз 7.0, а сама 7-ая ветка из CURRENT перешла в STABLE.

Разработчики и мы с ними, шли к этому событию два с половиной года. Изменений в новом релизе очень много, затрагивают они буквально все — ядро системы, сетевые протоколы, файловую систему и прочее. Простое перечисление всех новшеств занимает несколько экранов монитора (www.opennet.ru/opennews/art.shtml?num=14429). Некоторые из них были доступны уже в 6.3, перебравшись из 7_CURRENT. Сетевые возможности FreeBSD претерпели весьма глобальные изменения, что вообщем то не удивительно, так как это направление всегда во FreeBSD развивалось очень активно. Многие подсистемы были переписаны с учетом работы в мультипроцессорной системе. Поэтому разберем только самые интересные.

Что нового?

В новой версии полностью обновлено прикладное программное обеспечение: KDE 3.5.8, GNOME 2.20.2, X.Org 7.3, GCC 4.2.1, BIND 9.4.2, Sendmail 8.14.2, OpenSSL 0.9.8e и многие другие.

Список архитектур не изменился AMD64, i386, ia64, pc98 и PowerPC. Но сегодня ведутся работы по портированию на ARM поэтому возможно когда нибуть увидим FreeBSD на встроенных устройствах и Sun Niagara (UltraSparc T1). Скачать продукт можно как через Bittorrent (torrents.freebsd.org:8080), так и через традиционный FTP (ftp://ftp.freebsd.org/pub/FreeBSD). Состав образов вообщем не изменился: 1 — загрузочный, остальные с пакетами, плюс отдельный образ с документацией.

Процесс установки глобальных изменений не претерпел, все тот же старый знакомый sysinstall.

sysinstall

Хотя признаться ожидал увидеть новый инсталлятор finstall (wiki.freebsd.org/finstall) имеющий более дружественный графический интерфейс.

Finstall

Finstall построен по модульному принципу, в котором front-end и back-end разделены, написан на языке Python (для GUI использован модуль PyGTK). Это открывает перед разработчиками широкие возможности по его модификации и наращиванию функций. Пока его обещают включить в стандартную поставку, начиная с версии 7.1 в качестве второго дополнительного инсталлятора. За исключением архитектур, не поддерживаемых finstall (все кроме i386 и amd64) в которой sysinstall останется единственным средством.

Разработчики не могли не учесть все возрастающую популярность беспроводных сетей. Поэтому в этом направлении была проделана довольно большая работа, в результате чего, система получила полную поддержку семейства стандартов 802.11 (Wi-Fi и WiMax).

В новой версии FreeBSD усовершенствована подсистема Linuxulator, которая позволяет запускать бинарные файлы Linux без модификации и без потерь на трансляцию системных вызовов одной ОС в другую. Осуществлен переход на Linux ядро 2.6.16. По умолчанию последняя возможность не включена по умолчанию, так как является экспериментальной и используется эммуляция 2.4. Но включить просто, для этого устанавливаем значение sysctl переменной compat.linux.osrelease в «2.6.16«.

В утилите freebsd-update обеспечивающей все обновления безопасности за счет установки двоичных пакетов без необходимости пересборки системы, появилась дополнительная команда «upgrade«, позволяющая обновить систему до последнего релиза.

Поддержка нескольких процессоров

В анонсе появившемся после выхода FreeBSD 7 отмечалась повышение производительности и стабильности системы в целом, и особенно это касается многопроцессорных систем. Как доказательство было представлено ряд тестов (people.freebsd.org/~Ekris/scaling), в которых FreeBSD 7 в 3.5 раза показывала большую производительность по сравнению с FreeBSD 6.X и приблизительно на 15% выше Linux с ядрами ветки 2.6. За счет чего обеспечивается такой прирост?

Исторически FreeBSD разрабатывался под однопроцессорные системы и не очень дружил с несколькими процессорами. Используемый алгоритм «Giant lock» был далек от оптимального. В этом случае, хотя пользовательский код и мог выполняться на нескольких процессорах, но ядро «охраняемое» mplock могло обрабатывать только один процесс в единицу времени. В 2000 году был создан проект SMPng (SMP next generation) на который и была возложена задача изменения дизайна ядра таким образом, чтобы программы могли выполняться параллельно. Дебют новой модели состоялся в версии FreeBSD 5.0, в которой mplock был заменен целым набором локальных блокировок. А с версии FreeBSD 5.3 начался процесс адаптации к параллельной работе некоторых системных функций, в частности сетевого стека и виртуальной памят, который был продолжен в шестой версии системы. Хотя giant lock «присутствовал» практически до выхода 7.0. Теперь уже со старым грузом распрощались, а FreeBSD является системой полностью поддерживающей параллельное выполнение задач.

Второй фактор, влияющий на повышение производительности — появление нового планировщика задач ULE в его третьей редакции, который заменил штатный 4BSD scheduler доставшийся из прошлых времен. Новый планировщик был существенно переделан и оптимизирован для работы на мультипроцессорных системах. По умолчанию в версии 7.0 ULE отключен:

% grep SCHED /usr/src/sys/conf/NOTES

options SCHED_4BSD

#options SCHED_ULE

Поэтому, что бы увидеть в работе новый планировщик ядро придется таки пересобрать. Тем более, что ULE официально рекомендуется к использованию для повышения производительности системы. Но с 7.1 обещают, что ULE будет использоваться по-умолчанию. Сюда можно добавить появление замены библиотеке phkmalloc отвечающей за управление динамической памятью разработанной еще в середине 90-х. Новая версия ejmalloc, написана с учетом работы на многопроцессорных системах

Файловые системы

FreeBSD получила поддержку файловой системы ZFS (Zettabyte File System) первоначально разрабатываемой Sun для Solaris. ZFS является 128 битной поэтому может работать с файлами и разделами очень большого размера, ее характеризует высокое быстродействие, простое управление объемами хранения данных, отсутствие фрагментации, переменный размер блока и механизмы обеспечивающие целостность данных. Но пока такая поддержка отмечена как экспериментальная и имеет к тому же ряд ограничений. Так FreeBSD пока не с может загружаться с ZFS, не поддерживается ACL, доступна только для платформ amd64, i386 и pc98. Но файловые системы UDF теперь можно строить прямо на ZFS. По умолчанию модуль ZFS отключен, перед началом работы советую почитать ZFSQuickStartGuide (wiki.freebsd.org/ZFSQuickStartGuide).

В версию 7 добавлен порт проекта NetBSD файловой системы tmpfs. В Linux данная возможность появилась раньше, в FreeBSD модуль пока помечен как экспериментальный, но он протестирован и вполне готов к работе. При помощи tmpfs можно использовать участки ОЗУ как обычные блочные устройства. Будет ли востребована данная функциональность на серверах, но в случае успешного применения FreeBSD на встроенных устройствах лишней она точно не будет. Чтобы подключить tmpfs, достаточно выполнить команду:

# echo ‘tmpfs_load=»YES»‘ >> /boot/loader.conf

И теперь монтируем любой каталог, например /tmp:

# mount -t tmpfs tmpfs /tmp

Для автоматического монтирования при загрузке добавляем эту запись в /etc/fstab, только последним параметром обязательно должен стоять «0», иначе fsck попробует его проверить и потерпит неудачу так как не поддерживает этот тип ФС.

К GEOM, появившемся в FreeBSD 5, добавлен новый класс GEOM_JOURNAL. На даный момент поддерживается только UFS, и позволяет приделать к этой ФС журнал. Для управления журналированием файловой системы предназначена утилита gjournal. Журналирование осуществляется на уровне блоков, а не файловой системы. То есть в протокол попадает данные и метаданные. При этом данные и журнал могут храниться как одном, так и на разных поставщиках. Настроить журналирование на файловой системе UFS при помощи gjournal, достаточно просто:

# gjournal load

Теперь создаем GEOM-поставщика при помощи gjournal.

# gjournal label /dev/da0

Натравливаем newfs или tunefs с ключем «-J«.

# newfs -J /dev/da0.journal

# mount -o async /dev/da0.journal /mnt

Параметр async команды mount весьма рекомендуется при использовании журнала. Ядро генерик версии 7 поддерживает gjournal по умолчанию и нужный модуль загружается при запросе. Можно настроить журналирование и на существующей файловой системе, но только в том случае если последний сектор, в котором gjournal хранит информацию, не использован файловой системой.

Класс gvirstor (wikitest.freebsd.org/gvirstor) позволяет создавать виртуальных GEOM-провайдеров в режиме «overcommit» то есть большой емкости, чем имеющееся физическое устройство. К такому виртуальному устройству по требованию можно добавить дополнительные разделы. В самом простом случае процесс выглядит так. Сначала создаем устройство /dev/virstor/mydisk к которому привязываем диски ad5 и ad6:

# gvirstor label -v mydisk /dev/ad5 /dev/ad6

Создаем раздел:

# newfs /dev/virstor/mydisk

Дополнительный диск добавляется командой:

# gvirstor add mydisk ad7

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

Долгое время реализация файловой системы unionfs в FreeBSD находилась в весьма плачевном (очень очень плачевном) состоянии. Даже в официальной документации большими буквами было написано, что она есть но лучше ее не трогать. В версии 7 появилась новая, стабильная реализация этой файловой системы, написанная Даичи Гото (Daichi Goto) с нуля. Даже более того она перекочевала и в 6 ветку FreeBSD. Это открывает большие возможности, например среда Jail в которой реально все изменения будут производиться в виртуальном каталоге смонтированном в unionfs. Приведу классический пример использования unionfs. Например, так можно смонтировать CD-ROM и «записывать» в него информацию:

# mount -t cd9660 -o ro /dev/acd0 /cdrom

# mount -t unionfs -o noatime /var/cdrom /cdrom

Теперь каталог /var/cdrom примонтирован на верху /cdrom и с ним можно работать как с обычным разделом жесткого диска. Кстати в новой фре убраны все mount_* утилиты (mount_devfs, mount_ext2fs, mount_linprocfs, mount_procfs, mount_linsysfs и так далее), теперь тип файловой системы задаем через параметр «-t«.

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

Как видите в новой FreeBSD появилось много полезного и интересного. Правда стоит отметить, что новинки этого релиза больше ориентированы все-таки на серверное применение, чем рядового юзверя, но его уже устанавливают на рабочих столах. А проекты вроде PC-BSD и DesktopBSD уже объявили о будущих релизах основанных на новой ветке. Так, что вперед. Да и уже доступна FreeBSD 8_CURRENT, в которой обещаются не меньше новинок.

8 Комментариев к Обзор FreeBSD 7.0

Аватар

tristan

Июль 8th, 2008 | 21:48

Интересно пишете, буду к вам захаживать.

Аватар

Лера

Июль 10th, 2008 | 14:56

хороший блог, респект

Аватар

vadek

Август 6th, 2008 | 21:40

Фря хороша как универсальное средство. Но практика показывает, что универсальность не всегда хорошо себя рекомендует и в ряде случаев все же лучше устанавливать специализированный продукт. По вопросам безопасности Фря уступает OpenBSD. По вопросам поддерживаемых файловых систем впереди Фри идут Linux и Solaris. По вопросам виртуализации Фря уступает AIX и Solaris. Что ж, из каждой из этих ОС Фря взяла свое и это неплохо. Но в целом можно констатировать, что на сегодня *BSD переживают не лучшие времена и эффективность их использования носит скорее специфический, чем массовый характер.

Аватар

wp2

Ноябрь 16th, 2008 | 12:30

не согласен с предыдущим высказыванием. Количество пользователей БСД-систем растет, к тому же время не стоит на месте ;-)

Аватар

www2

Ноябрь 24th, 2008 | 5:38

>По вопросам виртуализации Фря уступает AIX и Solaris.

И не только им, но и Linux’у, в котором есть UML, VServer и OpenVZ.

Аватар

barma

Ноябрь 24th, 2008 | 17:27

а чем вам XEN не угодил?

Аватар

AWK

Январь 2nd, 2010 | 11:08

А на кой на серваках сдалась виртуализация ???
Во фре есть то, чего нет у других — тюрьмы(jail) которые разграничивают ресурсы нативно, а не через тормознутость виртуализаций. Кстати пошарьтесь у хренякеров на тему бэкдуров для UML, Vserver & OpenVZ. Из Фряхиных же тюрьм ворью выскочить не удается в случае компрометирования какой либо конкретной тюремной камеры.

Ну и по поводу массовости, Netcraft на протяжении десятилетий констатирует, что фря всегда была и есть в топах надежности, New York Internet, Pair networks, Swishmail, iPower, Yahoo …. вероятно не спроста останавливают свой выбор серваков на Фряхе, да и корни MAC-ка растут тоже от той же фряхи.

Аватар

Уофчек

Октябрь 8th, 2010 | 10:06

Совершенно не согласен с Vadek. Голословное утверждение. За несколько лет не было ни одной дыры серьезной обнаружено во фряхе. А на опенфсб нельзя сделать ничего такого, чего нельзя сделать на фряхе. Так что чисто лаймерский пост

Комментировать

Наверх