Отчёт о развитии FreeBSD за четвёртый квартал 2015 года
8 февраля 2016 года
Доступен отчёт о развитии проекта FreeBSD с октября по декабрь 2015 года.
Основные достижения:
- Система
- Началась работа по добавлению в ядро средств для автоматической загрузки модулей, необходимых для работы оборудования, для которого отсутствуют загруженные драйверы. На основании информации в модулях построена карта для сопоставления драйверов и устройств PC Card, USB и PCI, которая сохранена в отдельном файле. После доведения проекта до конца пользователю будет предоставлена возможность загрузки минимального ядра, аналогичного сборке в конфигурации MINIMAL, с динамической загрузкой всех драйверов устройств по мере необходимости;
- Во FreeBSD-HEAD принят переработанный механизм вытеснения процессов в ситуации нехватки виртуальной памяти в системе (OOM, Out of Memory). В отличие от старого обработчика OOM, оперирующего текущим состоянием виртуальной памяти (снижение свободного места в разделе подкачки и небольшой остаток свободных страниц памяти), новый механизм пытается анализировать динамику изменения потребления памяти, принимая решение о принудительном завершении процессов только в случае реальной угрозы возникновения блокировки. Кроме того, изменён алгоритм выбора процесса для принудительного закрытия, который теперь не ограничивается учётом числа элементов в таблицах распределённых станиц памяти, но и пытается оценивать реальное число страниц, которое высвободится в результате принудительного завершения процесса, что позволяет более точно выбирать потенциально проблемные процессы;
- Во FreeBSD 11 принята новая реализация системного вызова sendfile, предназначенного для организации прямой передачи данных между файловым дескриптором и сокетом. Новая реализация разработана компаниями Netflix и NGINX Inc и отличается значительным увеличением производительности - файл теперь можно направлять в сокет в асинхронном режиме без ожидания завершения чтения с диска. Ранее при использовании флага O_NONBLOCK не блокировался только сокет, но продолжало блокироваться чтение с диска. В новой реализации можно асинхронно отправлять и читать данные. Реализация полностью обратно совместима с ранее доступными приложениями и может использоваться в качестве прозрачной замены, не требуя пересборки. Кроме увеличения производительности в новой реализации также добавлены новые флаги, предоставляющие дополнительный контроль над отправкой данных. Например, флаг SF_NOCACHE запрещает кэширование передаваемых данных, а при помощи макроса SF_READAHEAD() можно установить размер буфера упреждающего чтения;
- В рамках проекта relaunchd ведётся работа по созданию аналога системного менеджера Launchd (OS X), пригодного для использования во FreeBSD. В единый демон relaunchd сведены функции процесса init, системы стартовых скриптов rc.d и init.d, демонов inetd, atd, crond, и watchdogd. Из дополнительных функций отмечается управление запуском программ в jail-окружениях, передача дескрипторов сокетов из окружения хоста в jail, запуск программ в предопределённом sandbox на базе технологии capsicum. Формат файлов конфигурации основан на UCL, что позволяет определять параметры заданий в JSON и других форматах, поддерживаемых UCL. Relaunchd уже содержит всю базовую функциональность Launchd и добавлен в дерево портов, но пока позиционируется как экспериментальная разработка. Из планов по дальнейшему развитию отмечается поддержка перезапуска заданий в случае их краха, эмуляция cron, поддержка отслеживания изменений файлов и директорий, доведение до финального вида механизмов работы с jail;
- Продолжена разработка системного менеджера nosh (Архивная копия от 17 мая 2016 на Wayback Machine), включающего набор средств для инициализации, загрузки, ведения логов, управления фоновыми процессами и терминалами. Nosh позиционируется как замена систем BSD init и NetBSD rc.d, вобравшая в себя черты таких систем, как Solaris SMF, daemontools-encore, UCSPI и средств IBM AIX по раздельному управлению системой и сервисами. Предоставляется набор прослоек для использования команд, ставших привычных в других системах, импорта существующих конфигурационных файлов /etc/fstab, /etc/rc.conf, /etc/rc.local и /etc/ttys, а также настроек изолированных окружений Jail и PC-BSD Warden.
Доступны возможности для определения порядка запуска сервисов, организации зависимостей между сервисами, обеспечения параллельного выполнения сервисов, автоматической ротации логов, отслеживания работы сервисов и применения kevent для обеспечения событийно-ориентированного параллелизма. Система переносимая, не зависит от особенностей ядра и может применяться как в BSD-системах, так и в Linux.
С момента публикации прошлого отчёта в Nosh реализованы инструменты для экспорта логов cyclog/multilog в удалённые обработчики логов, поддерживающие RFC 5426 (например, logstash). В подсистему работы с виртуальным терминалом добавлена возможность прямого обращения к USB-устройствам ввода, без задействования sysmouse. Добавлена полная поддержка систем, на которых имеются только разделы ZFS. Обеспечено преобразование настроек приоритетов из unit-файлов systemd для использования с rtprio/idprio. Добавлена поддержка mfs для /tmp. Для полной замены rc.d из 157 отмеченных в плане задач остаётся выполнить 27.
- Разработчики FreeBSD рассматривают возможность замены подсистем init и rc на более современную систему инициализации и управления сервисами, которая позволит сократить время загрузки благодаря распараллеливанию запуска сервисов, повысить надёжность работы за счёт автоматического перезапуска в случае сбоя, упростить управление зависимостями через такие техники как активация по обращению к сокету, обеспечить возможность запуска сервисов по мере необходимости и завершать их при длительной неактивности, увеличить безопасность сократив число компонентов, работающих под пользователем root. В настоящее время решение по замене пока не принято. На звание нового системного менеджера претендуют три проекта: relaunchd (написанная с нуля реализация API launchd), развиваемый проектом NextBSD порт launchd из OS X (реализован через прослойку с реализаций механизма межпроцессного взаимодействия микроядра Mach) и nosh, оригинальная разработка по мотивам launchd, systemd и других систем;
- Близится к завершению проект миграции FreeBSD на инструментарий работы с исполняемыми файлами в формате ELF, эквивалентный набору GNU Binutils, но распространяемый под лицензией BSD. В настоящее время уже подготовлены BSD-версии библиотек libelf и libdwarf, а также утилит addr2line, nm, readelf, size, strings, as, ld и objdump и strip (elfcopy). Первый релиз запланирован на первый квартал 2016 года, из оставшихся задач отмечается добавление поддержки PE/COFF в elfcopy и адаптация системы сборки;
- Для платформ amd64 и arm64 по умолчанию задействован отладчик LLDB, развиваемый проектом LLVM. Из ещё не решённых задач отмечается реализация возможности использования LLDB для отладки разделяемых библиотек, портирование компонентов для удалённой отладки, возможность отладки core-дампов ядра и расширение поддержки архитектур, отличных от amd64 и arm64;
- Внесены улучшения в отладчик GDB: в настройках порта devel/gdb включена по умолчанию опция отладки ядра KGDB, улучшена поддержка кросс-отладки crashdump-ов, реализован новый режим отладки многопоточных программ;
- Переработана реализация кэша vnode, проведена оптимизация кода для распределения и чистки vnode;
- В sysctl добавлена поддержка фиксированных типов (знаковые и беззнаковые 8-, 16-, 32 и 64-разрядные целые числа). Для отображения информации о типах в утилиту sysctl добавлена новая опция "-t";
- Изолированные окружения, эмуляторы, безопасность и ограничения ресурсов
- Усовершенствована работа FreeBSD в качестве хост-системы (dom0) для запуска гостевых окружений с использованием гипервизора Xen. В отчётный период основное внимание было уделено работе над HVMlite, новой реализацией режима PVH, который комбинирует элементы режимов паравиртуализации (PV) и полной виртуализации (HVM). Уже доступна начальная реализация режима HVMlite, который после готовности работы в качестве Dom0 заменит собой старую реализацию PVH. Патчи для поддержки HVMlite уже приняты в кодовую базу Xen будут доступны в составе Xen 4.7. Из других связанных с Xen изменений отмечается оптимизация производительности драйвера netfront и добавление поддержки unmapped IO в драйвер blkfront;
- Подготовлены патчи для организации сохранения дампов краха ядра в зашифрованном виде. Так как дамп содержит срез памяти процессов, он может включать конфиденциальные данные, такие как оставшиеся в буфере пароли. Для предотвращение утечки этих данных при попадании crash-дампа не в те руки, предлагается шифровать содержимое перед записью. Для расшифровки доступна новая утилита decryptcore;
- В состав FreeBSD 10-STABLE принято обновление пакета OpenBSM 1.2 alpha 4 с открытой реализации Sun Basic Security Module (BSM) Audit API, предоставляющего средства для управления аудитом системы и формат файлов аудита;
- Расширены возможности по работе в роли гостевой системы под управлением гипервизора Hyper-V. Увеличена производительность драйверов для синтетических сетевых адаптеров и устройств хранения Hyper-V, поставляемых в наборе FreeBSD Integration Services (BIS). В драйвер VMBus добавлена поддержка vRSS (Receive Side Scaling). Готовится к включению код для поддержки виртуальных машин с интерфейсом UEFI (Hyper-V Generation-2 VM);
- Проект HardenedBSD провёл большую работу по улучшению производительности и стабильности развиваемых для FreeBSD дополнительных механизмов защиты. Метки безопасности теперь могут быть привязаны не только к процессам, но и к отдельным потокам. Проведена реорганизация блокировок. Переработана реализация ASLR (Address Space Layout Randomization) для mmap(MAP_32BIT). Разработана новая утилита бинарного обновления системы hbsd-update, которая может использоваться для обновления окружений jail и ZFS Boot Environments (ZFS BEs). Достоверность обновлений обеспечивается сертификатами X.509. Полностью переписана утилита secadm, предназначенная для применения к приложениям дополнительных техник защиты. К сожалению у проекта HardenedBSD пока нет ресурсов для переноса наработок ASLR в основную кодовую базу FreeBSD;
- Сетевая подсистема
- Стартовал проект по переработке стека маршрутизации, в результате которого планируется поднять производительность и масштабируемость, а также подготовить задел для добавления расширенных возможностей. Основной проблемой текущего стека маршрутизации является чрезмерно большое число блокировок при обработке вывода пакетов, которые приводят к блокировке контекста при выполнении преобразования пакета в сетевой кадр, пригодный для отдачи оборудованию. В рамках инициативы подобные блокировки планируется свести к двум вызовам rmlock, что позволит добиться масштабируемости близкой к линейной;
- Доступен новый выпуск патчей с реализацией расширения Multipath TCP (MPTCP), позволяющего организовать доставку пакетов одновременно по нескольким маршрутам через разные сетевые интерфейсы, привязанные к разным IP-адресам. Целью проекта является подготовка MPTCP-патчей для ядра FreeBSD, совместимых с эталонной реализацией MPTCP и дополнительными улучшениями;
- Системы хранения и файловые системы
- В механизм управления ресурсами RCTL добавлена возможность ограничения пропускной способности диска через задание лимитов на полосу пропускания чтения/записи (байт в секунду) и интенсивность операций ввода/вывода (число операций чтения/записи в секунду). Также представлен новый механизм придерживания запуска процессов в условиях превышения лимита. Код с реализацией нового RCTL уже в основном протестирован, обеспечена интеграция с ZFS и ожидается включение во FreeBSD 11.0;
- Подготовлен порт sysutils/fusefs-lkl с FUSE-модулем, который можно использовать для полноценного доступа к любым файловым системам, поддерживаемым ядром Linux, в том числе к ext4/3/2, XFS и BTRFS. Модуль построен с использованием наработок проекта LKL ("Linux Kernel as a Library"), позволяющего скомпоновать ядро Linux в форме разделяемой библиотеки, которую можно собрать для различных платформ, в том числе для FreeBSD, и обращаться к функциям ядра из пользовательских приложений. Таким для работы с ФС используется оригинальный код драйверов из состава Linux;
- В состав FreeBSD 11-CURRENT принят код для загрузки с временным rootfs, вместо которого затем монтируется реальный корневой раздел. Процесс смены корневого раздела реализован в форме частичного завершения работы с удалением всех процессов, отмонтированием rootfs, монтированием нового rootfs, запуском процесса init и переходом к выполнению скриптов инициализации;
- При поддержке Netflix для подсистемы CAM разработан планировщик ввода/вывода CAM I/O scheduler, который будет включён в состав FreeBSD 11. Планировщик позволяет разделять различные типы ввода/вывода, давая возможность привязать ограничения к типам и характеристикам ввода/вывода (в том числе учитывать задержки при обработке недавних запросов, относительно средних показателей). Например, планировщик удобно использовать для адаптации системной нагрузки к производительности SSD-накопителей или для решения специфичных задач, таких как отдача данных для потокового вещания видео;
- Проходит рецензирование переработанный стек MMC/SD (Архивная копия от 10 марта 2016 на Wayback Machine), переведённый на использование фреймворка CAM, что позволило задействовать в нём уже хорошо проверенную модель организации блокировок и средства для отладки. В настоящее время поддерживается только драйвер ti_sdhci, используемый для плат BeagleBone Black;
- Поддержка оборудования
- Подготовлен начальный порт FreeBSD для процессоров на базе архитектуры RISC-V. FreeBSD/RISC-V уже успешно загружается в многопользовательском режиме в симуляторе Spike;
- Для FreeBSD портированы библиотеки для работы с VideoCore, графическим процессором одноплатного ПК Raspberry Pi. Библиотеки обеспечивают доступ к такими возможностям VideoCore, как OpenGL, механизмы ускорения воспроизведения видео и управление HDMI. Библиотеки помещены в порт misc/raspberrypi-userland и могут быть использованы в медиацентре Kodi (XBMC). В порты также добавлен обособленный видеопроигрыватель omxplayer, использующий VideoCore API;
- Для включения в релиз FreeBSD 10.3 подготовлена серия изменений, связанных с загрузкой на системах с UEFI. Улучшена совместимость с различными реализациями UEFI. Решены проблемы с загрузкой, приводящие к выводу ошибки "ExitBootServices() returned 0x8000000000000002". Добавлена возможность установки переменных EFI из командной строки загрузчика. В UEFI-загрузчик добавлена поддержка корневых разделов с ZFS;
- Добавлена поддержка сборки релизов для дополнительных ARM-систем: BANANAPI, CUBIEBOARD и CUBIEBOARD2.
- К интеграции в FreeBSD 11-CURRENT готовится ICL-модуль с реализацией iSER Initiator с поддержкой iSCSI-расширений для RDMA (Remote Direct Memory Access), используемых в продуктах компании Mellanox. Данные расширения предоставляют доступ к средствам аппаратного ускорения перемещения данных, присутствующих в 10, 40, 56 и 100 Gigabit IB/Ethernet адаптерах Mellanox;
- В состав FreeBSD-HEAD принят новый драйвер cxgbei, позволяющий использовать средства аппаратного ускорения для iSCSI Initiator и Target при использовании карт Chelsio T5- и T4. Поддерживается ускорение операций с TCP, идентификации и извлечения iSCSI PDU из потока, генерация и проверка контрольных сумм, прямая (zero copy) передача/получение пакетов;
- Инициирован
Источники
правитьЛюбой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.