Релиз ядра Linux 3.11. Обзор новшеств
После двух месяцев разработки Линус Торвальдс выпустил ядро Linux 3.11. В шутку новому ядру присвоено кодовое имя «Linux for Workgroups», по аналогии с Windows 3.11 for Workgroups. Среди наиболее заметных улучшений: технология сжатого кэширования раздела подкачки Zswap; флаг O_TMPFILE для создания «невидимых» временных файлов; возможность упаковки ядра с использованием сжатия LZ4; экспериментальная поддержка кластерной файловой системы Lustre; спящий режим IRST; динамическое управление питанием GPU Radeon; NFS 4.2; применение SELinux для NFS; порт KVM и Xen для архитектуры ARM64. В новую версию принято 10.7 тысяч исправлений от 1239 разработчиков, размер патча — 44 Мб (изменения затронули 10475 файлов, добавлено 789 тысяч строк кода, удалено 341 тысяч строк). Около 43% всех представленных в 3.10 изменений связаны с драйверами устройств, примерно 23% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 11% связано с сетевым стеком, 5% — файловыми системами и 5% c внутренними подсистемами ядра. 9.1% изменений внесено сотрудниками компании Intel, 8.5% — Red Hat, 8.3% — Linaro, 4.5% — Samsung, 3.9% — IBM, 3.0% — Texas Instruments, 2.9% — SUSE, 2.6% — AMD, 2.1% — Google, 1.3% — Oracle, 1.3% — ARM, 1.1% — Cisco.
Из наиболее интересных новшеств можно отметить:
Дисковая подсистема, ввод/вывод и файловые системы Включение в состав ядра клиента кластерной файловой системы Lustre, используемой в большинстве кластеров, входящих в список самых мощных суперкомпьютеров мира (6 из 10 и 60 из 100 самых мощных кластеров используют Lustre). Клиентская часть Lustre работает вкупе с серверами для хранения данных и обслуживания метаданных, предоставляя средства для обращения клиентов к хранимым в распределённой ФС данным (основанный на ext4 бэкенд ldiskfs для организации работы сервера хранения данных в ядро не включен). Модуль для работы клиента Lustre поставляется в экспериментальном разделе «staging» и не собирается по умолчанию; В F2FS, развиваемую компанией Samsung высокопроизводительную файловую систему для Flash-накопителей, добавлена поддержка меток безопасности, что позволяет использовать данную ФС с LSM-модулями (Linux Security Modules), в частности даёт возможность использовать средства принудительного контроля доступа SELinux и SEAndroid. Кроме того, в F2FS реализована функция перемонтирования раздела (remount); В Btrfs обеспечена техника слияния запросов ввода/вывода, ожидающих помещения в лог обратной записи, что позволило увеличить скорость записи в синхронном режиме до 60% (с 2.9MB/s до 4.6MB/s) на SCSI-дисках с включенной буферизацией. Прекращено использование структуры btrfs_sector_sum, что позволило заметно поднять производительность линейного копирования. Например выполнение теста утилитой dd на SSD-накопителе показало рост пропускной способности на 74% (с 31MB/s до 54MB/s). Добавлена поддержка клонирования данных файла в тот же файл, когда клонируемая и записываемая области не пересекаются (например, запись клона в хвост); Интегрированы дополнительные оптимизации производительности для файловых систем Btrfs, XFS и Ext4. В Ext4 добавлена поддержка предварительного резервирования места под транзакции; Предварительная поддержка находящегося в разработке стандарта NFS 4.2, в котором ведётся работа по увеличению эффективности потребления ресурсов, например копирование на стороне сервера, предварительное резервирование места, оптимизации для SSD-накопителей; В модуль управления пропускной способностью ввода/вывода blk-throttle добавлена поддержка контроля ресурсов ввода-вывода с блочных устройств при помощи иерархических управляющих групп (cgroups). По умолчанию поддержка иерархических cgroups отключена, для включения следует использовать флаг «sane_behavior»; В Device Mapper добавлен новый модуль «dm-switch» для создания устройства, позволяющего организовать произвольный мапинг регионов ввода/вывода привязанных к определённому набору путей, привязку которых к специфичным регионам можно менять динамически. Новый модуль нацелен на обработку усложнённых случаев маппинга (например, для распределённых хранилищ iSCSI), для которых не достаточно модуля «dm-stripe»; В DM RAID добавлена возможность восстановления работы после временного сбоя накопителя. Если при возобновления работы после остановки (resume) диск помечен как сбойный, но суперблок читается, предпринимается попытка возвращения диска в RAID. Указанное изменение позволяет попытаться вернуть вылетевший из RAID диск простым выполнением операций suspend/resume вместо ручного переконфигурирования; Проведения оптимизация производительности системного вызова sync, работа которого ускорена в 7–8 раз для активно используемых ФС; Добавлена поддержка таблиц дисковых разделов AIX; В файловую систему CIFS добавлена поддержка диалекта SMB3.02. Добавлена опция монтирования «nosharesock» для принудительного создания нового отдельного сокета для сервера (можно создать несколько независимых точек монтирования для разных пользователей). Поддержка верификации запросов SMB3 при помощи цифровых подписей AES-CMAC; Виртуализация и безопасность В системные вызовы open () и openat () добавлена поддержка флага O_TMPFILE, позволяющего передать файловой системе информацию о создании временного файла, не видимого в иерархии ФС, что позволяет применить для данного типа файлов отдельные оптимизации. Создаваемые при помощи O_TMPFILE временные файлы не имеют имени, в качестве пути передаётся только директория. Создание невидимого временного файла без имени позволяет разработчикам приложений не задумываться о возможных уязвимостях, таких, как атака через символические ссылки; В коде Xen и KVM появилась поддержка виртуализации для архитектуры ARM64; Реализация меток безопасности в NFS (Labeled NFS), позволяющих обеспечить полноценную поддержку SELinux для NFS. Ранее для точки монтирования привязывалась только метка, как правило nfs_t. Labeled NFS позволяет использовать произвольное число различных меток для каждого раздела NFS. Например, отдельную метку можно привязать к файлу с образом виртуальной машины, размещённом на NFS-разделе, можно экспортировать домашние директории через NFS с разграничением доступа приложений только в определённые области; Сетевая подсистема Режим опроса (polling) Ethernet-устройств с низкой задержкой (low latency). Современные устройства не информируют систему о получении каждого пакета через генерацию прерываний, вместо этого ядро периодически опрашивает драйвер и получает информацию о накопившихся пакетах. Подобный опрос приводит к появлению задержки в обработке пакетов. Новый режим позволяет приложениям запросить для отдельного сокета пониженный интервал опроса для обеспечения высокой отзывчивости (в частности, при создании сокета можно установить специальный флаг, после чего если при вызове функции read () нет данных для отдачи, то внепланово будет инициирован опрос драйвера); В conntrack-модуле трекинга соединений для протокола FTP добавлена поддержка методов идентификации перехода в пассивный режим, отмеченных в RFC 1123; Память и системные сервисы Поддержка технологии сжатого кэширования раздела подкачки — Zswap. При необходимости выгрузки страниц памяти на диск, Zswap производит попытку сжать страницы, размещая их при этом в пуле в оперативной памяти. По мере возможности сжатые страницы не выгружаются на диск, чтобы избежать операций ввода/вывода с медленным носителем. Таким образом, при возникновении необходимости сброса памяти в раздел подкачки, удаётся добиться сокращения ввода-вывода, что повышает скорость работы системы в целом, за счет минимизации обращений к медленному носителю. Тестирование Zswap в процессе компиляции ядра при возникновении своппинга продемонстрировало выигрыш по объему ввода/вывода в 76% и сокращение времени выполнения операции на 53%; Поддержка технологии IRST (Intel Rapid Start Technology), представляющей собой вариант реализации спящего режима, обеспечиваемого силами прошивки. В IRST вводится дополнительный таймаут, по истечении которого дамп памяти заснувшей в режиме Suspend-to-RAM системы принудительно сохраняется прошивкой на SSD-накопителе, после чего схемы обесточиваются. При включении устройства, прошивка копирует сохранённые данные в ОЗУ, после чего операционная система восстанавливает своё состояние как при использовании Suspend-to-RAM; Реализована концепция энергоэффективных рабочих очередей внутри ядра. Помещаемые в данный тип очереди задания не привязываются к конкретному CPU и могут выполняться на любых свободных процессорных ядрах, не вызывая пробуждения «спящих» ядер, а используя ядра уже проснувшиеся для выполнения других заданий; В ядро добавлены патчи, необходимые для реализации поддержки запуска в Wine приложений для Windows RT; Для упаковки образов ядра добавлена возможность использования алгоритма сжатия LZ4, примечательного высокой скоростью упаковки и распаковки данных с сохранением приемлемой степени сжатия, соизмеримой с алгоритмом LZO; Изменёно поведение при загрузке модулей ядра — загрузка модуля теперь не завершается ошибкой при указании неизвестных параметров. Подобные параметры игнорируются с выводом предупреждения в лог. Указанное изменение позволит обеспечить работу конфигураций после удаления поддержки тех или иных параметров модулей или при загрузке старой версии ядра; Добавлен механизм для отслеживания в какие страницы памяти задача осуществляет запись. Указанная возможность востребована для работы системы заморозки процессов (checkpoint-restore), то также может использоваться для профилирования и сбора статистики; Увеличение масштабируемости очередей сообщений SYSV IPC за счёт избавления кода от общей блокировки кода SYSV IPC, приостанавливающей выполнение в том числе таких операций, как проверка безопасности и прав доступа, что негативно сказывалось на производительности. Теперь в реализации очередей сообщений используется смесь блоков без блокировок, ограниченных критических областей, статистики через семафоры и кэшированных присвоений; Аппаратные архитектуры Для 32- и 64-разрядных архитектур ARM подготовлена улучшенная реализация технологий hugetlbfs и Transparent Huge Page, позволяющих увеличить базовый размер адресуемых страниц памяти до 2 Мб, что приводит к сокращению числа используемых TLB-блоков (Translation Lookaside Buffer) и расширению возможностей по задействованию выделенной, но неиспользуемой памяти; Оборудование Включение большой серии патчей, направленных на улучшение поддержки GPU семейства Radeon. В частности, реализованы средства динамического управления питанием и частотами GPU (для включения следует указать параметр radeon.dpm=1), обеспечено отключение тактовых сигналов для неиспользуемых в данный момент блоков GPU («clock gating»), добавлена возможность активного управления состоянием шины PCI-E (ASPM), при котором энергопотребление шины PCI-E может быть заметно снижено в режиме бездействия. Для Radeon серии HD7000 реализована поддержка PCI-E 2.0 и 3.0. Обеспечена поддержка GPU семейства HD8000 для которых реализована возможность установки видеорежимов, поддержка операций с 3D, вычислений на GPU и работы с UVD; В DRM-модуле Nouveau появилась поддержка средств аппаратного декодирования видео в форматах MPEG2 и H.264 с использованием движка VP2 (PureVideo HD), присутствующего в сериях GPU NVIDIA c NV84 (GeForce 8600) по NV96 (GeForce 9400/9600/9700), а также в графических процессорах поддерживаемых NVA0 (GT 200); В DRM-модуле Intel стабилизирована поддержка графической подсистемы на базе платформы Intel Bay Trail, созданной для новых Atom SoC. Улучшена поддержка Intel Haswell, в том числе задействована возможность использования FBC (Frame-Buffer Compression); Добавлен драйвер для симулирования NFC-чипа. Реализована возможность использования SPI (Serial Peripheral Interface) в качестве транспорта для NCI (NFC Controller Interface), что позволяет вызывать модули SPI для чтения/записи данных контроллера NFC; Добавлена поддержка новых процессоров: Freescale i.MX6 SoloLite, Freescale Vybrid VF610, Samsung EXYNOS5420, Rockchip RK2928 и RK3xxx processors, TI Nspire, STMicroelectronics STiH41x и STiH416; Дополнение: Производится сбор вопросов для интервью с Алексеем Кузнецовым, занимавшим c 2000 по 2003 год пост мэйнтейнера сетевой подсистемы Linux. Алексеем разработан новый TCP/IP стек ядра и такие пакеты, как iputils и iproute2.
© OpenNet