Линус Торвальдс представил релиз ядра Linux 3.8. В новой версии прекращена поддержка процессоров 386-DX/SX; добавлена новая файловая система F2FS; реализован механизм проверки целостности метаданных для XFS; обеспечена поддержка inline-хранения данных в Ext4; подготовлен режим быстрой замены дисков для Btrfs; реализована возможность применения пространств имён для непривилегированных пользователей; в cgroup добавлена поддержка ограничения памяти, потребляемой ядром.
В новую версию принято около 11 тысяч исправлений от более чем 1200 разработчиков, размер патча - 42 Мб (изменения затронули 11701 файлов, добавлено 577870 строк кода, удалено 352678 строк). Около 44% всех представленных в 3.8 изменений связаны с драйверами устройств, примерно 25% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур (основная масса изменений касается платформ на основе ARM), 11% связано с сетевым стеком, 3% - файловыми системами и 4% c внутренними подсистемами ядра.
Из наиболее интересных новшеств можно отметить:
Аппаратные архитектуры
Прекращена поддержка процессоров 386-DX/SX. Целью подобного шага является желание упростить поддержку некоторых структур ядра, изменение которых затрудняет наличие дополнительного кода, необходимого для поддержки процессоров 386-DX/SX. Например, для работы на системах i386 в функции sync_core(), используемой для организации синхронизации в режиме SMP, необходимо обеспечить поддержку процессоров без CPUID;
Для архитектуры x86 добавлена поддержка горячего подключения/отключения базового CPU ("CPU0"), используемого при загрузке (ранее процессор, используемый для загрузки, не мог быть в последующем отключён);
Дисковая подсистема, ввод/вывод и файловые системы
В состав ядра принята разработанная компанией Samsung файловая система F2FS (Flash-Friendly File System), ориентированная для использования на Flash-памяти. Хранение структур данных организовано в форме лога, а при обновлении информации используется подход Copy-on-Write, при котором при изменении данные не перезаписываются, а сохраняются в новом месте. В процессе разработки F2FS учтены проблемы ранее доступных специализированных ФС на основе структур в форме лога и предприняты все усилия для устранения известных недостатков, таких как большое потребление памяти и высокие накладные расходы при выполнении операций очистки. Для снижения износа Flash данные по возможности распределяются равномерно, сводя к минимуму повторную запись в одни и те же блоки. Для обеспечения целостности используется модель с фиксацией контрольных точек и возможностью отката изменений (roll-back) в случае проблем. Для выполнения операций чистки задействован специальный сборщик мусора, выполняемый в фоне в моменты простоя системы. Поддерживается традиционная для UNIX схема разграничения доступа и такие расширенные механизмы, как xattr и POSIX ACL;
В файловой системе Ext4 добавлена поддержка inline-хранения данных, что позволяет значительно увеличить эффективность хранения очень мелких файлов за счёт размещения данных прямо внутри inode, что значительно экономит дисковое пространство. По умолчанию размер inode составляет 256 байт, а размер блока данных 4 Кб. Ранее, даже если файл занимал несколько байт, ему всё равно выделялся блок в 4 Кб. Отныне, содержимое файлов, размером несколько байт, может сохраняться прямо в inode без выделения дополнительных блоков данных. При хранении исходных текстов ядра новая возможность позволяет сэкономить примерно 1% дискового пространства, для типового раздела /usr экономия составляет 3%. Кроме экономии дискового пространства хранение данных в inode также позволило заметно увеличить скорость доступа к мелким файлам, за счёт сокращения числа перемещений головки и минимизации операций чтения с диска;
Для файловой системы Btrfs реализована поддержка быстрой замены диска. Если раньше для отключения диска требовалось вывести этот диск из ФС ("btrfs device add new_disk btrfs device delete old_disk"), переместив сохранённые на нём данные на другие диски, то теперь можно на лету заменить один диск на другой, постепенно мигрировав все необходимые данные ("btrfs replace mountpoint old_disk new_disk"). Работа нового режима не требует остановки работы ФC и отмонтирования дисков, может выполниться на лету и при этом почти не оказывает негативного влияния на производительность текущей ФС.
Из других улучшений в Btrfs можно отметить интеграцию наработок по оптимизации производительности операций записи в синхронном режиме, более равномерное распределение нагрузки на процессоры при выполнении неупорядоченных операций, снижение задержек и уменьшение нагрузки на процессор при выполнении операций fsync и прямой записи в режиме O_DIRECT. Переработан код обработки ошибок в случае коллизий хэшей;
Для файловой системы XFS появился новый механизм обеспечения целостности хранимых в журнале метаданных, при помощи проверки по контрольным суммам. В дальнейшем в XFS планируется реализовать полную верификацию по контрольным суммам всех метаданных;
Для файловых систем Tmpfs и Ext4 для lseek() добавлена поддержка опций SEEK_DATA и SEEK_HOLE;
В реализации RAID6 задействованы оптимизации с использованием инструкций AVX2;
Добавлена новая виртуальная файловая система "efivars", предназначенная для доступа к загрузочным переменным UEFI;
Виртуализация и безопасность
Обеспечена поддержка пространств имён для непривилегированных пользователей (user namespaces). Пространства имён позволяют привязать к разным процессам разные представления ресурсов, например, процесс может быть помещён в окружение со своими точками монтирования, UTS, IPC, PID и сетевым стеком, которые не пересекаются с окружением других процессов. Если при использовании прошлых выпусков ядра использование пространств имён было доступно только для пользователя root, то начиная с выпуска 3.8 пространства имён могут применяться к непривилегированным пользователям. С практической стороны, добавленная возможность позволяет использовать отдельные привилегии для идентификаторов групп и пользователей, при их работе в изолированных контейнерах. Например, определённый пользователь может получить в контейнере особенные привилегии, которые отсутствуют у него вне контейнера, или процесс внутри контейнера может получить права root, но остаться непривилегированным вне контейнера;
Система для учёта и ограничения потребления ядром памяти, расходуемой в процессе обеспечения работы заданного набора процессов, привязанных к группе контроля (cgroup). Если ранее через cgroup можно было ограничить объем памяти привязанной к процессам, то теперь можно регулировать размер стека и slab-структур. В частности, подобные ограничения позволят изолировать такие атаки, как форк-бомба. Для управления новой возможностью представлены следующие sysctl: memory.kmem.limit_in_bytes, memory.kmem.usage_in_bytes, memory.kmem.failcnt, memory.kmem.max_usage_in_bytes;
Проведена работа по ускорению криптографических операций (например, ускорены шифры camellia,cast5, serpent, twofish, cast6) с использованием набора команд AVX на новых процессорах Intel. Оптимизирована реализация crc32c;
Для гостевых систем под управлением Microsoft Hyper-V добавлен balloon-драйвер, позволяющий исключить дублирование идентичных областей памяти в разных виртуальных окружениях;
Сетевая подсистема
Для mesh-протокола B.A.T.M.A.N. ("Better Approach To Mobile Adhoc Networking), позволяющего создавать децентрализованные сети, каждый узел в которых связан через соседние узлы, добавлена поддержка распределённой ARP-таблицы, основанной на механизме распределённой хэш таблицы (DHT) и позволяющей повысить надёжность работы ARP в разбросанных mesh-сетях;
В сетевые драйверы tun/tap и virtio-net добавлена поддержка операций с несколькими очередями пакетов (multiqueue);
Планировщик пакетов QFQ обновлён до более оптимальной реализации "QFQ+", которая отличается лучшей производительностью и дополнительными возможностями;
Добавлена возможность доступа к тегам VLAN из фильтров BPF;
Для VXLAN добавлена поддержка расширений Distributed Overlay Virtual Ethernet (DOVE);
В беспроводном стеке добавлена возможность отмены низкоприоритетных запросов на сканирование сетей, поддержка чистки результатов прошлого сканирования, поддержка использования в драйверах экономящей энергию конфигурации P2P GO, предоставление частичной radiotap-информации VHT, поддержка ассоциаций VHT, возможность определения параметров энергопотребления для отдельных интерфейсов, а не устройств;
Изменён размер TCP хэша по умолчанию (увеличен в 16 раз), который приведён в соответствие с современными реалиями;
Поддержка аппаратной акселерации вычисления контрольных сумм для инкапсулированных пакетов, проходящих через VXLAN или IP GRE;
Память и системные сервисы
Добавлена реализация механизма "huge zero_page", который в некоторых ситуациях позволит существенно (до 2.5 раз) сократить потребление физической памяти при включении в ядре поддержки Transparent Huge-Pages (THP). Huge zero_page расширяет возможности THP в направлении экономии пустых страниц памяти, для которых не выделяются реальные области физической памяти. Если приложению выделялся участок памяти заполненный нулями, ядро лишь помечает факт выделения данного блока без его непосредственного распределения. Ранее подобные пустые блоки могли выделяться только страницами по 4 Кб, отныне размер страницы может варьироваться в большую сторону;
В подсистему контроля простоя CPU (cpuidle) добавлена возможность привязки к каждому из процессоров разных драйверов для управления параметрами CPU в зависимости от загруженности процессора. Подобное необходимо для обеспечения поддержки асимметричных архитектур, таких как big.LITTLE;
При выполнении mmap() или через SYSV IPC приложение может самостоятельно определить необходимый размер страниц памяти (Huge-Pages);
Для архитектуры NUMA реализована поддержка задания политики автоматической балансировки размещения страниц между NUMA-узлами. Новая система планирования пытается держать процессы и связанную с ними память в рамках одного "домашнего" NUMA-узла, при изменении условий работы страницы памяти могут мигрировать на другой узел;
Добавлен новый системный вызов finit_module для загрузки модуля ядра по открытому файловому дескриптору. Подобная возможность используется в Chrome OS для загрузки модулей только с верифицированной по криптографическим хэшам корневой ФС;
Оборудование
Поддержка DMA-BUF для V4L2, что позволит организовать совместное использование буферов между V4L2-драйверами и иными драйверами. Например, графический драйвер сможет забирать данные из буфера V4L2 напрямую, не совершая операций копирования;
Реализация технологии A-Sync DMA Engines для драйвера Radeon, что даст возможность GPU копировать или перемещать данные даже когда шейдерная часть занята рендерингом сцен;
В драйвер nouveau добавлена начальная поддержка GPU GK106, используемого в картах GeForce GTX 660;
Интеграция нового 2D-драйвера для платформ Tegra 2 и Tegra 3, созданного при поддержке компании NVIDIA;
Для драйверов gma600 и tegra добавлена поддержка HDMI;
В драйвере управления энергопотреблением добавлена поддержка 16-семейства процессоров AMD;
Поддержка SoC Broadcom BCM281XX, Allwinner A1X, Samsung EXYNOS5440, а также плат USI Topkick, ZyXEL NSA-310 и MPL CEC4;
Поддержка контроллеров карт памяти Wondermedia SD/MMC и Realtek PCI-E SD/MMC;
Поддержка хост-адаптеров LSI MPT Fusion SAS 3.0 и Chelsio T4;
Поддержка процессоров POWER8 с улучшенной поддержкой многопоточности (SMT, Simultaneous Multi-Threading), выпуск которых должен начаться в 2013 году;
Поддержка звуковых устройств: кодека VIA HD; устройств FastTrack C400 USB, PSC724 Ultiimate Edge, Stanton SCS.1d/1m FireWire, Freescale/iVeia P1022 и Maxim MAX98090; кодеков Wolfson Microelectronics WM8766 и WM8776; звуковых карт Philips PSC724 Ultimate Edge; плат Freescale / iVeia P1022 RDK; кодека Maxim max98090; радиочипов Silicon Laboratories 476x AM/FM;
В драйвер hid-multitouch добавлена поддержка мультитач протокола, используемого в Windows 8.