После двух месяцев разработки Линус Торвальдс анонсировал релиз ядра Linux 3.18. Среди наиболее заметных улучшений: интегрирована файловая система OverlayFS, добавлен системный вызов bpf(), реализована подсистема для создания туннелей поверх UDP, обеспечена поддержка протокола Geneve, добавлена подсистема pvSCSI для Xen, улучшена производительность при обработке интенсивного потока мелких сетевых пакетов.

В новую версию принято около 11200 исправлений от 1300 разработчиков, размер патча - 38 Мб (изменения затронули 9307 файлов, добавлено 485719 строк кода, удалено 355945 строк). Около 47% всех представленных в 3.18 изменений связаны с драйверами устройств, примерно 18% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 14% связано с сетевым стеком, 4% - файловыми системами и 4% c внутренними подсистемами ядра.

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

  • Дисковая подсистема, ввод/вывод и файловые системы
    • Интеграция файловой системы OverlayFS, разработанной компанией SUSE в качестве более прогрессивной, компактной и высокопроизводительной замены UnionFS и AUFS, востребованной в Live-дистрибутивах и системах контейнерной виртуализации. OverlayFS позволяет создать виртуальную многослойную файловую систему, поверх доступной только на чтение основы. ФС создаётся из нижнего и верхнего слоёв, каждый из которых прикрепляется к отдельным директориям.

      В качестве нижнего слоя, используемого только для чтения, могут применяться директории любых поддерживаемых в Linux систем, включая NFS и другие экземпляры OverlayFS. Верхний слой, который может быть доступен на запись, будет перекрывать состав нижнего слоя, т.е. если файлы дублируются, в итоговой ФС будет виден только перекрывающийся контент верхнего слоя. При этом все записываемые и изменяемые данные будут сохраняться только в верхнем слое, даже если изначально они размещались в нижнем слое ФС, что позволяет использовать одну основу для создания серии одинаковых окружений (контейнеры приложений), гарантировать неизменность базовых данных (гостевые сеансы) или организовать полноценную работу поверх накопителя, не поддерживающего запись (CD/DVD).

    • В сервер NFS добавлена поддержка операции SEEK, определённой в спецификации NFS 4.2 и позволяющей реализовать в системном вызове lseek() для NFS такие опции, как SEEK_HOLE и SEEK_DATA, для выявления пустых областей и блоков данных внутри файла;
    • В F2FS, развиваемую компанией Samsung высокопроизводительную файловую систему для Flash-накопителей, добавлена поддержка атомарных операций записи, позволяющих рассматривать успешное или сбойное завершение серии операций как единое целое. В F2FS также добавлена поддержка операции FITRIM (discard), для информирования накопителя о неиспользуемых в ФС блоках.
    • В Btrfs внесены улучшения в код восстановления повреждённых RAID-массивов и перестроения RAID, добавлено множество мелких исправлений, проведена чистка кода;
  • Сетевая подсистема
    • Добавлена подсистема FOU (Foo-over-UDP) для организации тунеллирования различных IP-протоколов поверх UDP. Так же как туннели SSH работают поверх TCP, а GRE и IPIP поверх IP, FOU позволяет создавать туннели, инкапсулируя трафик в пакеты UDP. Необходимость в создании таких туннелей обусловлена предоставлением специфичных механизмов ускорения обработки пакетов, которые некоторые коммутаторы и сетевые карты предоставляют только для протокола UDP. Настройка туннеля осуществляется с использованием netlink и модуля fou. В утилиту "ip" добавлена новая команда "fou", например, для настройки FOU для IPIP на порту 5555 можно указать: "ip fou add port 5555 ipproto 4", а для создания туннеля: "ip link add name tun1 type ipip remote 192.168.1.1 local 192.168.1.2 ttl 225 encap fou encap-sport auto encap-dport 5555";
    • Обеспечена поддержка алгоритма контроля перегрузки TCP DCTCP (Data Center TCP), использующего расширение ECN для адаптации алгоритма к специфике применения в сетях крупных датацентров, в которых может наблюдаться как передача крупных непрерывных порций данных, требующих максимальной пропускной способности, так и небольших управляющих потоков, требующих минимальных задержек. DCTCP позволяет не только оценить наличие заторов трафика, но и оценить степень загруженности сети;
    • В сетевую подсистему внесены оптимизации, направленные на увеличение производительности пакетной передачи данных. Изменения особенно заметны при обработке большого объёма мелких пакетов. Производительность повышена за счёт организации групповых операций блокировки очереди, а также заполнения/очистки очереди и взаимодействия с драйвером сетевой карты не на уровне отдельных пакетов, а манипулируя порциями пакетов. Внесённые изменения позволяют добиться обработки полной пропускной способности высокоскоростных сетевых интерфейсов даже на относительно слабом оборудовании (например, на обычном компьютере продемонстрирована обработка потока в 40 гбит/сек), даже если в трафике преобладают пакеты небольшого размера;
    • Добавлена поддержка протокола Geneve (Generic Network Virtualization Encapsulation), универсального протокола инкапсуляции для виртуализированных сетей. Geneve отличается большей гибкостью, чем VXLAN, NVGRE и STT, и не зависит от типа инкапсулируемых данных (VLAN, туннели, MPLS и т.п.);
    • В пакетный фильтр Nftables, развиваемый для замены iptables, ip6table, arptables и ebtables, добавлена поддержка трансляции адресов (максарадинга) для IPv4 и IPv6, а также установки фильтра после цепочек prerouting и postrouting, что позволяет эмулировать таблицу NAT в ebtables;
    • В ipset добавлен тип hash:mac, позволяющий сохранять в качестве ключа хэша только MAC-адрес;
  • Память и системные сервисы
    • Добавлен новый системный вызов bpf(), предоставляющий доступ к возможностям универсальной виртуальной BPF-машины внутри ядра. Представленный системный вызов представляет собой единую точку входа, мультиплексирующую доступные операции с eBPF. Для организации получения данных из пространства пользователя представлена новая структура для совместного доступа к данным - 'maps'. В код eBPF добавлены функции загрузки и выгрузки программ BPF, работа с которыми производится по аналогии с модулями ядра. BPF-программа представляет собой готовый для выполнения набор инструкций, для проверки безопасности которых используется специальный блок верификации;
    • Сокращено время перехода в спящий режим для систем с большим числом CPU за счёт избавления от задержки в 100ms для каждого CPU перед его остановкой;
    • В системный вызов prctl() добавлена новая операция PR_SET_MM_MAP, позволяющая выставить основные параметры раскладки адресного пространства процесса, в том числе указать где разместить области с кодом и данными, где находится стек, определить точки останова. Улучшение подготовлено разработчиками OpenVZ и востребовано в контейнерах, использующих пространства имён для непривилегированных пользователей (user namespaces);
    • В состав включена подсистема RCU tasks, позволяющая использовать механизм синхронизации RCU (Read-copy-update) для защиты целостности структур данных;
    • Продолжена интеграция изменений, направленных на обеспечения сборки ядра при помощи компилятора Clang. В частности, осуществлена замена массивов переменной длины в структурах данных (VLAIS, Variable Length Array In Struct) на созданный при помощи макроса SHASH_DESC_ON_STACK() эквивалент, совместимый со спецификацией C99 и поддерживаемый в Clang;
    • Добавлен фреймворк "mailbox" для использования в драйверах аппаратных механизмов межпроцессного взаимодействия;
    • В состав ядра приняты некоторые патчи, подготовленные в рамках инициативы по обеспечению сборки как можно более компактного ядра Linux, занимающего минимальный размер. Добавлена возможность исключения из сборки системных вызовов madvise() и fadvise(), а также кода разбора флагов с описанием возможностей процессора;
    • В систему сборки добавлена штатная поддержка установки модулей ядра в сжатом виде;
    • Для разработчиков драйверов представлен механизм "device coredump", позволяющий получить дамп состояния периферийного устройства, что можно использовать для отладки и диагностики проблем в прошивках;
  • Виртуализация и безопасность
    • В криптографическом слое появилась поддержка многобуферных операций, позволяющий привлечь средства аппаратного распараллеливания операций для выполнения идентичных преобразований одновременно над несколькими буферами. В настоящее время, многобуферная обработка пока доступна только для операций SHA1;
    • Добавлен драйвер "pvSCSI" (Paravirtualized SCSI), позволяющая организовать работу гостевых систем, работающих под управлением гипервизора Xen, с привязанными к ним SCSI-устройствами. pvSCSI позволяет пробросить SCSI-устройство внутрь паравиртуализированного домена Xen, что даёт возможность выполнять из гостевой системы специфические операции, которые нельзя выполнить на уровне интерфейса блочного устройства ( например, перемотка ленты или управление ленточными библиотеками);
    • В систему мандатного контроля доступа SMACK, основанную на привязке меток к задачам и блокам данных (файлы, IPC, сетевые пакеты и т.д.), добавлен новый режим "bring-up", который можно использовать для оценки прав, которые требуются для выполнения процесса. Данный режим можно использовать как вспомогательное средство при написании и проверки работы правил изоляции;
  • Аппаратные архитектуры
    • Для архитектуры ARM64 адаптирован новый JIT-компилятор BPF (eBPF)
    • Архитектура SPARC64 переведена на четырёхуровневые таблицы страниц памяти, что значительно увеличило размер адресуемой памяти;
  • Оборудование
    • В DRM-драйвере Nouveau добавлена поддержка вывода звука через порт DisplayPort;
    • В DRM-драйвер Radeon для старых карт R600 добавлена поддержка UVD (Unified Video Decoder) для ускорения декодирования видео;
    • В DRM-драйвере Intel реализована поддержка кэширования значений EDID и внесена порция накопившихся улучшений;
    • Поддержка новых SoC: Hisilicon HiP04 Cortex A15, Amlogic Meson6 (8726MX), Renesas R-Car E2 (R8A77940), Broadcom BCM63xx DSL, Atmel SAMA5D4, Cavium Inc. Thunder;
    • Поддержка звуковых карт Freescale, добавлены кодеки для Everest ES8328, Freescale ES8328 и Cirrus Logic CS35L32;
    • Поддержка Ethernet-контроллеров Qualcomm Atheros QCA7000 и Ethernet-коммутаторов Broadcom Starfighter 2, Intel FM10000 и Marvell 88E6171;
    • В Video4Linux добавлена поддержка модулей CIMaX SP2/SP2HF, устройств TechnoTrend TVStick CT2-4650 CI, HackRF, ресиверов DVBSky, пультов управления Hisilicon hix5hd2 IR, тюнеров MaxLinear MxL301RF и Sharp QM1D1C0042, демодуляторов Toshiba TC90522. Устаревший тестовый драйвер "vivi" заменён на новый драйвер "vivid", который может использоваться для тестирования пользовательских приложений и предоставляет более правильный пример написания V4L-драйверов;


Источник: http://www.opennet.ru/opennews/art.shtml?num=41210