DataLife Engine > Статьи > Новое во FreeBSD 9.0

Новое во FreeBSD 9.0


13-02-2012. Разместил: synergix

В версии FreeBSD 9.0-RELEASE было предоставлено множество нововведений, которые понравятся пользователям FreeBSD, разработчикам приложений, а также компаниям, использующим FreeBSD либо разрабатывающим свои продукты на базе этой операционной системы. В этой статье приведен обзор некоторых из этих новшеств, включая ссылки на дополнительную информацию. Все новые функции в статье не приводятся, т.к. они детально описаны в документе “FreeBSD 9.0 Detailed Release Notes” (доступном на freebsd.org), с описанием всех изменений версии 9.0.
В статье обсуждаются функции, относящиеся к следующим категориям: безопасность, компиляторы и фреймворки тестирования, файловые системы и системы хранения данных, сетевое взаимодействие и многое другое.



Безопасность
Фреймворк Capsicum
Capsicum – это легковесный фреймворк, который расширяет возможности ядра UNIX в cоответствии со стандартом POSIX, чтобы обеспечить новые возможности безопасности, а также добавляет специальный API для программ пользовательского уровня. Он был разработан совместно Univer-sity of Cambridge Computer Laboratory и Google.
Спонсировался также за счет гранта от компании Google. Операционная система FreeBSD выступала в проекте как платформа-прототип, а Chromium – как приложение-прототип. В ядре FreeBSD 9.0 заявлена поддержка фреймворка в качестве экспериментальной опции, поэтому исследователи и интересующиеся могут уже его опробовать. Поддержка на уровне приложений будет в следующем выпуске системы. Также есть планы выпустить во FreeBSD 9.1 некоторые приложения с поддержкой Capsicum. Традиционные фреймворки по контролю доступа спроектированы таким образом, чтобы пользователи были бы защищены друг от друга за
счет использования битов разрешений, а также за счет политик по мандатному доступу. Однако, такие механизмы не могут защитить пользователя когда приложение, такое как веб-браузер, обрабатывает несколько потенциально опасных потоков данных – HTML, скриптовые языки, небезопасные графические файлы. Capsicum дает разработчикам приложений хорошо отточенный инструмент по контролю за файлами и сетевыми сокетами, так что можно за счёт
минимального внесения изменений в код достичь разделения привилегий внутри самого приложения.
Другими словами, фреймворк дает приложению возможность создать несколько «песочниц», в
которых приложение будет выполнять несколько разных частей программы. В качестве примера может выступать браузер Chromium, в котором каждая открытая вкладка работает в своей «песочнице», точно также в отдельную «песочницу» можно поместить обработку каждого графического файла. Создание таких “песочниц” с помощью Capsicum не требует наличия привилегий, что обычно являлось ключевой проблемой в аналогичных решениях на платформе UNIX.
Яркий пример – добавив всего лишь 10 строк кода, такое небезопасное приложение как
tcpdump, может быть размещено в “песочнице” Capsicum. Для веб-браузера Chromium потребуется всего 100 новых строк. Посмотрите справку capsicum(4), чтобы получить представление о доступных системных вызовах. Для получения всей информации по проекту, включая ссылки на технические публикации, смотрите сайт Capsicum: http://www.cl.cam.ac.uk/research/security/capsicum/.

Разграничения по ресурсам
В систему было добавлено решение rctl(8), которое позволяет пользователю просмотреть текущие ограничения на ресурсы, а также определить те действия, что будут совершены когда процесс превысит эти ограничения. Правила могут быть назначены процессам, пользователям, классам, имеющим право входить в систему, или наложены на jails.
Специальное API, под названием racct, собирает информацию по ресурсам, потребляемым процессом, пользователем и т.д. Информацию по ресурсным ограничениям и утилите rctl можно найти по адресу: http://wiki.freebsd.org/Hierarchical_Resource_Limits.

Компиляторы и фреймворки тестирования
Инфраструктура компилятора LLVM

