Официально анонсирован релиз FreeBSD 7.0, обзор новшеств
28 февраля 2008 года
После двух с половиной лет разработки, анонсирован выход релиза 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).
- zs, функции которого продублированы в uart(4).
- el(4)
- 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 (Архивная копия от 9 октября 2008 на Wayback Machine)), отличающийся повышенной стабильностью и производительностью, как на однопроцессорных машинах, так и на 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;
- 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;
- Обновлены драйверы:
- 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 узлы:
- ng_car - реализация различных алгоритмов ограничения трафика и rate-лимитов.
- ng_deflate с поддержкой Deflate сжатия для PPP;
- 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 (Архивная копия от 18 октября 2021 на Wayback Machine) в ipfw2, трансляцией адресов теперь можно управлять через набор команд "ipfw nat".
Диски и системы хранения данных
- gjournal - GEOM класс для журналирования, работающий на уровне блоков и не зависящий от типа файловой системы. В настоящее время реализована поддержка журналирования UFS;
- gvirstor - GEOM класс для создания виртуальных дисковых разделов. Например, при помощи gvirstor можно объединить группу дисков в одно большое хранилище и в дальнейшем подключать к нему новые диски;
- gmultipath(8) - GEOM класс для создания нескольких точек доступа к диску;
- Новые драйверы
- hptiop(4) - Highpoint RocketRAID 3xxx и 4xxx серии SAS и SATA RAID контроллеры;
- hptrr(4) - HighPoint RocketRAID;
- Новый драйвер 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, можно почерпнуть из подробного интервью с разработчиками (Архивная копия от 22 апреля 2018 на Wayback Machine). Например, подробно рассказано, как удалось увеличения производительности TCP стека в 3-5 раз, что дает возможность справляться с нагрузкой на 1 и 10 гигабитных линках. Этого удалось достигнуть благодаря средствам автовычисления размера TCP буферов, реализации параллельного выполнения операций с SYN-кэшем, новой реализации системного вызова sendfile(2), перехода с socopyin() на m_uiotombuf(),добавления дополнительного указателя на следующий блок отправляемых данных в цепочке mbuf, уменьшения накладных расходов и переключений контекста при обработке пакетов приходящих из сетевой карты.
Источники
правитьЛюбой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.