После года разработки официально анонсирован релиз FreeBSD 9.1. Установочные сборки, способные работать в Live-режиме, доступны в вариантах Bootonly, DVD, CD и Memstick для платформ amd64, i386, powerpc64 и ia64. Поддержка выпуска обновлений для версии FreeBSD 9.1 продлится до января 2015 года, поддержка выпуска FreeBSD 9.0 будет прекращена 31 марта 2013 года. Поддержка ветки FreeBSD 7 истекает 28 февраля 2013 года, ветки FreeBSD 8 и 9 будут поддерживаться два года с момента последнего релиза.
- Система
- Проведена оптимизация работы планировщика задач sched_ule для более эффективной балансировки на процессорах, поддерживающих технологию одновременной многопоточности (SMT, Simultaneous MultiThreading), например, Intel Core i7. В ситуации, когда число число нитей меньше числа логических CPU внесённые изменения позволили добиться повышения производительности на 10-15%. Позитивный эффект от изменений в планировщике также наблюдается и для систем на базе процессоров без поддержки SMT;
- В libthr, реализации pthread-библиотеки для создания многопоточных приложений, переработан механизм работы с блокировками, что позволило добиться заметного повышения производительности. В некоторых ситуациях, производительность многопоточных приложений возросла до 10 раз;
- В утилиту boot0cfg добавлена возможность инициирования через boot0 загрузки по умолчанию с использованием PXE. Для активации PXE-загрузки следует использовать в качестве аргумента опции "-s" номер слайса 6 или ключевое слово PXE;
- Произведена интеграция наработок проекта по созданию для FreeBSD полноценного С++ стека, целиком распространяемого под лицензией BSD и независящего от кода проекта GNU. В состав включены библиотеки libc++ (реализация элементов, определённых в стандарте C++11) и libcxxrt (реализация спецификации C++ ABI), развиваемые проектом LLVM и компанией PathScale в качестве альтернативы используемой в GCC библиотеке GNU libsupc++. Использование Clang 3.1 совместно с данными библиотеками демонстрирует полное прохождение тестов на совместимость со стандартом C++11 (в ветку FreeBSD-HEAD на днях интегрирован clang 3.2). Библиотека libc++ обеспечивает минимальное потребление памяти, высокую скорость выполнения функций, быструю компиляцию и совместимость на уровне ABI с libstdc++ из состава GCC для некоторых низкоуровневых возможностей, таких как объекты-исключения (exception objects), rtti и распределение памяти. По умолчанию библиотеки пока не используются, так как библиотека libc++ не совместима с поставляемым в базовой системе gcc и может работать только с clang. Переход на новый C++ стек будет осуществлён в ветке FreeBSD 10, одновременно с задействованием по умолчанию Clang;
- В системной библиотеке обеспечена поддержка xlocale API, позволяющий устанавливать свою локаль для отдельных потоков. Код был поритирован из проекта Apple Darwin и позволил задействовать библиотеку libc++ от проекта LLVM, которая изначально была создана для Darwin и поэтому завязана на расширенные функции для работы с локалью (xlocale);
- В run-time линкер rtld добавлена используемых в GCC GNU-расширений RELRO (RElocation Read-Only, позволяет предотвратить перезапись глобальной таблицы смещений GOT ) и DT_GNU_HASH (расширенная хэш-секция для замены опциональной хэш-секции ELF);
- Дисковая подсистема, ввод/вывод, системы хранения и файловые системы
- В состав включена подсистема CAM Target Layer (CTL), обеспечивающая эмуляцию дисковых и процессорных устройств. Кроме того, CTL можно использовать как тестовый фреймворк для CAM (Common Access Method): реализовав в CAM новую возможность, можно сразу протестировать её в CTL. При этом легко сэмулировать нетипичное поведение устройств и различные аппаратные ошибки, которые в штатном режиме невозможно повторить на реальном устройстве. Например, CTL позволяет реализовать возможность использования системы на базе FreeBSD и карты Fibre Channel в качестве внешнего RAID-массива, target-интерфейс которого будет реализован через CTL. Для тестирования драйвера новой карты Fibre Channel можно создать LUN и использовать CTL без реального оборудования, привязав драйвер "da" к CTL LUN и выполняя с ним любые операции ввода/вывода. Для управления работой CTL представлена новая утилита ctladm;
- В подсистему CAM (Common Access Method), предоставляющую унифицированный модульный интерфейс для разработки драйверов для SCSI и ATA/SATA устройств, добавлена поддержка устройств SEMB (SATA Enclosure Management Bridge), которые являются SATA-эквивалентом SCSI-устройств SES/SAF-TE;
- Добавлена новая реализация GEOM-класса Multipath, позволяющего организовать доступ к хранилищу, подключенному через несколько каналов ввода/вывода. В новой реализации устранены многие проблемы и добавлены дополнительные возможности. В дополнение к ранее доступному режиму Active/Passive добавлен режим Active/Active, который распределяет нагрузку по всем рабочим каналам, а также гибридный режим Active/Read позволяющий организовать только балансировку на чтение. Улучшена реализация автоматического режима конфигурации Multipath. Добавлен ручной режим настройки, при котором каналы можно удалять и добавлять через команды remove и add. Изменён подход к работе с каналами после сбоя, теперь они не удаляются из GEOM, а лишь помечаются сбойными (для управления сбойными каналами добавлены команды "fail" и "restore"). Для настройки работы Multipath представлена утилита gmultipath;
- В geom-класс MIRROR добавлена поддержка операции BIO_DELETE, что позволяет использовать команду TRIM в процессе удаления данных с SSD-накопителей для повышения срока их службы;
- Добавлен новый geom-класс UNCOMPRESS и связанная с ним утилита mkulzma. Указанный класс поддерживает работу с образами, сжатыми методом LZMA по аналогии с geom-классом UZIP;
- Внесена серия улучшений и исправлений в реализацию сетевой файловой системы NFS. На стороне клиента добавлена поддержка установки таймаута для элементов кэша запрошенных имён (таймаут устанавливается через опцию монтирования nametimeo и по умолчанию равен 60 сек.). Устранена утечка памяти при экспорте ZFS разделов по NFS. Для NFSv4 добавлена sysctl-переменная vfs.nfsd.disable_checkutf8 для отключения проверки имён файлов на соответствие UTF-8 (указанная опция позволяет использовать в именах дополнительные символы, допустимые в других реализациях NFS, но при этом нарушается совместимость с RFC 3530);
- С файловой системы tmpfs снят признак экспериментальной разработки. Добавлена sysctl-переменная vfs.tmpfs.memory_reserved для указания свободных страниц виртуальной памяти (ОЗУ и свопа) при которых допустимо увеличение размера tmpfs-раздела, если свободной памяти меньше определённого лимита, то создание новых узлов tmpfs будет приостановлено;
- Портирование из проекта Illumos, в рамках которого продолжается развитие операционной системы OpenSolaris, свежих патчей для файловой системы ZFS. Добавлены новые свойства "clones" и "written" для определения списка клонов ФС и объёма записанных в снапшот данных (например, "zfs list -t all -o name,origin,clones" и "zfs list -t all -o name,used,written"). При выполнении команды "zfs send" теперь выводится ожидаемый размер потока, а для команды "zfs destroy" - ожидаемое место на диске, которое можно будет задействовать при использовании флага "-n"; В команду "zfs get" добавлена поддержка флага "-t" для определения типа данных;
- Сетевая подсистема
- Добавлен фреймворк netmap для высокоскоростной обработки пакетов. При использовании netmap на перемещение одного пакета между каналом связи и пользовательским приложением тратится примерно 70 циклов, что позволяет одним ядром CPU с частотой 1050 MHz генерировать поток в 14.8 Mpps (миллионов пакетов в секунду), которого достаточно для анализа трафика на 10-гигабитном сетевом интерфейсе. В относительных показателях производительность netmap в 5-10 раз выше стандартного сетевого драйвера. В настоящее время поддерживаются 1- и 10-гигабитные сетевые адаптеры Intel и 1-гигабитные карты RealTek ( em, lem, igb и re). Взаимодействие с пользовательскими приложениями производится через стандартный API и не требует подключения специальных библиотек, переработки кода и пересборки приложений. Для работы существующих приложений поверх нового API подготовлена небольшая библиотека-враппер libpcap-over-netmap, позволяющая задействовать netmap в программах, уже поддерживающих libpcap;
- В пакетном фильтре ipfw расширен синтаксис правил работы с таблицами (аргумент "table"), в которых теперь допускается указание IP-адресов, названий интерфейсов, номеров портов и идентификаторов jail-окружений. В таблицах теперь допускается указание IPv6-адресов и привязки элементов к сетевым интерфейсам, в том числе можно использовать маски сетевых интерфейсов. Например, для привязки таблицы к интерфейсу можно указать "ipfw table 10 add vlan20 12000" после чего использовать привязанную к интерфейсу таблицу "ipfw add 100 ipfw skipto tablearg ip from any to any recv 'table(10)' in".
Обеспечена возможность изменения максимального числа таблиц на лету через sysctl net.inet.ip.fw.tables_max, который отныне доступен не только на чтение, но и на запись. Изменён метод разбора аргументов, например, в выражении 'ipfw table 999 add host' аргумент 'host' теперь будет восприниматься как имя интерфейса, а не имя хоста.
- Проведена большая работа по увеличению производительности IPv6-стека. Если ранее основное внимание уделялось стабильности и корректности работы IPv6, то теперь внимание было уделено анализу эффективности IPv6-стека. Проведённая работа позволила выявить источники проблем, проявляющихся в понижении производительности при использовании IPv6 вместо IPv4. В процессе работы были внесены улучшения в реализацию системы блокировок для обработчиков UDP, оптимизирован поиск маршрутов в таблицах, добавлена реализация отложенного вычисления контрольных сумм, обеспечена поддержка TSO6 и LRO для IPv6, включено offload-ускорение проверки контрольных сумм для loopback-интерфейса, оптимизировано использование кэшей и внесены многочисленные мелкие доработки, которые в некоторых случаях затронули и IPv4 стек. В результате удалось добиться заметного повышения производительности IPv6 для физических и loopback-интерфейсов при использовании offload-акселерации. Увеличена производительность UDP и повышена скорость работы IPv6-стека в общем виде;
- В реализацию множественных таблиц маршрутизации (Multi-FIB) добавлена поддержка IPv6. Для IPv4 поддержка Multi-FIB была добавлена ещё в 2008 году, сейчас данная возможность стала доступна и для IPv6. Используя Multi-FIB возможно определение правил, по которым к пакету будет применена одна из альтернативных таблиц маршрутизации, например, можно организовать "policy based" маршрутизацию с несколькими исходящими интерфейсами или привязать отдельную таблицу маршрутизации к Jail окружению. Кроме того, поддержка Multi-FIB может быть включена через опцию на этапе загрузки без необходимости пересборки ядра, что позволяет использовать Multi-FIB с ядром GENERIC. Сокеты маршрутизации (routing sockets) теперь принимают во внимание FIB-ы и показывают сообщения маршрутизации только адресованные к привязанному FIB, что позволяет программам управления маршрутизацией и демонам маршрутизации производить выборочные обновления определенного FIB;
- В утилите dhclient обеспечена поддержка опции domain-search, позволяющей DHCP-серверу публиковать список частей доменных имён, прикрепляемых по умолчанию при операциях поиска по имени в DNS (действие опции search в /etc/resolv.conf);
- В утилиту ifconfig добавлен параметр "vlanhwcsum" для установки или сброса функции акселерации вычисления контрольных сумм для VLAN. Кроме того, в ifconfig добавлен параметр "carp state" для принудительной установки статуса Carp-линка (backup или master);
- Изолированные окружения, безопасность и ограничения ресурсов
- В подсистему Jail добавлена поддержка монтирования файловых систем ZFS, devfs и nullfs из изолированного окружения (командой, выполненной внутри окружения). Для разрешения выполнения операций монтирования в Jail представлены параметры конфигурации allow.mount.devfs, allow.mount.nullfs и allow.mount.zfs, позволяющие разрешить или запретить монтирование для отдельных окружений (по умолчанию монтирование запрещено);
- В утилиту jail добавлена поддержка файла конфигурации jail.conf, через который могут быть определены параметры нестандартных изолированных окружений;
- Оборудование и аппаратные архитектуры
- Расширены возможности драйвера для графических чипов Intel c поддержкой GEM/KMS на уровне ядра FreeBSD, позволяющего использовать свежие версии видеодрайверов xf86-video-intel в которых была удалена поддержка переключения видеорежимов на пользовательском уровне (UMS) и оставлена только поддержка KMS (Kernel Mode Setting) для переключения видеорежимов на уровне ядра. В новой версии drm2-драйвера добавлена поддержка графических подсистем чипов IronLake, SandyBridge и IvyBridge. В драйвере agp переписан код работы с i810 и добавлена поддержка северных мостов SandyBridge и IvyBridge;
- Существенно обновлён звуковой драйвер HDA (snd_hda). Обеспечена поддержка вывода звука через порты HDMI и DisplayPort, добавлены новые средства управления громкостью, обеспечен автоматический выбор источника записи звука, реализована возможность переконфигурации на лету. Добавлена поддержка контроллеров с более чем четырьмя PCM-устройствами, обеспечена поддержка многоканальной записи. Увеличена информативность наименования имён устройств. Добавлено получение EDID-подобных данных от кодеков и видеодрайверов c информацией о звуковых возможностях устройства отображения. Реализована возможность установки специфичных для HDMI и DisplayPort опций кодеков, таких как число каналов, конфигурация громкоговорителей и маппинг каналов. Добавлена поддержка дополнительных многоканальных форматов: для HDMI и DisplayPort поддерживаются каналы 2.0, 2.1, 3.0, 3.1, 4.0, 4.1, 5.0, 5.1, 6.0, 6.1, 7.0 и 7.1. Добавлена поддержка проброса сжатых звуковых потоков с интенсивностью в диапазоне 6.144 - 24Mbps, таких как DTS-HD Master Audio или Dolby TrueHD;
- Добавлен новый драйвер snd_hdspe для звуковых карт RME HDSPe AIO и RayDAT;
- В драйвер hwpmc (Hardware Performance Monitoring Counter) добавлена поддержка микроархитектуры Intel Sandy Bridge;
- Во FreeBSD/arm добавлена поддержка микроконтрорллеров Atmel SAM9XE, использующих процессорное ядро ARM926EJ-S;
- Устранена порция проблем в драйвере xhci (USB 3.0), в том числе исправлена ошибка из-за которой не работали хабы USB 3.0;
- Обновлены драйверы для систем хранения:
- В драйвере для накопителей с интерфейсом USB по умолчанию разрешено использование энергосберегающих режимов;
- Драйвер arcmsr (Areca RAID) обновлён до версии 1.20.00.25;
- Добавлен драйвер hpt27xx для HighPoint RocketRAID 27xx SAS 6Gb/s HBA;
- Добавлен драйвер isci с поддержкой интегрированных контроллеров SAS на базе чипсета Intel C600 (Patsburg);
- В драйвер mfi (LSI MegaRAID SAS) добавлена поддержка карт Drake Skinny и Thunderbolt;
- Драйвер mps (LSI Fusion-MPT 2 Serial Attached SCSI) обновлён до версии 14.00.00.01-fbsd в которой добавлена поддержка 6Gb SAS-контроллеров, SSD-накопителей WarpDrive и интегрированных RAID. В драйвере также улучшен код восстановления ошибок, добавлена поддержка EEDP (SCSI protection information) и TLR (Transport Level Retries);
- Улучшение поддержки сетевых устройств:
- Обновлён драйвер xnb для использования в паравиртуализированных гостевых окружениях Xen. Новый драйвер привязан к фреймворку newbus и корректно работает как в режиме паравиртулизации (PVM), так и при полной виртуализации (HVM);
- Добавлен драйвер sfxge c поддержкой 10Gb Ethernet адаптеров на базе контроллеров Solarflare SFC9000;
- В драйвер ixgbe добавлена поддержка Intel X540;
- Добавлен драйвер oce с поддержкой адаптеров Emulex OneConnect 10Gbit Ethernet;
- Устранена ошибка в драйвере ae для контроллеров Attansic/Atheros FastEthernet, мешающая работе при некоторых условиях;
- Улучшены драйверы bge и brgphy для контроллеров Broadcom BCM57xx/BCM590x Gigabit/Fast Ethernet: устранена ошибка мешающая использованию DMA, добавлена поддержка работы с контроллерами PCI-X BCM 5704 подключенными к платам на чипах AMD-8131, добавлена поддержка BCM 5720, BCM 5720C PHY и BCM 57780 1000BASE-T, для управления MSI добавлена опция загрузчика dev.bge.N.msi;
- Для драйверов cxgbe и cxgb (Chelsio T3/T4 10 Gigabit Ethernet) прошивка обновлена до версии 1.5.2.0. Добавлена поддержка настройки параметров устройств через текстовый файл конфигурации, задействованы аппаратные механизмы вычисления контрольных сумм для IPv6, IPv6 TSO и LRO, добавлена новая информационная sysctl-переменная dev.t4nex.N.misc;
- Драйвер igb (Intel PRO/1000 PCI Express Gigabit Ethernet) обновлён до версии 2.3.4 и теперь поддерживает устройства i210/i211;
- В драйвере mxge (Myricom Myri10GE 10 Gigabit Ethernet) до версии 1.4.55 обновлена прошивка от Myricom;
- В драйвер ral добавлена поддержка чипсетов Ralink RT2800 и RT3000;
- В драйвер re добавлена поддержка контроллера RTL8411 PCIe Gigabit Ethernet;
- Приложения
- В компиляторе gcc исправлена ошибка, приводившая к некорректным вычислениям при сборке с флагом "-ffast-math";
- Обновлены версии поставляемых в базовой системе сторонних проектов:
- LLVM и clang 3.1 (компилятор clang используется по умолчанию в ветке FreeBSD 10, во FreeBSD 9 он поставляется в качестве опции);
- ISC BIND 9.8.3-P4;
- Библиотеки compiler-rt обновлны до ревизии 147467, а libstdc++ до ревизии 135556 из ветки gcc-4_2, последней доступной под лицензией GPLv2;
- file 5.11;
- GNU gperf 3.0.3 (последняя версия под лицензией GPLv2);
- libarchive, bsdtar и cpio 2.8.5;
- libpcap 1.2.1;
- netcat 5.1;
- OpenSSL 0.9.8x;
- tcpdump 4.2.1;
- tcsh 6.18.01;
- zlib 1.2.7;
- Порт с KDE (x11/kde4) обновлён с 4.7.3 до версии 4.8.5;