| После года разработки официально анонсирован
релиз 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 будут поддерживаться два года с момента
последнего релиза.
Из ключевых новшеств FreeBSD 9.1 можно отметить: фреймворк netmap
для высокоскоростной обработки пакетов; подсистема CAM Target Layer;
новый драйвер для графических чипов Intel c поддержкой GEM/KMS;
обновление реализации файловой системы ZFS; альтернативный стек C++11 на
базе развиваемых проектом LLVM библиотек libc++ и libcxxrt; поддержка
монтирования из Jail-окружения файловых систем ZFS, devfs и nullfs;
поддержка xlocale API в системной библиотеке; расширение средств для
работы с таблицами в ipfw; добавление паравиртуализированного сетевого
драйвера netback для Xen; переработанный GEOM-класс multipath;
включение по умолчанию GEOM-класса raid в качестве реализации
программного RAID вместо ataraid; поддержка в ядре инструкций AVX;
интеграция наработок по увеличению производительности IPv6-стека.
Основные новшества:
- Система
- Проведена оптимизация работы планировщика задач 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,
через который могут быть определены параметры нестандартных
изолированных окружений. Определение параметров через файл конфигурации рекомендуется
в качестве предпочтительного метода настройки Jail. Поддержка старого
метода конфигурирования через перечисления опций командной строки в
rc.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.4;
Дополнительное можно отметить успешное завершение кампании по сбору
пожертвований на развитие проекта в 2013 году. Вместо запланированных
500 тысяч долларов организации FreeBSD Foundation удалось собрать 684 тысячи доллvаров, что на 37% больше, чем определено в плане.
| |