После двух с половиной лет разработки, анонсирован выход релиза FreeBSD 7.0. Ниже обзор новшеств. Ядро * В подсистемы ядра ipsec и geli (шифрование диска) добавлена поддержка 128-битного блочного шифра Camellia, который был разработан компанией Mitsubishi Electric Corporation и открыт для свободного использования весной 2007 года. * Сборка и конфигурирование ядра o Опция сборки ядра COMPAT_43 признана ненужной и удалена из конфигурации. o Удалена опция PIM, вместо нее следует использовать MROUTING o Удален код драйверов: + cvt(4), альтернативной реализации syscons(4) + sab(4), который заменен новым драйвером scc(4) (Serial Communications Controllers). + zs, функции которого продублированы в uart(4). + el(4) + lnc(4), поддержка устройств обеспечена драйверами le(4) и pcn(4); + bridge(4), вместо него следует использовать if_bridge(4). + rr232x(4), следует использовать hptrr(4) o В GENERIC ядре по умолчанию включен cpufreq, драйвер dumb консоли, драйвер uart(4) , fwip (IP over FireWire), wlan_wep(4), wlan_ccmp(4) и wlan_tkip(4). o В GENERIC добавлена опция TCP_DROP_SYNFIN; o Для платформы ia64 в GENERIC по умолчанию включен SMP режим. * Библиотека тредов (1:1) libthr оптимизирована и используется по умолчанию. * Выделение кода KSE в опцию ядра. При компиляции ядра на основе собственных конфигурационных файлов необходимо включать 'options KSE'. В случае использования libthr вместо libpthread в KSE нет необходимости. * Новые sysctl переменные: o kern.hostuuid - содержит уникальный идентификатор хоста UUID (Universally Unique Identifier), неизменный между перезагрузками (сохраняется в /etc/hostid); o kern.conftxt - позволяет посмотреть содержимое файла конфигурации для текущей сборки ядра; o kern.malloc_stats - статистика распределения памяти ядром (kernel malloc); o kern.forcesigexit - заставляет завершать работу процесса по sigexit в случае удержания нитью сигнала "trap" или игнорирования текущим процессом. Включено по умолчанию. o vm.kmem_size_min (только для loader) - позволяет задавать минимальное значение vm.kmem_size. o debug.mpsafevfs (только для loader) - для архитектур ia64 и powerpc MPSAFE режим отладки кода vfs включен по умолчанию. o vm.zone_stats - позволяет получить статистику работы uma аллокатора памяти. o переменная hw.pci.do_powerstate разделена на две части: hw.pci.do_powerstate_nodriver и hw.pci.do_powerstate_resume. o net.inet.icmp.reply_from_interface - включает отправку ICMP ответов на нелокальные запросы, с IP на который пришел данный пакет. o net.inet.icmp.quotelen - изменяет размер цитируемой части TCP запроса при генерации ICMP ответа (минимум 8 байт, максимум - размер mbuf). * Усовершенствован режим эмуляции Linux (Linuxulator), произведен переход на использование 2.6.16 Linux ядра. Возможность не включена по умолчанию и является экспериментальной, для включения необходимо установить значение sysctl переменной compat.linux.osrelease в "2.6.16". * В PCI подсистему ядра добавлена поддержка Message Signaled Interrupts (MSI) и Extended Message Signaled Interrupts (MSI-X); * Добавлен новый интерфейс проверки привилегий внутри ядра - priv(9). Это замена существующему интерфейсу suser(9). priv(9) позволяет более гибко ограничивать привилегии пользователю, и является вариантом реализации POSIX capabilities. * Поддержка параллельного чтения данных из файла (read(2)/readv(2)) разными процессами. * Переработанный планировщик задач ULE (SCHED_SMP), отличающийся повышенной стабильностью и производительностью, как на однопроцессорных машинах, так и на SMP системах. В сочатании с оптимизацией в других подсистемах, разработчики добились увеличения производительности в тестах на 350% по сравнению с FreeBSD 6, при высокой нагрузке прирост производительности отмечен до 1500%. * Реализованы очереди сигналов SIGCHLD, настраиваемые через sysctl переменную kern.sigqueue.queue_sigchild. * RedZone - улучшение безопасности работы с памятью на уровне ядра, через защиту буфера от повреждения при выделении/освобождении памяти во время вызова malloc(9). * Экспериментальная поддержка POSIX Message Queue (P1003_1B_MQUEUE); * Переработан механизм блокировок для UNIX domain socket - улучшена скорость выполнения параллельных операций с сокетом и производительность на SMP системах; * Изменен API системы Newbus (архитектура для написания драйверов устройств), добавлены средства для фильтрации прерываний; * В загрузчике (Boot Loader) появилась поддержка firewire(4) и dcons(4), добавлена новая опция "-s" для задания скорости консоли привязанной к последовательному порту. Поддержка оборудования * ACPI, управление питанием и температурой: o acpi_dock(4) - драйвер для взаимодействия с док-станциями; o acpi_thermal(4) драйвер для регулирования температуры посредством ACPI. o Драйвер coretemp(4) для опроса температурных датчиков процессора Intel Core; o В cpufreq(4) драйвере появилась поддержка процессоров VIA C7-M. * Избавление от глобальных блокировок, мешающих оптимальной работе на многопроцессорных системах (приведение к MPSAFE виду): firewire(4), snd_cmi(4), snd_solo(4), bge(4), cm(4), natm(4), ng_h4(4), ng_ppp(4), ahc(4), ahd(4), подсистема CAM, ciss(4), isp(4), mpt(4) * Удалена поддержка архитектуры Alpha. Добавлена поддержка архитектуры UltraSPARC-T1, работа FreeBSD/sun4v проверена на серверах Sun Fire T1000 и Sun Fire T2000. * Обеспечена работа по умолчанию обоих ядер (core) двуядерных процессоров, таких как Intel Core Duo, в SMP сборках ядра (kernel) FreeBSD; * В драйвере uart(4) появилась поддержка доступа к устройствам LOM (Lights Out Management) и RSC (Remote System Control), как к консоли; * В драйвер uark(4) добавлена поддержка USB адаптеров последовательного интерфейса, основанных на чипе Arkmicro Technologies ARK3116; * Поддержка мультимедиа o Новый midi(4) драйвер, основанный на коде из NetBSD. Поддерживается в драйверах snd_cmi(4) и snd_emu10k1(4). o Новые драйверы: + snd_emu10kx(4) с поддержкой звуковых карт Creative SoundBlaster Live и Audigy; + snd_envy24(4) с поддержкой звуковых карт на базе чипов Envy24, а также snd_envy24ht(4) с поддержкой аудиочипов VIA Envy24HT. + snd_hda(4) с поддержкой Intel High Definition Audio + snd_spicds с поддержкой аудио кодека I2S SPI; o В драйвере uaudio(4) реализована поддержка 24/32-битных аудио форматов и их преобразования; * Сетевые устройства o TCP стек избавлен от глобальных блокировок (Giant Lock), мешающих оптимальной работе на многопроцессорных системах. Ряд оптимизиций (см. ниже) позволил добиться увеличения производительности в разы. Удален отладочный и сопутствующий Giant-локам код, за компанию удалена поддержка IPX поверх IP, временно отключены модули ISDN4BSD и netatm. o Поддержка группировки сетевых интерфейсов портирована из OpenBSD. Например, позволяет применить правило пакетного фильтра сразу для нескольких интерфейсов объединенных в группу; o Значительно переработан беспроводной стек 802.11. Добавлена возможность фонового обнаружения сетей, роуминга между точками доступа, поддержка 802.11n устройств и 900 MHz карт, половинной (15dBm) и четвертной (12dBm) выходной мощности каналов каналов для 802.11a; o Добавлена поддержка altq в драйверы: axe(4), gem(4), vge(4) o Новые драйверы: + cxgb(4) с поддержкой 10 Gigabit Ethernet адаптеров на базе чипов Chelsio T3 и T3B; + ixgbe(4) - Intel 10G PCI-Express adapter (82598); + msk(4) - Marvell/SysKonnect Yukon II Gigabit Ethernet; + mxge(4) - Myricom Myri10GE 10 Gigabit Ethernet; + nfe(4) - открытый драйвер для nForce Ethernet, портированный из OpenBSD; + nxge(4) - Neterion Xframe 10 Gigabit Ethernet; + rum(4) - беспроводные карты на базе чипов Ralink RT2501USB и RT2601USB; + wpi(4) - Intel 3945 Wireless LAN Controller. + zyd(4) - беспроводные карты ZyDAS ZD1211/ZD1211B USB IEEE 802.11 b/g; o Обновлены драйверы: + em(4), добавлена поддержка Intel адаптеров 80003, 82571, 82571EB, 82572, 82575, ICH8. Значительно увеличена производительность, за счет более быстрой обработки прерываний и использования обработчика "taskqueue" вместо "ithread". + ipw(4), iwi(4) - firmware для беспроводных карт теперь в комплекте, и не требует установки портов net/ipw-firmware-kmod, net/iwi-firmware-kmod, net/iwi-firmware или net/ipw-firmware; + В re(4) появилась поддержка D-Link DGE-528(T) Gigabit Ethernet Сетевые протоколы * Добавлен JIT (Just-In-Time) компилятор BPF правил отсеивания пакетов в bpf(4) и ng_bpf(4). Для включения нужно пересобрать ядро с опцией BPF_JITTER, временно отключить можно через sysctl net.bpf_jitter.enable; * Реализована поддержка IPv6 поверх GRE туннелей; * В if_bridge появилась поддержка RSTP (Rapid Spanning Tree Protocol, 802.1w), добавлен атрибут private, который позволяет помечать порты, между которыми запрещено передавать трафик; * Снято фиксированное ограничение на размер IPv4 multicast групп; * В пакетном фильтре ipfw(4) реализована поддержка фильтрации заголовков "Routing Header Type 0" и "Mobile IPv6 Routing Header Type". Удален код пакетного фильтра ip6fw(8), так как в ipfw(4) реализована полноценная поддержка IPv6; * Удалена KAME реализация IPSec, на ее место пришел FAST_IPSEC, в котором добавлена поддержка IPv6 и аппаратной акселерации шифрования; * Из OpenBSD/NetBSD портирован драйвер для объединения каналов в виртуальный сетевой интерфейс с возможностью обеспечения бесперебойной работы - lagg(4); * Новые Netgraph узлы: o ng_car - реализация различных алгоритмов ограничения трафика и rate-лимитов. o ng_deflate с поддержкой Deflate сжатия для PPP; o ng_pred1 c поддержкой Predictor-1 сжатия для PPP; * Новая опция сокетов - IP_MINTTL, позволяющая задать минимальный TTL пакетов, которые будут приниматься, пакеты с меньшим TTL будут отбрасываться. Например, при установке IP_MINTTL в 255 будут обслуживаться только запросы с локальной машины. * В ppp(4) драйвере, реализованном на уровне ядра, появилась поддержка IPv6; * Реализовано IP сокетов Source-Specific Multicast (SSM, RFC 3678); * Добавлена поддержка протокола SCTP (Stream Control Transmission Protocol). Включается через опцию ядра SCTP, по умолчанию активно в GENERIC конфигурации; * Поддержка TSO (TCP/IP segmentation offload) - снижение нагрузки системы через вынос некоторых моментов обработки TCP соединений на плечи сетевых карт (поддержка в em(4), mxge(4) и cxgb(4)); * Динамическое вычисление размера send/receive TCP буферов (размер автоматически варьируется в зависимости от типа сетевой активности). Управление через sysctl переменные net.inet.tcp.sendbuf_* и net.inet.tcp.recvbuf_*. * Интеграция libalias в ipfw2, трансляцией адресов теперь можно управлять через набор команд "ipfw nat". Диски и системы хранения данных * gjournal - GEOM класс для журналирования, работающий на уровне блоков и не зависящий от типа файловой системы. В настоящее время реализована поддержка журналирования UFS; * gvirstor - GEOM класс для создания виртуальных дисковых разделов. Например, при помощи gvirstor можно объединить группу дисков в одно большое хранилище и в дальнейшем подключать к нему новые диски; * gmultipath(8) - GEOM класс для создания нескольких точек доступа к диску; * Новые драйверы o hptiop(4) - Highpoint RocketRAID 3xxx и 4xxx серии SAS и SATA RAID контроллеры; o hptrr(4) - HighPoint RocketRAID; o Новый драйвер scsi_sg, который эмулирует большую часть Linux SCSI SG и позволяет запускать программы, использующее данное API, в Linux эмуляторе посредством /dev/sg*; o Реализация iSCSI Initiator, для удаленного доступа к iSCSI устройствам по сети. Управление производится через утилиту iscontrol * Обновленные драйверы o aac(4) - добавлена поддержка контроллеров Adaptec 2610SA SATA-RAID, используемых в некоторых машинах производства Hewlett-Packard; o GEOM класс g_md.ko переименован в geom_md.ko o hptmv(4) теперь поддерживает amd64 также хорошо как и PAE. o mpt(4) - значительно расширены возможности, добавлены средства управления RAID разделами, возможность просмотра состояния и уровня ресинхронизации. Реализована поддержка SAS HBA, 64-bit PCI, режима пересылки больших блоков данных; o twa(4) - синхронизирован с последней версией драйвера с сайта 3ware. Добавлена поддержка AMCC 3ware 9650 серии SATA контроллеров. o umass - расширены возможности драйвера для устройств хранения данных с USB интерфейсом Файловые системы * Избавление серверной и клиентской частей NFS и pseudofs (procfs, linprocfs и linsysfs) от глобальных блокировок, что позволяет добиться значительного увеличения производительности на многопроцессорных системах. * Добавлена реализация файловой системы tmpfs, которая была разработана в рамках программы Google "Summer of Code" для проекта NetBSD, от куда и была портирована во FreeBSD. * Новая, более стабильная, реализация файловой системы unionfs; * Поддержка файловой системы ZFS, портированной из OpenSolaris. ZFS доступна для платформ amd64, i386 и pc98. * Реализация файловой системы XFS, работающей пока только в режиме чтения. Код был портирован из реализации XFS для Linux, распространяемой компанией SGI. Пользовательский уровень * Изменения в библиотеках o Библиотечные вызовы addr2ascii() и ascii2addr(), представленные в INRIA реализации IPv6, удалены из libc; o Из структуры addrinfo исключено поле ai_addrle, в целях сохранения совместимости ABI с 64-битными сборками; o В библиотеке libelf реализована SVR4 elf и gelf API для манипуляции ELF файлами; o В библиотеке libarchive добавлена поддержка ar-архивов и расширенных атрибутов файлов в стиле POSIX.1e. o Библиотечные вызовы семейства setenv переведены от исторического BSD варианта к POSIX. o В libc и libm библиотеки включена поддержка карт экспортируемых имен и версий (symbol maps, symbol version definitions). o Код библиотеки libedit обновлен из дерева исходных текстов NetBSD, в состоянии за август 2005 года. o Новая реализация malloc - jemalloc, оптимальная для многонитевых приложений; o Код DNS-резолвера в библиотеке libc импортирован из BIND 9.4.1; o В стандартной библиотеке реализована функция wcsdup(). * Новые и удаленные утилиты: o ipfwpcap - утилита для захвата пакетов через divert сокет и сохранения их в формате pcap; o sade - наглядный редактор дисковых разделов, в стиле sysinstall. o nscd - новый демон для кэширования nsswitch запросов (обращение к файлам с базой пользователей, групп, /etc/services); o wpa_passphrase - новая утилита для генерации 256-битных WPA ключей на основе ASCII пароля. o Демон mrouted перемещен из базовой системы в порты (net/mrouted) o Удалены сопутствующие mount_* утилиты (mount_devfs, mount_ext2fs, mount_fdescfs, mount_linprocfs, mount_procfs, mount_std, mount_linsysfs, mount_reiserfs, mount_umapfs), тип файловой системы следует задавать через опцию '-t'; o Удалены утилиты objformat и getobjformat, работающие с файлами в формате a.out; o Удалена программа usbd, отныне следует использовать devd; o Удалена утилита vnconfig(8), отныне следует использовать mdconfig; o Удалена утилита wicontrol, для конфигурации беспроводных интерфейсов нужно использовать ifconfig(8). * Измененные утилит: o atrun и cron - появилась поддержка PAM; o camcontrol - добавлена команда readcap для просмотра размера устройств; o dhclient - реализована поддержка RFC 3442 (опция Classless Static Route); o dump и restore - научились сохранять и восстанавливать расширенные атрибуты файлов; o fdisk - добавлен "-p" флаг для вывода информации о слайсах в формате конфигурации fdisk; o find - исправлена ошибка, не позволяющая использовать цифровые идентификаторы в опциях -user и -group; o В утилите обновления freebsd-update появилась поддержка команды "upgrade", для бинарного обновления системы до нового релиза; o ftpd - добавлена поддержка RFC2389 (FEAT) и RFC2640 (UTF8, включается через опцию -8); o gpt - добавлена поддержка установки меток на GPT дисковые разделы o gvinum - новая команда resetconfig; o hccontrol - появилась поддержка автоопределения HCI узлов; o В утилите id отныне EUID выводится перед номером группы; o mdconfig - возможность получения списка устройств (list, query) в XML формате. Добавлена опция '-u' для указания списка устройств, перечисленных через запятую; o mdmfs - новая опция "-P", позволяющая пропустить выполнение newfs, а также опция "-E" для указания точного пути к утилите mdconfig. o mount - исправлена ошибка возникающая при переводе раздела из read-only режима в read-write, посредством вызова "mount -u -o rw". o pkill - реализована опция "-F" для ограничения срабатывания при выборке по маске, если для PID процесса существует PID-файл. Кроме того, добавлен флаг "-i", аналогичный интерактивному режиму команды rm, т.е. перед отправкой сигнала спрашивает разрешение. o pw(8) новый флаг "-M", для задания прав доступа на создаваемую домашнюю директорию пользователя. o В rpcbind появилась возможность привязки к определенному IP (-h), в rpc.lockd и rpc.statd - изменения номера порта (-p); o time - отправив сигнал SIGINFO еще не завершенному time процессу, можно получить данные о статистике на текущий момент. o В команде top при помощи флага -j теперь можно увидеть идентификатор jail окружения в котором выполняется процесс; o В утилите truss реализован режим эмуляции strace (-s). Кроме того, truss больше не привязана к псевдо-ФС procfs и работает через ptrace. * Безопасность: o В gcc по умолчанию включена защита от атак направленных на переполнение стека - SSP (Stack-Smashing Protector); o GSS-API v2, новый уровень, поддерживающий механизм GSS-API плагинов (подобный реализации в Solaris); o PAM модуль pam_nologin перестал выполнять аутентификацию и теперь предназначен только для аккаунтинга. В файлах внутри директории /usr/local/etc/pam.d может потребоваться ручная замена строк вида "auth required pam_nologin.so no_warn", на "account required pam_nologin.so no_warn"
* Обновление сторонних программ, входящих в базовую систему: o GCC обновлен до версии 4.2.1 (был 3.4.6). o Intel ACPI-CA 20070320. o awk релиз от 1 мая 2007 г. o BIND обновлен с версии 9.3.3 до 9.4.2. o BSNMPD обновлен с 1.11 до 1.12. o BZIP2 обновлен с 1.0.3 до 1.0.4 o GNU Diffutils обновлены с 2.7 до 2.8.7. o Утилита file обновлена с 4.12 до 4.23. o Библиотека GNU Readline обновлена до версии 5.2 patch 2. o GNU версия gzip заменена BSD вариантом из проекта NetBSD. o IPFilter обновлен с версии 4.1.13 до 4.1.28. o Библиотека libpcap обновлена с 0.9.4 до 0.9.8. o Утилита netcat и пакетный фильтр PF обновлены до версий из состава OpenBSD 4.1; o Библиотека OpenSSL обновлена до версии 0.9.8e (была 0.9.7e). o sendmail обновлен с версии 8.13.8 до 8.14.2. o Обновлен пакет TrustedBSD OpenBSM с альфа версии до релиза 1.0. Интересные подробности, касающиеся FreeBSD 7, можно почерпнуть из подробного интервью с разработчиками. Например, подробно рассказано, как удалось увеличения производительности TCP стека в 3-5 раз, что дает возможность справляться с нагрузкой на 1 и 10 гигабитных линках. Этого удалось достигнуть благодаря средствами автовычисления размера TCP буферов, реализации параллельного выполнения операций с SYN-кэшем, новой реализации системного вызова sendfile(2), перехода с socopyin() на m_uiotombuf(),добавления дополнительного указателя на следующий блок отправляемых данных в цепочке mbuf, уменьшения накладных расходов и переключений контекста при обработке пакетов приходящих из сетевой карты. http://www.opennet.ru/opennews/art.shtml?num=14429