Официально представлен релиз FreeBSD 9.0. Обзор новшеств

13.01.2012 03:51

Спустя чуть больше двух лет с момента появления ветки 8.0 официально анонсирован релиз FreeBSD 9.0. Установочные сборки, способные работать в Live-режиме, доступны в вариантах Bootonly, DVD, CD и Memstick для платформ i386, amd64, powerpc, powerpc64, ia64 и sparc64. Релиз посвящён Деннису Ритчи, одному из создателей UNIX, идеи которого оказывали и продолжают оказывать влияние на FreeBSD.

Поддержка выпуска обновлений для версии FreeBSD 9.0 продлится до 31 января 2013 года. Поддержка ветки FreeBSD 7 истекает 28 февраля 2013 года, ветки FreeBSD 8 и 9 будут поддерживаться два года с момента последнего релиза.

Среди ключевых улучшений: переход на новый модульный инсталлятор 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 по прежнему доступна для конфигурации после установки;

  • Дисковая подсистема, ввод/вывод, системы хранения и файловые системы
    • Новая реализация программного 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 реализован в виде работающего на уровне пользователя демона hastd, использующего стандартный класс GEOM Gate для обработки запросов ввода/вывода. Hastd, обеспечивает синхронную репликацию блочных устройств поверх 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;
    • Во фреймворке DTrace в дополнение к модулю systrace реализованы модули systrace_linux32 и systrace_freebsd32 для трассировки 32-разрядных системных вызовов linux32 и freebsd32 на 64-разрядной платформе FreeBSD/amd64;
  • Оборудование и аппаратные архитектуры
    • Интеграция в базовую систему 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, в порт с GNOME доступен в версии 2.32.1;
  • Изменения, нарушающие совместимость
    • Утилиты для работы с дисковыми разделами fdisk, disklabel, bsdlabel и sunlabel объявлены устаревшими, вместо них теперь следует использовать программу gpart;
    • Включена по умолчанию система проверки целостности метаданных дисковых разделов при обнаружении таблицы разделов через подсистему GEOM PART (поиск и обнаружение разделов производится автоматически). При выявлении несогласованных метаданных таблица разделов не будет использована, а в лог будет выведено сообщение " GEOM_PART: Integrity check failed". Для возвращения к старому поведению, при котором возможна работа с повреждёнными таблицами разделов, следует указать в загрузчике 'set kern.geom.part.check_integrity="0"' или установить данную переменную в /boot/loader.conf;
    • Управление содержимым /etc/resolv.conf теперь производится автоматически, для внесения изменений следует использовать утилиту resolvconf. При ручных правках, параметры /etc/resolv.conf могут быть молча переписаны такими приложениями, как dhclient и rtsold;
    • Дисковая подсистема ATA/SATA по умолчанию заменена на реализацию на базе CAM (Common Access Method), изначально предоставляющую унифицированный модульный интерфейс для разработки драйверов для SCSI устройств, но начиная с ветки FreeBSD 8 расширенную поддержкой ATA/SATA. Подсистема на базе CAM поддерживает такие возможности, как NCQ (Native Command Queuing), MSI (Message Signaled Interrupts), горячее подключение устройств (hot-plug) и мультипликатор портов (Port Multiplier).

      Переход на CAM сопряжён с появлением ряда несовместимостей: вместо atacontrol для управления следует использовать утилиту camcontrol; имена устройств выглядят как /dev/ada0 вместо /dev/ad0 (для совместимости ставится символическая ссылка); утилита записи CD/DVD burncd не рабоает с CAM, поэтому следует использовать cdrecord из порта sysutils/cdrtools; вместо ataraid следует использовать graid, устройства при использовании которого выглядят как /dev/raid/r0 вместо /dev/ar0;

    • Многочисленные ужесточения правил оформления параметров настройки сети в /etc/rc.conf. Например, теперь нельзя указывать 'ifconfig_em0="192.168.2.1 netmask 255.255.255.0"', а нужно обязательно использовать полный формат 'ifconfig_em0="inet 192.168.2.1 netmask 255.255.255.0"' (для более явного разделения inet и inet6). При остановке сетевого сервиса через команды "service netif stop em0" или "service routing stop" теперь автоматически отключаются алиасы и статические маршруты. Изменены методы задания конфигуарции IPv6;