LLVM – это набор компилирующих утилит, который выпускается под лицензией BSD и обладает схожими чертами, что и коллекция GCC (идущая под лицензией GPL3). Clang – это фронтенд к LLVM для языков: C, C++, Objective C и Objective C++, обеспечивающий альтернативное программное решение для разработчиков и компаний, которые предпочитают использовать утилиты с BSD-лицензией. Кроме того, что Clang выпускается под BSD-лицензией, он может предложить разработчикам улучшенные возможности по повышению производительности своей работы, за счет проработанных сообщений об ошибках, анализатору статического кода и т.д. Компилятор может быть настроен для поддержки исследований в области новых инструкций языка или же измерения выполнения программного кода.
Начиная с версии FreeBSD 9.0, как само ядро, так и инфраструктура FreeBSD могут быть собраны Clang-компилятором на большинстве поддерживаемых архитектур. В процессе также находится работа по переводу системы портов на новую схему компиляции. Информация об архитектурной поддержке, оптимизациях линковщиков, генерации автотестов, а также дополнительные ресурсы можно найти на странице: http://wiki.freebsd.org/BuildingFreeBSDWith-Clang. Информация о Clang находится здесь – http://clang.llvm.org/, а о самом проекте LLVM – http://www.llvm.org/.
Видео от Brooks Davis, в котором рассказывается как проект FreeBSD активно работает по внедрению LLVM-инструментария в базовую систему, размещено на You-Tube: http://www.youtube.com/watch?v=yVaNAm8jR_U.
Вы также можете следить за статусом перевода системы портов на Clang на странице – http://wiki.free-bsd.org/PortsAndClang

DTrace на пользовательском уровне
DTrace – это легковесный фреймворк общего назначения, с помощью которого администраторы,
разработчики и пользователи могут исследовать причины системных отказов и ошибок, а также искать места, в которых теряется производительность. Поддержка DTrace на уровне ядра появилась во FreeBSD 8.0. Добавление же поддержки DTrace на пользовательском уровне в версии 9.0 позволяет проводить анализ программ пользовательского уровня и смотреть корреляцию полученных данных с данными ядра, что позволяет получить гораздо более
полную картину происходящего. На http://wiki.freebsd.org/DTrace можно обнаружить
примеры использования DTrace на FreeBSD как на уровне ядра, так и для пользовательских приложений.
Там же Вы найдете ссылки на другие ресурсы по теме.

Файловые системы и хранилища
Хранилище с высокой доступностью (HAST)
Фреймворк HAST (Highly Available Storage) предоставляет механизм синхронной репликации
на уровне блоков любых хранилищ данных на физически разнесенных серверах, подключённых
к TCP/IP-сети. HAST следует воспринимать как сетевое зеркало, схожее с DRBD в Linux. Будучи совместно использованным с carp(4), HAST позволяет создать высокодоступный кластер хранения данных, устойчивый к аппаратным проблемам. Фреймворк не привязан к какой-либо файловой системе или приложению и может быть совмещен с любым GEOM-классом. В случае, если первичный узел становится неисправным, то кластер автоматически переключается на второй узел, проверяет и монтирует файловую систему UFS, либо же импортирует ZFS-пул и продолжает работу без потери и бита информации. В настольной книге FreeBSD Handbook описывается, как можно настроить HAST: http://www.freebsd.org/doc/handbook/disks-hast.html

SU+J
UFS с журналируемыми softupdates на данный момент является файловой системой по умолчанию.
Как следует из названия, в ней была добавлена легковесная версия журнала, в соответствии с
http://www.mckusick.com/BSDCan/bsdcan2010.pdf. За счет этого было значительно сокращено время загрузки после неправильного выключения системы, т.к. фоновую проверку диска требуется запускать только если произошло разрушение лога журнала.

ZFSv28
FreeBSD 9.0 комплектуется с ZFSv28. В этой версии ZFS были добавлены следующие возможности:
• дедупликация: процесс устранения дублированных копий данных. Когда эта функция применяется к набору данных с дублирующейся информацией (например, виртуальные образы
или jails), то экономится место и увеличивается производительность диска за счет меньшего
объема записываемых и хранимых данных.
• тройная четность RAIDZ: RAIDZ3 работает с тремя дисками четности и может продолжать
функционирование в режиме деградации, если не более чем у 3 дисков начались проблемы,
причем не важно, на каких дисках они возникли
• zfs diff: команда, которая описывает какие изменения на уровне файловой системы произошли между 2 снапшотами
• zpool split: позволяет администратору извлекать содержимое диска из зеркалированного
устройства vdev и создавать новый пул данных с точной копией диска. Этот новый пул затем
может быть импортирован на любой машине
• удержание снапшотов: позволяет пользователям или приложениям размещать блокировки
на снапшотах, с целью предотвращения их удаления
• zpool import -F: позволяет администратору “перемотать” испорченный пул к более ранней
транзакции
• возможность импортировать zpool в режиме только для чтения.

