Релиз операционной системы DragonFly BSD 5.8

4 March

Доступен релиз DragonFlyBSD 5.8, операционной системы с гибридным ядром, созданной в 2003 году с целью альтернативного развития ветки FreeBSD 4.x. Из особенностей DragonFly BSD можно выделить распределённую версионную файловую систему HAMMER, поддержку загрузки "виртуальных" ядер системы как пользовательских процессов, возможность кэширования данных и мета-данных ФС на SSD-накопителях, учитывающие контекст вариантные символические ссылки, возможность заморозки процессов с сохранением их состояния на диске, гибридное ядро, использующее легковесные потоки (LWKT).

Основные улучшения, добавленные в DragonFlyBSD 5.8:

  • В основной состав включена утилита dsynth, предназначенная для локальной сборки и сопровождения собственных бинарных репозиториев DPort. Поддерживается распараллеливание сборки произвольного числа портов, учитывая дерево зависимостей. При подготовке нового выпуска в DPort также внесено большое число изменений, нацеленных на ускорение сборки нескольких зависимых пакетов.
  • В libc реализован эффективный механизм маскирования сигналов, позволивший защитить malloc*() и подобные функции от проблем из-за их прерывания сигналом. Для краткосрочной блокировки и разблокировки сигналов предложены функции sigblockall() и sigunblockall(), работающие без совершения системных вызовов. Кроме того, в libc функция strtok() адаптирована для применения в многопоточных приложениях, добавлены константы TABDLY, TAB0, TAB3 и функция__errno_location для улучшения поддержки dports.
  • Компоненты интерфейса DRM (Direct Rendering Manager) синхронизированы с ядром Linux 4.9 с портированием из ядра 4.12 отдельных возможностей, нацеленных на улучшение поддержки Wayland. Драйвер drm/i915 для GPU Intel синхронизирован с ядром Linux 4.8.17 c переносом из ядра 5.4 кода для поддержки новых чипов (Skylake, Coffelake, Amber Lake, Whiskey Lake и Comet Lake). Драйвер drm/radeon для видеокарт AMD синхронизирован с ядром Linux 4.9.
  • Значительно улучшены алгоритмы подкачки виртуальной памяти, позволившие избавиться или минимизировать проблемы с отзывчивостью в интерфейсе пользователя при нехватке памяти. Решены проблемы с подвисаниям Chrome/Chromium при недостатке системной памяти.
  • Улучшено масштабирование ядра на системах с большим числом процессорных ядер. Сокращено время запроса страниц виртуальной памяти. Сокращена конкуренция SMP в условиях недостатка памяти. Увеличена эффективность вызова "open(... O_RDWR)".
  • Переработан генератор псевдослучайных чисел в ядре. Драйвер RDRAND адаптирован для накопления энтропии от всех CPU. Снижена интенсивность и размер подкормки RDRAND, на которую раньше уходило 2-3% времени CPU во время простоя.
  • Добавлены новые системные вызовы realpath, getrandom и lwp_getname (позволил реализовать pthread_get_name_np).
  • Добавлена поддержка механизмов защиты SMAP (Supervisor Mode Access Prevention) и SMEP (Supervisor Mode Execution Prevention). SMAP позволяет блокировать доступ к данным в пространстве пользователя из привилегированного кода, выполняемого на уровне ядра. SMEP не даёт переходить из режима ядра к выполнению кода, находящегося на пользовательском уровне, что позволяет блокировать эксплуатацию многих уязвимостей в ядре (shell-код не будет выполнен, так как он находится в пространстве пользователя);
  • Переработаны sysctl-переменные для настройки Jail. Добавлена возможность монтирования nullfs и tmpfs из Jail.
  • Добавлен аварийный режим работы файловой системы HAMMER2, который можно применять в процессе восстановления после сбоя. В данном режиме допускается разрушение снапшотов при обновлении inode по месту (позволяет удалять файлы и каталоги при отсутствии свободного дискового пространства, когда невозможно использовать механизм copy-on-write). Значительно повышена производительность, благодаря переработке поддержки диспетчеризации потоков в HAMMER2. Значительно улучшен процесс сброса буферов (flush).
  • Повышена надёжность и производительность TMPFS. Увеличена эффективность работы в условиях нехватки свободной памяти в системе.
  • В сетевом стеке для IPv4 реализована поддержка префиксов /31 (RFC 3021). В tap улучшена обработка ioctl SIOCSIFMTU для поддержки MTU > 1500. Добавлена поддержка SIOCSIFINFO_IN6 и SO_RERROR.
  • C FreeBSD синхронизирован драйвер iwm с поддержкой беспроводных чипов Intel (добавлена поддержка iwm-9000 и iwm-9260).
  • Добавлены совместимые с Linux функции basename() и dirname() для улучшения совместимости в портах.
  • Из FreeBSD перенесены fsck_msdosfs, sys/ttydefaults.h, AF_INET / AF_INET6 в libc/getaddrinfo(), calendar(1), rcorder-visualize.sh. Из OpenBSD перенесены функции из math.h.
  • Обновлены версии сторонних компонентов, в том числе Binutils 2.34, Openresolv 3.9.2, DHCPCD 8.1.3. По умолчанию используется компилятор gcc-8.