Релиз ядра Linux 4.6

После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 4.6. Среди наиболее заметных изменений: новая файловая система OrangeFS, поддержка USB 3.1 SuperSpeedPlus (10Gbps), возможность использования интерфейса датаграмм для отправки/приёма отдельных сообщений по TCP, поддержка шифрования на уровне кадров Ethernet, реализация mesh-протокола B.A. T.M.A. N V, поддержка cgroup namespaces, слой pNFS SCSI для NFSv4.1, поддержка 3D-ускорения для GPU NVIDIA GM20x, режим монтирования «nologreplay» в Btrfs.

В новую версию принято более 12 тысяч исправлений от примерно 1500 разработчиков, размер патча — 37 Мб (изменения затронули 9990 файлов, добавлено 517234 строк кода, удалено 249061 строк). Около 46% всех представленных в 4.6 изменений связаны с драйверами устройств, примерно 20% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 12% связано с сетевым стеком, 5% — файловыми системами и 4% c внутренними подсистемами ядра.

Из наиболее интересных новшеств ядра Linux 4.6 можно отметить:

  • Дисковая подсистема, ввод/вывод и файловые системы
    • В состав добавлена распределённая файловая система OrangeFS, рассчитанная на применение в высокотехнологичных high-end-серверах и кластерах для достижения максимальной производительности доступа к данным из распараллеленных приложений. OrangeFS позиционируется как продолжение разработки проекта PVFS, развивая его в таких областях как отказоустойчивость и расширенные механизмы контроля доступа. Из типичных областей применения OrangeFS называются высокопроизводительные вычисления (HPC), обработка больших объёмов данных (BigData), потоковое вещание видео, решение задач геномики и биоинформатики;
    • Для файловой системы OCFS2 (Oracle Cluster File System) реализована система проверки целостности файлов, которая позволяет без отмонтирования ФС восстановить работу в случае возникновения некоторых видов сбоев. Если ранее при выявлении ошибок с числом inode для файла вся ФС переводилась в режим только для чтения, то теперь реализован специальный простой механизм проверки, который в случае проблем с числом inode, выполняет проверку и корректировку inode;
    • В сервер NFSv4.1 добавлена раскладка pNFS SCSI с реализацией варианта раскладки блочного устройства, использующего команды SCSI для улучшенной изоляции и идентификации устройства. При использовании pNFS SCSI сервер NFS выступает в роли сервера метаданных для pNFS, который кроме обработки всех запросов к метаданным предоставляет клиентам примой доступ к хранилищу через логические устройства SCSI (SCSI LUN), которые могут быть совместно использованы всеми клиентами. Для работы раскладок pNFS SCSI требуется их поддержка на стороне экспортируемой файловой системы, которая пока доступна только в XFS;
    • В Btrfs значение по умолчанию max_inline уменьшено с 4 до 2 Кб, т.е. теперь только файлы меньше 2 Кб будут упаковываться вместе с метаданными внутри inode.
      Представлена новая опция монтирования «nologreplay», отключающая ведение replay-лога, что полностью блокирует возможность изменения данных в ФС (в сочетании с опцией «ro» позволяет получить действительно доступные только для чтения разделы (невозможно перемонтировать в режим записи через «remount, rw» без полного отмонтирования ФС), аналогичные ФС ext и xfs в рижме «norecovery»).
      Добавлена новая опция монтирования «usebackuproot», которая заменила собой опцию «recovery», которая вводила своим названием в заблуждение;
    • В XFS добавлен новый ioctl для управления квотами (Q_XGETNEXTQUOTA), позволяющий утилите quotactl быстро найти все активные квоты, путём перебора только inode с параметрами квот, пропуская незадействованные inode;
    • В Ext4 улучшена масштабируемость xattr при операциях перезаписи кэша mbcache;
    • В F2FS, развиваемой компанией Samsung высокопроизводительной файловой системе для Flash-накопителей, ускорена обработка пустот в карте распределения блоков, экспортирована статистика записанных во время работы ФС данных (/sys/fs/f2fs/disk/lifetime_write_kbytes);
    • Для файловой системы FAT в настройки сборки ядра добавлена опция CONFIG_FAT_DEFAULT_UTF8 для включения UTF-8 по умолчанию при монтировании разделов с FAT;
  • Сетевая подсистема
    • Добавлена подсистема Kernel Connection Multiplexor (KCM), предоставляющая средства для эффективного приёма и отправки сообщений по TCP, используя при этом программный интерфейс датаграмм. Т.е. предлагаются средства для построения протоколов уровня приложения, манипулирующих отправкой отдельных сообщений, при том, что для передачи сообщений используется TCP для гарантии доставки, но API похож на UDP и не требует возни с установкой соединения (операции установки и завершения соединения выполняются автоматически);
    • Поддержка пятой версии mesh-протокола B.A. T.M.A. N. («Better Approach To Mobile Adhoc Networking), позволяющего создавать децентрализованные сети, каждый узел в которых связан через соседние узлы. Новая редакция примечательная разделением протокола OGM на два отдельных компонента — ELP (Echo Location Protocol) и OGMv2. ELP отвечает за обнаружение соседей и оценку качества линка, а OGMv2 реализует алгоритм распространения метрик по сети и определяет оптимальные маршруты. Кроме того, протокол больше не полагается на потерю пакетов, а отталкивается от определённой пропускной способности;
  • Память и системные сервисы
    • В USB-стеке обеспечена поддержка протокола SuperSpeedPlus, определённого в спецификации USB 3.1 и позволяющего добиться скорости передачи данных до 10Gbps, например, при подключении внешних накопителей класса USB 3.1 Gen2;
    • Проведена работа по увеличению надёжности кода, отвечающего за принудительное завершение задач в условиях нехватки памяти в системе (OOM killer). В частности, решена проблема с задержками высвобождения памяти в случае принудительного завершения процессов, завершение которых задерживается из-за нахождениея в непрерываемом состоянии ожидания события от другого процесса, который оказывается заблокирован системой распределения страниц памяти. Для решения этой проблемы добавлен специализированный поток ядра oom_reaper, который пытается сразу вернуть системе анонимную или вытесненную в раздел подкачки память убиваемого OOM killer процесса, полагая, что процессу эта память уже не нужна так как он всё равно будет завершён;
    • В API DMA-BUF, позволяющем организовать совместное использования буферов драйверами и различными подсистемами (V4L2, DRI и т.п.), добавлен новый ioctl DMA_BUF_IOCTL_SYNC для управления согласованностью кэша между CPU и GPU. Новый ioctl позволяет решить проблемы с согласованностью кэша при одновременном доступе к ресурсам CPU и GPU через dma-buf;
    • Новые системные вызовы preadv2() и pwritev2(), которые отличаются от preadv () и pwritev () наличие дополнительного аргумента для передачи ядру дополнительных флагов (например, RWF_HIPRI для чтения в неблокирующем режиме);
  • Виртуализация и безопасность
    • Представлен «cgroup namespaces», механизм виртуализации точек монтирования cgrops и представления /proc/$PID/cgroup, что позволяет использовать в разных контейнерах отдельные иерархии cgroup, не позволяющие получить доступ к информации из системной иерархии. Например, без cgroup namespaces из изолированного процесса через /proc/$PID/cgroup можно получить такую информацию как полный путь cgroup процесса. Для создание пространства имён cgroup в вызовы clone (2) и unshare (2) добавлен новый флаг CLONE_NEWCGROUP;
    • Добавлена поддержка механизма ключей защиты памяти Intel MPK (Memory Protection Keys), реализованного в готовящемся к выпуску новом поколении процессоров Intel. MPK позволяет закодировать управляемые пользователем маски прав доступа в элементах таблицы страниц памяти (PTE). Вместо одной фиксированной маски доступа в PTE, которая требует системного вызова для изменения и работает в привязке к странице памяти, MPK позволяет пользователю определить несколько вариантов масок через специальный регистр (PKRU). В PKRU для каждой маски можно задать раздельные флаги запрета доступа и запрета записи. Подобный подход позволяет динамически переключать флаги доступа для очень больших областей памяти, манипулируя лишь регистром CPU, без внесения изменений для каждой страницы памяти. Кроме того появляется возможность более точного управления флагами прав доступа MMU, например, отделить обработку флагов исполнения и чтения (установить права при которых код может быть запущен, но не может быть прочитан);
    • Возможность шифрования в Ethernet на уровне MAC (MACsec), определённая в стандарте IEEE 802.1AE. Позволяет шифровать и аутентифицировать весь трафик в локальной сети, используя алгоритм GCM-AES-128, что позволяет защитить от перехвата трафик DHCP и VLAN, а также помешать модификации заголовков кадров Ethernet;
    • Интегрирована разработанная проектом grsecurity технология защиты (__ro_after_init), позволяющая создавать доступные на чтение и запись области памяти, используемые только во время иницилизации и переводимые в режим только для чтения после инициализации;
  • Оборудование
    • В DRM-драйвер для видеокарт NVIDIA (Nouveau) добавлена поддержка чипсета GM200 и возможность загрузки прошивок для карт GM20x (GeForce GTX 900), верифицируемых по цифровой подписи, что позволило задействовать механизмы аппаратного 3D-ускорения для Maxwell GPU (для прошивок без цифровой подписи закрыт доступ к средствам ускорения 3D-операций);
    • Расширены возможности DRM-драйвера для видеокарт Intel: Для процессоров Haswell, Broadwell, Valleyview и Cherryview включена по умолчанию поддержка PSR (Panel Self Refresh). Для процессоров Haswell и Broadwell включена по умолчанию поддержка технологии FBC (Frame-Buffer Compression), которая позволяет добиться существенного снижения энергопотребления в условиях отображения необновляемой картинки на экране. Продолжена работа над поддержкой атомарного подключения дисплеев. Улучшены средства адаптивного управления питанием;
    • В драйвере AMDGPU появилась поддержка звука i2s и представлен новый интерфейс sysfs для ручного изменения параметров powerplay, влияющих на производительность и энергопотребление;

© OpenNet