Фреймворк общего назначения для GEOM I/O планировщиков
С помощью этого фреймворка достигается планирование дисковых I/O-запросов к устройству
независимым способом, так, чтобы можно было использовать несколько I/O-планировщиков для
различных I/O провайдеров. Фреймворк предоставляет пару простых алгоритмов, которые реализуют две формы предупреждающего планирования. За счет наличия двух разных планировщиков, пользователи могут сами выбрать наилучший для их задач механизм. При некоторых нагрузках (например, где чередуются операции по последовательному и
случайный вводу/выводу) можно достичь большей отзывчивости дисковой подсистемы. Примеры,
как можно задействовать эти планировщики, представлены на: http://svnweb.freebsd.org/base/
head/sys/geom/sched/README?view=markup&pathrev=206497.

Изменения в CAM и AHCI SATA
Новый драйвер ATA/SATA обеспечивает поддержку AHCI-совместимого оборудования, порт-умножителей, а также функции NCQ (tagged queueing) для повышения производительности современных SATA-дисков. Дисковая производительность была значительно увеличена, теперь поддерживаются режимы передачи больших блоков. Поддержка горячего подключения так же была улучшена. Диски ATA/SATA теперь могут нумероваться и ими можно управлять через camcontrol(8), по аналогии со SCSI-дисками. Подсистему cam(4) разбили на несколько модулей
(см. “В сети - Подсистема CAM“), а с разработкой и включением отдельных ATA/SATA-модулей в
подсистему теперь можно начинать вести речь о том, что она превращается в полноценный фреймворк, где может использоваться произвольный транспорт и протоколы. Она же позволит писать драйверы для поддержки какого-либо отдельного аппаратного решения, не подвергая угрозе стабильность работы не связанной с этим драйвером аппаратуры.

Изменения в инфраструктуре таймеров событий
Инфраструктура с новыми таймерами событий представляет унифицированный API для написания
драйверов этих таймеров, а также для выбора наилучших драйверов из машинно-независимого
кода. Поддержка обеспечивается как для событий каждого CPU, так и для событий всей системы, как для повторяющихся, так и для одноразовых, для архитектур i386 и amd64
Для улучшения производительности в виртуальных машинах, а также эффективного использования
энергии в ноутбуках, по умолчанию будет выбран режим динамического цикла, заменяя периодические аппаратные прерывания таймера единственным циклом изменяемого периода.
Это экономит время CPU, которое в противном случае тратилось бы на обработку прерываний
таймера, не привязанных к выполнению какого-либо действия. Привычный режим может быть
включён установкой значения kern.eventtimer.periodic в 1 с помощью sysctl. Технические подробности о динамическом цикле могут быть найдены на http://permalink.gmane.org/gmane.os.freebsd.architech-ture/13276

Сетевое взаимодействие
Пять новых TCP-алгоритмов контроля потока
Центр для изучения интернет-архитектур Технологического Университета имени Суинбурна, при поддержке фонда исследовательских программ из Cisco University (в Кремниевой долине) и FreeBSD Foundation, внёс улучшения в TCP-стек FreeBSD для поддержки новых алгоритмов контроля потока. Эти улучшения включают в себя модульный фреймворк, который будет использоваться для добавления будущих алгоритмов, а также для существующих реализаций алгоритмов: H-TCP, CUBIC, Vegas, HD и CHD. Все разработанные алгоритмы выполнены в
качестве подгружаемых модулей ядра. Они могут быть выбраны исходя из сетевых/программных
характеристик и в зависимости от требований данной конкретной хост-машины. Модульный каркас обеспечивает разработчикам гибкость при создании новых алгоритмов, выводя TCP-стек FreeBSD на передний край разработок в этой области, при сохранении зарекомендовавшей себя стабильности сетевого стека. Ссылки на технические публикации работ по фреймворку и алгоритмам могут быть найдены: http://caia.swin.edu.au/freebsd/5cc/.

