Главная » 2008»Февраль»29 » Официально анонсирован релиз FreeBSD 7.0, обзор новшеств
Официально анонсирован релиз FreeBSD 7.0, обзор новшеств
10:03
После двух с половиной лет разработки, анонсирован выход релиза FreeBSD 7.0. Ниже обзор новшеств.
Ядро
В подсистемы ядра ipsec и geli (шифрование диска) добавлена поддержка 128-битного блочного шифра Camellia, который был разработан компанией Mitsubishi Electric Corporation и открыт для свободного использования весной 2007 года.
Сборка и конфигурирование ядра
Опция сборки ядра COMPAT_43 признана ненужной и удалена из конфигурации.
Удалена опция PIM, вместо нее следует использовать MROUTING
Удален код драйверов:
cvt(4), альтернативной реализации syscons(4)
sab(4), который заменен новым драйвером scc(4) (Serial Communications Controllers).
lnc(4), поддержка устройств обеспечена драйверами le(4) и pcn(4);
bridge(4), вместо него следует использовать if_bridge(4).
rr232x(4), следует использовать hptrr(4)
В GENERIC ядре по умолчанию включен cpufreq, драйвер dumb консоли, драйвер uart(4) , fwip (IP over FireWire), wlan_wep(4), wlan_ccmp(4) и wlan_tkip(4).
В GENERIC добавлена опция TCP_DROP_SYNFIN;
Для платформы ia64 в GENERIC по умолчанию включен SMP режим.
Библиотека тредов (1:1) libthr оптимизирована и используется по умолчанию.
Выделение кода KSE в опцию ядра. При компиляции ядра на основе собственных конфигурационных файлов необходимо включать 'options KSE'. В случае использования libthr вместо libpthread в KSE нет необходимости.
Новые sysctl переменные:
kern.hostuuid - содержит уникальный идентификатор хоста UUID (Universally Unique Identifier), неизменный между перезагрузками (сохраняется в /etc/hostid);
kern.conftxt - позволяет посмотреть содержимое файла конфигурации для текущей сборки ядра;
kern.malloc_stats - статистика распределения памяти ядром (kernel malloc);
kern.forcesigexit - заставляет завершать работу процесса по sigexit в случае удержания нитью сигнала "trap" или игнорирования текущим процессом. Включено по умолчанию.
vm.kmem_size_min (только для loader) - позволяет задавать минимальное значение vm.kmem_size.
debug.mpsafevfs (только для loader) - для архитектур ia64 и powerpc MPSAFE режим отладки кода vfs включен по умолчанию.
vm.zone_stats - позволяет получить статистику работы uma аллокатора памяти.
переменная hw.pci.do_powerstate разделена на две части: hw.pci.do_powerstate_nodriver и hw.pci.do_powerstate_resume.
net.inet.icmp.reply_from_interface - включает отправку ICMP ответов на нелокальные запросы, с IP на который пришел данный пакет.
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, управление питанием и температурой:
acpi_dock(4) - драйвер для взаимодействия с док-станциями;
acpi_thermal(4) драйвер для регулирования температуры посредством ACPI.
Драйвер coretemp(4) для опроса температурных датчиков процессора Intel Core;
В 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;
Поддержка мультимедиа
Новый midi(4) драйвер, основанный на коде из NetBSD. Поддерживается в драйверах snd_cmi(4) и snd_emu10k1(4).
Новые драйверы:
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;
В драйвере uaudio(4) реализована поддержка 24/32-битных аудио форматов и их преобразования;
Сетевые устройства
TCP стек избавлен от глобальных блокировок (Giant Lock), мешающих оптимальной работе на многопроцессорных системах. Ряд оптимизиций (см. ниже) позволил добиться увеличения производительности в разы. Удален отладочный и сопутствующий Giant-локам код, за компанию удалена поддержка IPX поверх IP, временно отключены модули ISDN4BSD и netatm.
Поддержка группировки сетевых интерфейсов портирована из OpenBSD. Например, позволяет применить правило пакетного фильтра сразу для нескольких интерфейсов объединенных в группу;
Значительно переработан беспроводной стек 802.11. Добавлена возможность фонового обнаружения сетей, роуминга между точками доступа, поддержка 802.11n устройств и 900 MHz карт, половинной (15dBm) и четвертной (12dBm) выходной мощности каналов каналов для 802.11a;
Добавлена поддержка altq в драйверы: axe(4), gem(4), vge(4)
Новые драйверы:
cxgb(4) с поддержкой 10 Gigabit Ethernet адаптеров на базе чипов Chelsio T3 и T3B;
ixgbe(4) - Intel 10G PCI-Express adapter (82598);
msk(4) - Marvell/SysKonnect Yukon II Gigabit Ethernet;
zyd(4) - беспроводные карты ZyDAS ZD1211/ZD1211B USB IEEE 802.11 b/g;
Обновлены драйверы:
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;
В 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 узлы:
ng_car - реализация различных алгоритмов ограничения трафика и rate-лимитов.
ng_deflate с поддержкой Deflate сжатия для PPP;
ng_pred1 c поддержкой Predictor-1 сжатия для PPP;
Новая опция сокетов - IP_MINTTL, позволяющая задать минимальный TTL пакетов, которые будут приниматься, пакеты с меньшим TTL будут отбрасываться. Например, при установке IP_MINTTL в 255 будут обслуживаться только запросы с локальной машины.
В ppp(4) драйвере, реализованном на уровне ядра, появилась поддержка IPv6;
Добавлена поддержка протокола 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 класс для создания нескольких точек доступа к диску;
Новые драйверы
hptiop(4) - Highpoint RocketRAID 3xxx и 4xxx серии SAS и SATA RAID контроллеры;
Новый драйвер scsi_sg, который эмулирует большую часть Linux SCSI SG и позволяет запускать программы, использующее данное API, в Linux эмуляторе посредством /dev/sg*;
Реализация iSCSI Initiator, для удаленного доступа к iSCSI устройствам по сети. Управление производится через утилиту iscontrol
Обновленные драйверы
aac(4) - добавлена поддержка контроллеров Adaptec 2610SA SATA-RAID, используемых в некоторых машинах производства Hewlett-Packard;
GEOM класс g_md.ko переименован в geom_md.ko
hptmv(4) теперь поддерживает amd64 также хорошо как и PAE.
mpt(4) - значительно расширены возможности, добавлены средства управления RAID разделами, возможность просмотра состояния и уровня ресинхронизации. Реализована поддержка SAS HBA, 64-bit PCI, режима пересылки больших блоков данных;
twa(4) - синхронизирован с последней версией драйвера с сайта 3ware. Добавлена поддержка AMCC 3ware 9650 серии SATA контроллеров.
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.
Пользовательский уровень
Изменения в библиотеках
Библиотечные вызовы addr2ascii() и ascii2addr(), представленные в INRIA реализации IPv6, удалены из libc;
Из структуры addrinfo исключено поле ai_addrle, в целях сохранения совместимости ABI с 64-битными сборками;
В библиотеке libelf реализована SVR4 elf и gelf API для манипуляции ELF файлами;
В библиотеке libarchive добавлена поддержка ar-архивов и расширенных атрибутов файлов в стиле POSIX.1e.
Библиотечные вызовы семейства setenv переведены от исторического BSD варианта к POSIX.
В libc и libm библиотеки включена поддержка карт экспортируемых имен и версий (symbol maps, symbol version definitions).
Код библиотеки libedit обновлен из дерева исходных текстов NetBSD, в состоянии за август 2005 года.
Новая реализация malloc - jemalloc, оптимальная для многонитевых приложений;
Код DNS-резолвера в библиотеке libc импортирован из BIND 9.4.1;
В стандартной библиотеке реализована функция wcsdup().
Новые и удаленные утилиты:
ipfwpcap - утилита для захвата пакетов через divert сокет и сохранения их в формате pcap;
sade - наглядный редактор дисковых разделов, в стиле sysinstall.
nscd - новый демон для кэширования nsswitch запросов (обращение к файлам с базой пользователей, групп, /etc/services);
wpa_passphrase - новая утилита для генерации 256-битных WPA ключей на основе ASCII пароля.
Демон mrouted перемещен из базовой системы в порты (net/mrouted)
Удалены сопутствующие mount_* утилиты (mount_devfs, mount_ext2fs, mount_fdescfs, mount_linprocfs, mount_procfs, mount_std, mount_linsysfs, mount_reiserfs, mount_umapfs), тип файловой системы следует задавать через опцию '-t';
Удалены утилиты objformat и getobjformat, работающие с файлами в формате a.out;
Удалена программа usbd, отныне следует использовать devd;
Удалена утилита vnconfig(8), отныне следует использовать mdconfig;
Удалена утилита wicontrol, для конфигурации беспроводных интерфейсов нужно использовать ifconfig(8).
Измененные утилит:
atrun и cron - появилась поддержка PAM;
camcontrol - добавлена команда readcap для просмотра размера устройств;
dhclient - реализована поддержка RFC 3442 (опция Classless Static Route);
dump и restore - научились сохранять и восстанавливать расширенные атрибуты файлов;
fdisk - добавлен "-p" флаг для вывода информации о слайсах в формате конфигурации fdisk;
find - исправлена ошибка, не позволяющая использовать цифровые идентификаторы в опциях -user и -group;
В утилите обновления freebsd-update появилась поддержка команды "upgrade", для бинарного обновления системы до нового релиза;
ftpd - добавлена поддержка RFC2389 (FEAT) и RFC2640 (UTF8, включается через опцию -8);
gpt - добавлена поддержка установки меток на GPT дисковые разделы
gvinum - новая команда resetconfig;
hccontrol - появилась поддержка автоопределения HCI узлов;
В утилите id отныне EUID выводится перед номером группы;
mdconfig - возможность получения списка устройств (list, query) в XML формате. Добавлена опция '-u' для указания списка устройств, перечисленных через запятую;
mdmfs - новая опция "-P", позволяющая пропустить выполнение newfs, а также опция "-E" для указания точного пути к утилите mdconfig.
mount - исправлена ошибка возникающая при переводе раздела из read-only режима в read-write, посредством вызова "mount -u -o rw".
pkill - реализована опция "-F" для ограничения срабатывания при выборке по маске, если для PID процесса существует PID-файл. Кроме того, добавлен флаг "-I", аналогичный интерактивному режиму команды rm, т.е. перед отправкой сигнала спрашивает разрешение.
pw(8) новый флаг "-M", для задания прав доступа на создаваемую домашнюю директорию пользователя.
В rpcbind появилась возможность привязки к определенному IP (-h), в rpc.lockd и rpc.statd - изменения номера порта (-p);
time - отправив сигнал SIGINFO еще не завершенному time процессу, можно получить данные о статистике на текущий момент.
В команде top при помощи флага -j теперь можно увидеть идентификатор jail окружения в котором выполняется процесс;
В утилите truss реализован режим эмуляции strace (-s). Кроме того, truss больше не привязана к псевдо-ФС procfs и работает через ptrace.
Безопасность:
В gcc по умолчанию включена защита от атак направленных на переполнение стека - SSP (Stack-Smashing Protector);
GSS-API v2, новый уровень, поддерживающий механизм GSS-API плагинов (подобный реализации в Solaris);
PAM модуль pam_nologin перестал выполнять аутентификацию и теперь предназначен только для аккаунтинга. В файлах внутри директории /usr/local/etc/pam.d может потребоваться ручная замена строк вида "auth required pam_nologin.so no_warn", на "account required pam_nologin.so no_warn"
Обновление сторонних программ, входящих в базовую систему:
GCC обновлен до версии 4.2.1 (был 3.4.6).
Intel ACPI-CA 20070320.
awk релиз от 1 мая 2007 г.
BIND обновлен с версии 9.3.3 до 9.4.2.
BSNMPD обновлен с 1.11 до 1.12.
BZIP2 обновлен с 1.0.3 до 1.0.4
GNU Diffutils обновлены с 2.7 до 2.8.7.
Утилита file обновлена с 4.12 до 4.23.
Библиотека GNU Readline обновлена до версии 5.2 patch 2.
GNU версия gzip заменена BSD вариантом из проекта NetBSD.
IPFilter обновлен с версии 4.1.13 до 4.1.28.
Библиотека libpcap обновлена с 0.9.4 до 0.9.8.
Утилита netcat и пакетный фильтр PF обновлены до версий из состава OpenBSD 4.1;
Библиотека OpenSSL обновлена до версии 0.9.8e (была 0.9.7e).
sendmail обновлен с версии 8.13.8 до 8.14.2.
Обновлен пакет TrustedBSD OpenBSM с альфа версии до релиза 1.0.
Интересные подробности, касающиеся FreeBSD 7, можно почерпнуть из подробного интервью с разработчиками. Например, подробно рассказано, как удалось увеличения производительности TCP стека в 3-5 раз, что дает возможность справляться с нагрузкой на 1 и 10 гигабитных линках. Этого удалось достигнуть благодаря средствам автовычисления размера TCP буферов, реализации параллельного выполнения операций с SYN-кэшем, новой реализации системного вызова sendfile(2), перехода с socopyin() на m_uiotombuf(),добавления дополнительного указателя на следующий блок отправляемых данных в цепочке mbuf, уменьшения накладных расходов и переключений контекста при обработке пакетов приходящих из сетевой карты.