Спустя чуть больше двух лет с момента появления ветки 8.0 официально анонсирован релиз FreeBSD 9.0. Установочные сборки, способные работать в Live-режиме, доступны в вариантах Bootonly, DVD, CD и Memstick для USB Flash для платформ i386, amd64, powerpc, powerpc64, ia64 и sparc64.
Среди ключевых улучшений: переход на новый модульных инсталлятор BSDInstall, интеграция в базовую систему компилятора Clang в качестве замены GCC, новая реализация программного RAID (graid), интеграция системы репликации устройств хранения данных (HAST), обновление ZFS до версии 28, активация журналирования Soft Updates для UFS, усовершенствование TCP-стека, поддержка пяти новых алгоритмов для контроля перегрузки в TCP, новый универсальный USB-драйвер с поддержкой USB 3.0, новый механизм изоляции выполнения приложений Capsicum, реализация RCTL для установки индивидуальных ограничений ресурсов для Jail.
Более подробно о новшествах:
- Установка
- Инсталлятор BSDInstall задействован по умолчанию. BSDInstall отличается модульностью, простотой подключения расширений, поддержкой управляющих установкой скриптов и ускорением выполнения процесса инсталляции. По своей сути BSDInstall представляет собой shell-скрипт, в определенной последовательности вызывающий дополнительные скрипты или приложения. Любое звено установки может быть легко модифицировано или заменено на альтернативную реализацию (например, вместо вызова редактора дисковых разделов можно указать скрипт, который вернет определенную последовательность gpart-команд). В процессе установки, работа инсталлятора сводится к распаковке трех архивов: образа с базовой системы (world.tgz), ядра (kernel.tgz) и коллекции портов (ports.tgz), после чего могут быть запущены постустановочные конфигураторы или скопированы типовые файлы конфигурации (fstab, rc.conf, resolv.conf).
Базовые возможности:
- Возможность установки на GPT-диски;
- Поддержка установки, охватывающей несколько дисков;
- Поддержка установки внутрь jail-окружений;
- Поддержка упрощенного PXE-режима установки;
- Дружественность к системам виртуализации, например, можно произвести установку в дисковый образ из работающей системы;
- Значительное ускорение процесса установки системы;
- Гибкое управление установкой через написание скриптов;
- Возможность простой реализации мелких настроек;
- Установочный CD выступает в роли LiveCD.
- Режим настройки параметров беспроводной сети;
- Поддержка установки на ZFS-разделы (реализация функции не завершена).
Утилита sysinstall по прежнему доступна для конфигурации после установки;
- Инсталлятор BSDInstall задействован по умолчанию. BSDInstall отличается модульностью, простотой подключения расширений, поддержкой управляющих установкой скриптов и ускорением выполнения процесса инсталляции. По своей сути BSDInstall представляет собой shell-скрипт, в определенной последовательности вызывающий дополнительные скрипты или приложения. Любое звено установки может быть легко модифицировано или заменено на альтернативную реализацию (например, вместо вызова редактора дисковых разделов можно указать скрипт, который вернет определенную последовательность gpart-команд). В процессе установки, работа инсталлятора сводится к распаковке трех архивов: образа с базовой системы (world.tgz), ядра (kernel.tgz) и коллекции портов (ports.tgz), после чего могут быть запущены постустановочные конфигураторы или скопированы типовые файлы конфигурации (fstab, rc.conf, resolv.conf).
- Дисковая подсистема, ввод/вывод, системы хранения и файловые системы
- Новая реализация программного RAID - graid, призванная заменить устаревшую систему управления программными RAID-массивами ataraid. Новая реализация основана на использовании инфраструктуры GEOM и построена в соответствии с принципами модульной архитектуры, что позволило разделить систему на базовый модуль, модули для обработки преобразования данных (RAID-уровни) и модули для определения формата хранения мета-данных на диске. В отличии от ataraid, graid не зависит от устаревшей подсистемы ata и может быть использован с любыми драйверами дисковой подсистемы, включая новые, основанные на CAM (ahci, siis, mvs, ata с использованием "options ATA_CAM"). Поддерживаются популярные форматы метаданных Intel, JMicron, NVIDIA, Promise (используется AMD/ATI) и SiliconImage. Реализованы следующие RAID-уровни: RAID0, RAID1, RAID1E, RAID10, SINGLE, CONCAT;
- Система репликации устройств хранения данных (HAST), которая позволяет использовать FreeBSD для создания высоконадежных конфигураций, в которых данные синхронизированы по всем узлам кластера. HAST реализован в виде GEOM-класса, обеспечивающего синхронную репликацию блочных устройств поверх TCP/IP сетей, независимо от типа накопителя и файловой системы. HAST предусматривает возможность быстрого восстановления после сбоя, причем, при выходе из строя первичного master-узла, его функции могут быть делегированы slave-узлу. После проверки и монтирования UFS раздела или импорта ZFS пула на поврежденном узле, система автоматически синхронизирует внесенные за время восстановления изменения и продолжит работу без потери данных.
- По умолчанию активирован механизм журналирования Soft Updates для файловой системы UFS. Данное нововведение позволяет отказаться от необходимости запуска fsck после "грязного" размонтирования файловой системы и достичь очень высокой скорости восстановления состояния файловой системы при очень малом объеме журнала, при этом система полностью обратно совместима с нежурналируемым вариантом softupdates. Инсталлятор автоматически активирует журналирование для новых разделов, для ранее созданных разделов включить журналирование можно утилитой tunefs, указав для раздела опцию "-j enable";
- Поддержка ZFSv28, среди особенностей которой можно отметить: поддержку автоматического распознавания и объединения дубликатов данных; реализацию RAIDZ3, отличающегося от RAIDZ хранением трех копий структур, обеспечивающих целостность; добавление утилиты "zfs diff" для просмотра изменений между двумя ZFS-снапшотами или между снапшотом и текущим состоянием ФС; поддержка команды zpool split для разбиения отзеркалированного zpool-раздела на несколько раздельных пулов; возможность импорта пула в режиме только для чтения; ускорение выполнения операций по созданию и удалению снапшотов. Более подробный обзор отличий ZFSv28 от ранее доступных версий ZFS v13-v15 можно посмотреть здесь. В утилиту zpool добавлена поддержка команды "zpool labelclear", позволяющей очищать метки с диска, который не активен в пуле;
- Интегрирована поддержка операций TRIM для файловой системы UFS, что позволит увеличить производительность при работе с SSD-накопителями и повысить их срок службы. Включение TRIM производится через опцию "-t" в утилитах newfs и tunefs;
- Клиент NFS и сервер nfsd по умолчанию теперь поддерживают NFSv4 в дополнение к NFSv2 и NFSv3. Новый менеджер блокировок для NFS, реализованный на уровне ядра, что позволило обеспечить увеличение производительности. Для чистки таблиц с блокировками подготовлена команда clear_locks. Для новой реализации NFS в настройки ядра добавлены опции NFSD и NFSCL, которые следует использовать вместо старых NFSSERVER и NFSCLIENT. Для управления поддержкой версий NFS, предоставляемых сервером, подготовлены sysctl vfs.nfsd.server_max_nfsvers и vfs.nfsd.server_min_nfsvers (по умолчанию указаны версии 3 и 2). Для совместимости со старыми NFS-клиентами следует использовать опцию монтирования oldnfs;
- Добавлен GEOM-класс geom_map, позволяющий осуществить маппинг параметров как отдельных дисковых разделов и сгенерировать geom-провайдера для устройств без явных таблиц разделов. Например, для интегрированных Flash-накопителей с нестандартной структурой разбивки можно динамически выявить границы разделов и создать для них geom-провайдера, который может быть использован для монтирования файловых систем;
- Сетевая подсистема
- В ядро интегрирован фреймворк mod_cc, позволяющий динамически манипулировать методами контроля перегрузки TCP. Подготовлено пять динамически загружаемых модулей с реализацией различных алгоритмов для контроля перегрузки (Congestion Control) в TCP: HTCP, CUBIC, Vegas, HD и CHD. Активный алгоритм выбирается через sysctl net.inet.tcp.cc.algorithm, список доступных алгоритмов можно посмотреть через sysctl net.inet.tcp.cc.available. Со стороны приложений проверить какой для текущего соединения будет использован алгоритм контроля перегрузки можно через опцию TCP_CONGESTION для TCP-сокетов. Также доступен Khelp-модуль h_ertt (Enhanced Round Trip Time), позволяющий более точно измерять параметры TCP потока для использования в алгоритмах управления контроля перегрузки TCP;
- В TCP-стек добавлены такие новшества, как поддержка группировки TCP-соединений в привязке к CPU, задействование некоторых аппаратных механизмов снижения нагрузки и возможность привязки отдельных соединений к заданному CPU;
- Увеличена масштабируемость ядра и TCP-стека на SMP-системах, обеспечена корректная работа на системах с более чем 32 CPU;
- В netgraph-узел ng_netflow добавлена поддержка 9 версии NetFlow. Для экспорта NetFlow v9 потока подготовлен хук export9. Экспорт данных может быть организован одновременно в NetFlow-потоки 5 и 9 версии;
- Изолированные окружения, безопасность и ограничения ресурсов
- Capsicum - фреймворк для организации изолированного выполнения приложений и ограничения использования приложениями определенных функций. Capsicum расширяет POSIX API и предоставляет несколько новых системных примитивов, нацеленных на поддержку модели безопасности через управление возможностями объектов ("object-capability") для Unix-систем. Capsicum нацелен на дополнение традиционного централизованного мандатного контроля доступа средствами для защиты отдельных приложений. Используя Capsicum приложение можно запустить в режиме повышенной изоляции (sandbox), при котором программа сможет выполнять только ранее специфицированные штатные действия. В настоящее время уже достаточно много программ, от tcpdump до chromium, адаптированы для запуска в режиме изоляции, который может быть использован для уменьшения рисков при обработке сомнительных данных (по умолчанию приложения в базовой системе пока выполняются без использования Capsicum);
- RACCT - новый API для аккаунтинга потребления ресурсов, который может использоваться для сбора информации в привязке к отдельным Jail-окружениям, процессам или классам логинов. По умолчанию RACСT не включён, для активации следует пересобрать ядро с опцией "RACCT";
- RCTL (Hierarchical Resource Limits) - реализация контейнеров ресурсов, позволяющая организовать установку индивидуальных ограничений ресурсов в привязке к конкретным Jail-окружениям. Разработан общий фреймворк для управления ресурсами, обеспечена поддержка лимитирования различных типов ресурсов, таких как память и загрузка CPU. Управление производится через утилиту rctl(8). RCTL дополняет собой RACCT, позволяя определять действия в случае срабатывания заданных правил потребления ресурсов. По умолчанию RCTL не включён, для активации следует пересобрать ядро с опцией "RCTL";
- В используемый в базовой системе пакет OpenSSH, который был обновлён до версии 5.8p2, добавлены наработки проекта HPN-SSH (High Performance SSH), в котором была реализована поддержка динамического изменения размера сетевых буферов, что позволило существенно увеличить производительность за счёт более полного использования доступной пропускной способности при передаче больших объёмов данных (например, при использовании команды scp). Дополнительно добавлена поддержка режима шифрования "None", позволяющего передавать данные на максимально возможной скорости без дополнительных затрат ресурсов на шифрование (этап аутентификации по прежнему шифруется);
- Расширены возможности пакетного фильтра ipfw, для которого реализованы новые действия "call" и "return", позволяющие организовать выполнение типовых "подпрограмм", которые могут быть вызваны из разных участков правил. Когда обработка достигает правила с действием "call", текущий номер правила сохраняется в стеке и осуществляется переход к номеру правила, на который ссылается текущее действие "call". В дальнейшем, если обработка дошла до правила с действием "return", осуществляется возврат к следующему номеру, идущему после запомненной в стеке позиции. Действие "call" похоже на "skipto" и отличается только возможностью возврата в исходную позицию. В ipfw улучшена поддержка IPv6, например, обеспечена возможность проброса IPv6-пакетов через действие "fwd";
- Система
- В состав базовой системы FreeBSD интегрирован код инфраструктуры LLVM 3.0 и компилятора Clang 3.0, который может быть использован вместо GCC для сборки ядра, стандартного окружения и большинства портов. Clang пока не используется для сборки по умолчанию, для задействования следует заменить значения переменных CC, CXX и CPP в скриптах инфраструктуры сборки на clang, clang++ и clang-cpp;
- Новая инфраструктура обслуживания событий таймеров. Рефакторингу подверглось API для работы с таймерами, написан машинонезависимый код для управления таймерами, который может обслуживать как устаревшие периодические, так и новые единичные режимы работы таймера. Единичный режим позволяет значительно сократить число генерируемых таймером прерываний и понизить нагрузку на CPU - прерывание таймера, в случае нахождения CPU в состоянии простоя (idle), генерируется только при необходимости обработки зарегистрированного события. Нагруженные CPU по прежнему получают полный поток прерываний таймера с целью координирования планирования задач, хронометрирования и учета ресурсов. Для примера специальный тюнинг позволяет добиться на 8-ядерных CPU генерации всего 100 прерываний в секунду, что позволяет понизить энергопотребление и повысить эффективность технологии Intel TurboBoost;
- Базовый фреймворк для создания планировщиков ввода/вывода на базе GEOM, позволяет определять независимые планировщики операций дискового ввода/вывода, которые могут быть применены к различным системам ввода/вывода (например, можно подключить отдельный планировщик, оптимально подходящий для каких-то специфичных задач). Определено несколько примеров реализаций алгоритмов планирования;
- Подготовлены фреймворки Khelp (Kernel Helpers) и hhook (Helper Hook), представляющие KPI-интерфейс для создания модулей ядра, на лету обеспечивающих выполнение определенных сервисных функций. Hhook обеспечивает возможность экспорта хуков в ядро, которые затем могут быть использованы khelp-модулями для добавления новой расширенной функциональности в ядро, в том числе динамического расширения runtime-возможностей ядра с сохранением ABI. Через khelp в настоящее время уже реализованы дополнительные алгоритмы контроля перегрузки TCP;
- Оборудование и аппаратные архитектуры
- Интеграция в базовую систему Infiniband-стека OFED (OpenFabrics Enterprise Distribution), разработанного организацией OpenFabrics Alliance. В состав OFED входит набор драйверов и сопутствующие утилиты для обеспечения работы во FreeBSD Infiniband-контроллеров, используемых для организации высокоскоростных соединений серверов (от 2.5 до 120 гигабит/с) и организации поддержки технологии RDMA (Remote Direct Memory Access), предназначенной для обеспечения прямого доступа к памяти другой машины (как и в DMA обращение производится напрямую без участия ядра ОС и CPU). По умолчанию OFED не активируется, для сборки нужно указать опцию "WITH_OFED=yes" в /etc/src.conf;
- Добавлен и задействован по умолчанию новый универсальный USB-драйвер, обеспечивающий поддержку устройств с интерфейсом USB 3.0, соответствующих спецификации XHCI (eXtensible Host Controller Interface). Представленный драйвер совместим с более старыми контроллерами USB 2.0 и USB 1.0, и способен в будущем заменить ранее присутствующие драйверы OHCI, UHCI и EHCI;
- В подсистему USB добавлена реализация фильтра USB-пакетов, который позволяет перехватывать пакеты, идущие через каждый USB host контроллер, используя bpf-подобные правила. Для управления фильтром подготовлена утилита usbdump;
- Начальная поддержка архитектуры NUMA в подсистемах управления памятью;
- Обеспечена поддержка работы FreeBSD на игровых приставках Sony PlayStation 3. Из оборудования поддерживается большинство внутренних устройств, USB, Bluetooth, Ethernet, SATA, Framebuffer (720x480). Система может быть установлена и загружена со встроенного диска;
- Добавлены новые Ethernet-драйверы: bxe для контроллеров Broadcom NetXtreme II 10GbE (BCM57710, BCM57711, BCM57711E), cxgbe для адаптеров Chelsio T4 (Terminator 4) 10Gb/1Gb, vte для RDC R6040 Fast Ethernet (для систем Vortex86) и vxge для Neterion X3100 10GbE;
- Обновлены и расширены драйверы: em 7.3.2, igb 2.2.5, igb (добавлена поддержка Intel I350 PCIe Gigabit Ethernet), ixgbe 2.3.8, re (добавлена поддержка RTL8168E/8111E-VL PCIe Gigabit Ethernet и RTL8401E PCIe Fast Ethernet);
- Добавлен драйвер tws для RAID-контроллеров 3ware 9750 SATA+SAS 6Gb/s;
- Приложения
- В состав базовой системы интегрирована новая библиотека iconv, распространяемая под лицензией BSD и основанная на наработках из проекта NetBSD. Библиотека показывает неплохие результаты совместимости с GNU iconv, но пока не активирована по умолчанию. Для сборки новой библиотеки следует пересобрать сисетму, указав опцию "WITH_ICONV=yes" в /etc/src.conf;
- Новая реализация API readline, используемого для организации автодополнения команд, интегрирована в libedit. Новый API основан на наработках NetBSD и распространяется в рамках лицензии BSD, что позволило уйти от использования GNU libreadline;
- В программах rtadvd(8) и rtsold(8) добавлена поддержка IPv6 Router Advertisement Options для конфигурирования DNS, которая позволяет организовать обновление содержимого /etc/resolv.conf, используя RA. В демоне rtadvd(8) добавлена поддержка динамического добавления и удаления сетевых интерфейсов, а также их конфигурирования на лету при получении соответствующих RA-сообщений. Добавлена утилита rtadvctl(8), отображающая статус отправки RA для каждого интерфейса и предоставляющая функции для управления контролирующим RA фоновым процессом;
- БД учета входа пользователей utmp заменена на реализацию POSIX utmpx. Все утилиты аккаунтинга переведены на utmpx. Для преобразования wtmp-файлов в новый может быть использована утилита wtmpcvt;
- В tftpd устранена ошибка, из-за которой наблюдались проблемы с передачей больших файлов для некоторых TFTP-клиентов;
- Обновлены версии поставляемых в базовой системе сторонних проектов:
- ACPI CA 20110527;
- awk от 7 августа 2011 г.;
- ISC BIND 9.8.1-P1;
- GNU binutils 2.17.50 от 3 июля 2007 г. (более новые версии под GPLv3);
- dialog 1.1-20110707;
- netcat 4.9;
- tnftp (lukemftp) 20100108;
- GNU GCC и libstdc++ обновлены до ревизии 127959 ветки gcc-4_2, последней доступной под лицензией GPLv2;
- LESS v444;
- Openresolv 3.4.4, для управления файлом resolv.conf теперь используется утилита resolvconf;
- Пакетный фильтр pf импортирован из OpenBSD 4.5;
- sendmail 8.14.5;
- xz от 11 июля 2011 г.
- Порт с KDE (x11/kde4) обновлён с 4.5.5 до версии 4.7.3;