Линус Торвальдс представил релиз ядра Linux 3.8. В новой версии прекращена поддержка процессоров 386-DX/SX; добавлена новая файловая система F2FS; реализован новый механизм проверки целостности метаданных для XFS; обеспечена поддержка inline-хранения данных в Ext4; подготовлен режим быстрой замены дисков для Btrfs; реализована возможность применения пространств имён для непривилегированных пользователей; значительно улучшена работа планировщика для архитектуры NUMA; 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;
- Для файловой системы Btrfs реализована поддержка быстрой замены диска. Интегрированы наработки по оптимизации производительности операций записи в синхронном режиме, более равномерному распределению нагрузки на процессоры при выполнении неупорядоченных операций, а также снижения задержек и уменьшения нагрузки на процессор при выполнении операций fsync и прямой записи в режиме O_DIRECT. Переработан код обработки ошибок в случае коллизий хэшей;
- В файловой системе Ext4 добавлена поддержка inline-хранения данных, что позволяет значительно увеличить эффективность хранения очень мелких файлов за счёт размещения данных прямо внутри inode, что значительно сэкономит дисковое пространство;
- В файловой системе XFS появился новый механизм проверки целостности метаданных на основе контрольных сумм;
- Виртуализация и безопасность
- Обеспечена поддержка пространств имён для непривилегированных пользователей (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-драйвер, позволяющий исключить дублирование идентичных областей памяти в разных виртуальных окружениях;
- Сетевая подсистема
- Память и системные сервисы
- Приняты патчи с реализацией поддержки механизма "huge zero_page", который в некоторых ситуациях позволит существенно (до 2.5 раз) сократить потребление физической памяти при включении в ядре поддержки Transparent Huge-Pages (THP). Huge zero_page расширяет возможности THP в направлении экономии пустых страниц памяти, для которых не выделяются реальные области физической памяти;
- В подсистему контроля простоя CPU (cpuidle) добавлена возможность привязки к каждому из процессоров разных драйверов для управления параметрами CPU в зависимости от загруженности процессора. Подобное необходимо для обеспечения поддержки асимметричных архитектур, таких как big.LITTLE;
- При выполнении mmap() или через SYSV IPC приложение может самостоятельно определить необходимый размер страниц памяти (Huge-Pages);
- Оборудование
- Поддержка DMA-BUF для V4L2, что позволит организовать совместное использование буферов между V4L2-драйверами и иными драйверами. Например, графический драйвер сможет забирать данные из буфера V4L2 напрямую, не совершая операций копирования;
- Реализация технологии A-Sync DMA Engines для драйвера Radeon, что даст возможность GPU копировать или перемещать данные даже когда шейдерная часть занята рендерингом сцен;
- Добавление нового 2D-драйвера для платформ Tegra 2 и Tegra 3, созданного при поддержке компании NVIDIA;
- Поддержка SoC Broadcom BCM281XX, Allwinner A1X, Samsung EXYNOS5440, а также плат USI Topkick, ZyXEL NSA-310 и MPL CEC4;
- Поддержка контроллеров карт памяти Wondermedia SD/MMC и Realtek PCI-E SD/MMC;
- Поддержка процессоров POWER8 с улучшенной поддержкой многопоточности (SMT, Simultaneous Multi-Threading), выпуск которых должен начаться в 2013 году;
- Поддержка звуковых устройств: кодека VIA HD, устройств FastTrack C400 USB, PSC724 Ultiimate Edge, Stanton SCS.1d/1m FireWire, Freescale/iVeia P1022 и Maxim MAX98090;
- В драйвер hid-multitouch добавлена поддержка мультитач протокола, используемого в Windows 8.