“IPv6-Only”
Операционная система FreeBSD находится на переднем крае развития IPv6, начиная с момента
выпуска FreeBSD 4.0 в 2000 году, когда была реализована референтная поддержка проекта KAME
для сетей IPv4/IPv6. Более того, проект FreeBSD размещает файлы релизов операционной системы на своих IPv6-серверах уже более 8 лет, а вся инфраструктура для разработчиков, списки рассылок, веб-сайтов работает в режиме IPv6 уже с 2007. Начиная с выпуска FreeBSD 9.0 появились и не-IPv4-снапшоты. За счет полностью разделенной поддержки функционала IPv6 и IPv4, сами разработчики могут определить, на самом ли деле их “IPv6” приложения готовы к работе в сетях IPv6, или же они имеют свои ещё не выявленные баги из-за того, что их функционирование велось поверх IPv4. Дав возможность использовать ядро с поддержкой только
IPv6, проект FreeBSD предлагает разработчикам программного обеспечения условия для проверки и исправления подобных ошибок, поощряя их готовить по настоящему “IPv6”-готовые приложения. Подробная информация о версиях FreeBSD без IPv4 расположена на странице: http://www.freebsd.org/ipv6/
Для поддержки режима “только IPv6” были переделаны rtadvd(8) и rtsold(8) – теперь они соответствуют стандарту RFC6106. Причем rtsold теперь может обновлять /etc/resolv.conf с помощью фреймворка управления информацией DNS open-resolv (http://roy.marples.name/projects/openresolv). Доступен опциональный модуль ядра для обеспечения протокола SeND (Secure Neighbor Discovery protocol); его описание ищите в RFC3971.
В продолжение более ранней тенденции развития стало возможным задавать больше глобальных опций для единичного сетевого интерфейса. Например, теперь можно принимать объявления со стороны роутера на одном интерфейсе, при этом находясь в форвард-режиме. Такая возможность нужна в ситуациях, когда нужно использовать FreeBSD в качестве IPv6 CPE-устройства (Customer Premises Equipment). Всего лишь одна строчка “ipv6_cpe_wanif” в конфигурации /etc/rc.conf правильно настроит все вызовы sysctl и интерфейсные опции, что позволит
создавать устройства формата CPE проще, чем когда-либо!

Высокопроизводительный SSH (HPN-SSH)
Сетевая производительность OpenSSH ограничена за счет статически определённых внутренних буферов потока. Они зачастую исчерпываются и создают узкое место для SCP-потока, особенно на широкополосных и протяженных линиях. HPN-SSH добавляет поддержку динамически изменяемых размеров буферов, так, чтобы можно было задействовать целиком толстые и протяжённые каналы, такие как 100Mbps и более быстрые трансатлантические и трансконтинентальные линии. Задержки передачи на широкополосных каналах вплоть до 64Mb также допустимы. Данная реализация включает в себя мультипоточное шифрование, что обеспечивает эффективную обработку данных процессором для такой широкой полосы пропускания.
По умолчанию, код HPN включен в реализации sshd для FreeBSD 9.0, а также добавлены некоторые специфичные опции для HPN в файл конфигурации /etc/ssh/sshd_config. Эти опции, а также советы по повышению эффективности, описаны в документе http://svnweb.freebsd.org/base/head/crypto/openssh/README.hpn?revision=224638&view=markup.

Разное
Стоит также отметить ряд других особенностей:
• масштабируемая поддержка SMP-систем с более чем 32 процессорами. В прежних релизах,
в структурах ядра не было соответствующих механизмов, которые бы учитывали такое
количество процессоров. Yahoo! предоставило системы для тестирования внесенных изменений.
• улучшенная поддержка USB3.0
• NFS клиент и nfsd(8) теперь по умолчанию поддерживают NFSv4. Обратная совместимость
с более старыми клиентами обеспечивается через тип монтирования “oldnfs”.
• был добавлен в ядро новый менеджер NFS-блокировок, который улучшил производительность и поведение при блокировочных ситуациях. Новая команда clear_locks(8) позвовляет очистить блокировки, удерживаемые NFS-клиентом.
• установщик sysinstall был заменен на bsdinstall. Его функции описаны на странице http://wiki.freebsd.org/BSDInstall, а документацию по использованию можно найти в FreeBSD Handbook: http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/bsdinstall.html
• ядро теперь поддерживает новый формат дампов – textdump(4). В нем содержится информация
высокого уровня, механически сгенерированная/вытащенная из вывода сообщений об ошибках,
в отличие от простого дампа памяти. Такая особенность может быть использована при
создании отчетов о состоянии ядра, содержащих богатую отладочную информацию. Отчеты,
при этом, не зависят от таблиц символов ядра, или же наличия синхронизированного дерева
исходных текстов.
• FreeBSD 9.0 может быть установлена на Sony Play-station 3 – воспользуйтесь инструкциями с сайта http://people.freebsd.org/~nwhitehorn/ps3/README.
• в ipfw(8) были добавлены действия для правил: call и return – смотрите http://svnweb.freebsd.org/base?view=revision&revision=223666

Вывод
С выходом FreeBSD 9.0, проект FreeBSD продолжает инновационные работы в области обеспечения безопасности, разработок в области компиляции, файловых систем и сетевого обеспечения. Узнать больше о проекте FreeBSD, а также загрузить FreeBSD 9.0, вы можете на сайте freebsd.org
Вернуться назад