Официально анонсирован релиз 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), отличающийся повышенной стабильностью и производительностью, как на однопроцессорных машинах, так и на 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, уменьшения накладных расходов и переключений контекста при обработке пакетов приходящих из сетевой карты.

Источники править

 
 
Creative Commons
Эта статья содержит материалы из статьи «Официально анонсирован релиз FreeBSD 7.0, обзор новшеств», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
 
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.