После двух месяцев разработки Линус Торвальдс выпустил ядро Linux 3.12. Одновременно упомянуты планы по подготовке ядра 4.0, которое планируется выпустить следом за 3.19, примерно через год. Выпуск 4.0 будет примечателен тем, что в него будут включены только исправления ошибок, без добавления функциональных изменений и новшеств. Таким образом ядро 4.0 станет дополнительным стабилизирующим этапом, подводящим итог развития ветки 3.x.
Среди наиболее заметных улучшений ядра 3.12: offline-режим дедупликации в Btrfs, моногопоточная реализация RAID5, новая цель "SYNPROXY" в netfilter, планировщик пакетов FQ, реализация Render Nodes в подсистеме DRI, новый алгоритм OOM, драйвер для GPU из состава Qualcomm Snapdragon, поддержка APU AMD Berlin. В новую версию принято 10.4 тысяч исправлений от 1259 разработчиков, размер патча - 37 Мб (изменения затронули 8636 файлов, добавлено 588 тысяча строк кода, удалено 264 тысяч строк). Около 46% всех представленных в 3.12 изменений связаны с драйверами устройств, примерно 20% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 12% связано с сетевым стеком, 5% - файловыми системами и 4% c внутренними подсистемами ядра. 9.8% изменений внесено сотрудниками компании Intel, 7% - Linaro, 6.7% - Red Hat, 4.7% - Samsung, 3.7% - IBM, 2.4% - Freescale, 2.3% - Texas Instruments, 2.1% - Linux Foundation, 2.0% - SUSE, 1.7% Oracle, 1.7% - AMD, 1.5% - Google.
Из наиболее интересных новшеств можно отметить:
- Дисковая подсистема, ввод/вывод и файловые системы
- Стабилизация поддержки клиента кластерной файловой системы Lustre, используемой в большинстве кластеров, входящих в список самых мощных суперкомпьютеров мира (6 из 10 и 60 из 100 самых мощных кластеров используют Lustre). Клиентская часть Lustre работает вкупе с серверами для хранения данных и обслуживания метаданных, предоставляя средства для обращения клиентов к хранимым в распределённой ФС данным (основанный на ext4 бэкенд ldiskfs для организации работы сервера хранения данных в ядро не включен). Модуль для работы клиента Lustre был интегрирован в состав ядра 3.11, но поставлялся в экспериментальном разделе "staging". В версии 3.12 обеспечена его сборка по умолчанию;
- В Btrfs добавлена начальная поддержка offline-режима дедупликации блоков данных, при котором дедупликация производится не в момент записи данных, а с использованием внешних утилит, передающих ядру список экстентов, претендующих на дупликацию, через специальный ioctl BTRFS_IOC_FILE_EXTENT_SAME. Получив данный список, ядро произведет дедупликацию, предварительно проверив её целесообразность. Кроме того, в реализацию Btrfs включена серия оптимизаций производительности, в том числе поддержка построения дерева UUID'ов для подраздела, которое заметно ускоряет работу операций send и receive при наличии большого количества снапшотов или подразделов в файловой системе;
- В файловую систему ext3 добавлена поддержка опции монтирования "journal_path=", позволяющей указать местоположение внешнего журнала. В ext4 также реализован метод агрессивного кэширования экстентов с использованием дерева состояния экстентов, который позволяет снизить потребление памяти для большинства типов нагрузки и увеличить производительность асинхронного ввода/вывода;
- В файловой системе XFS обеспечена поддержка пространств имён (namespaces), что позволяет обеспечить использование в изолированных контейнерах отдельных полномочий доступа к XFS. Усилено совместное использование кода в модуле ядра XFS и библиотеке libxfs. Проведена оптимизация производительности;
- Обеспечена поддержка многопоточности в реализации программного RAID5 (MD RAID5), что позволило поднять максимальный предел интенсивности ввода/вывода при использовании высокопроизводительных накопителей;
- Для DM (device mapper) подготовлен модуль для отслеживания статистики по активности ввода/вывода для диапазона блоков на DM-устройстве;
- В реализацию механизма pstore, позволяющего сохранить отладочную информацию о причине краха в не теряемые между перехагрузками области памяти, добавлена поддержка сохранения данных в сжатом виде;
- В подсистему ATA добавлена поддержка новых SSD-накопителей, поддерживающих обработку очереди TRIM-операций;
- В F2FS, развиваемую компанией Samsung высокопроизводительную файловую систему для Flash-накопителей, добавлена поддержка sysfs, возможность inline-хранения атрибутов xattrs, проведена оптимизация производительности;
- Обеспечена поддержка указания данных о таблицах разделов блочного устройства в виде передаваемых ядру загрузочных опций. Пример для накопителя eMMC: 'blkdevparts=mmcblk0:1G(data0),1G(data1),-;mmcblk0boot0:1m(boot),-(kernel)';
- В файловой системе HFS+ появилась поддержка POSIX ACL;
- Виртуализация и безопасность
- В подсистему evdev, работающей с устройствами ввода, добавлен новый ioctl-вызов EVIOCREVOKE, позволяющий отозвать доступ к указанному файловому дескриптору. Указанный вызов позволяет обеспечить защиту от атак по перехвату ввода при переключении активных графических сеансов.
- Добавлен механизм паравиртуализированных блокировок (ticket spinlocks), увеличивающих эффективность блокировок в виртуальных окружениях;
- Сетевая подсистема
- В подсистему netfilter добавлена новая цель "SYNPROXY", симулирующая установку соединения на одной стороне межсетевого экрана до непосредственного фактического соединения на другой стороне. Указанная возможность позволяет организовать обработку SYN cookies по периметру для защиты от попыток обхода межсетевого экрана.
- В TCP-стек добавлена поддержка регулирования размера TSO (TCP segmentation offloading), что помогает исключить пульсацию TCP-трафика TCP при использовании разгрузки операций с сегментацией TCP;
- В сетевой стек добавлен планировщик FQ (Fair Queuing), обеспечивающий дисциплину справедливого управления очередью для проходящего через систему транзитного трафика. В отличие от других планировщиков, таких как CBQ, FQ отличается достаточно простой реализацией и способностью планирования обработки пакетов из любого числа потоков в ситуации использования техник снижения пульсации при передаче пакетов (TCP pacing).
- Память и системные сервисы
- В подсистеме прямого рендеринге реализована технология Render Nodes, подразумевающая разделение монолитных устройств /dev/dri/card{num} на две категории: Rendering Nodes (/dev/dri/renderD{num}), отвечающие за аппаратное ускорение рендеринга и обсчет вычислительных заданий GPGPU, и ModeSetting Nodes (/dev/dri/modeset{num}), обеспечивающие переключение видеорежимов и управление экраном. Таким образом предоставлены более гибкие средства для управления правами доступа и возможность выполнения вычислений на GPU или рендеринга без вывода на экран и без привязки к активному дисплею. До реализации Render Nodes все операции рендеринга и смены видеорежимов выполнялись через один интерфейс, что приводило к невозможности независимого выставления прав на выполнение операций ускорения рендеринга и переключение видеорежимов. Поддержка новой концепции уже добавлена в драйверы i915, Radeon и Nouveau.
- Удалены поддержка интерфейса /proc/acpi/event, который уже длительное время отмечен как устаревший и не рекомендован для использования.
- В состав принят патч, определяющий факт полного бездействия системы (процессоры при этом могут не находится в состоянии "idle" и выполнять код приложения) и отключающий в этом случае прерывания от таймера. Изменение позволяет поднять производительность при использовании появившейся в ядре 3.10 системы динамического управления генерацией прерываний таймером, выполняющей планирование выполнения задач не зависимо от сигналов таймера. Патч позволяет исключить влияние ядра на выполнение приложения реального времени, обеспечив максимальную отзывчивость, без переключений на обработку прерываний от таймера (ранее, для работы системы требовалось минимум одно прерывание от таймера в секунду).
- Менеджеры управления видеопамятью GEM и TTM переведены на использование унифицированный системы для управления виртуальными областями памяти, что позволило исключить дублирование кода;
- В подсистеме управления памятью появилась возможность миграции больших страниц памяти (huge pages) между узлами NUMA;
- Интегрирован улучшенный алгоритм OOM (out-of-memory), более корректно обрабатывающий состояния нехватки памяти в системе, но способный привести к появлению ранее не фиксированных ошибок категории "out of memory" в пользовательских приложениях. Основное отличие от ранее используемого алгоритма сводится к том, что при запросе блока при исчерпании доступной памяти, теперь процессу возвращается ошибка выделения памяти (ENOMEM) вместо поиска и принудительного завершения прожорливого процесса.
- Оборудование
- Добавлен DRM-драйвер (Direct Rendering Manager) msm для графической подсистемы чипов Qualcomm Snapdragon с GPU Adreno A2xx/A3xx, разработанный в рамках проекта Freedreno;
- В DRM-драйвере Nouveau обеспечена корректная поддержка управления питанием, в том числе добавлена возможности динамического включения и отключения питания для вторичных GPU на ноутбуках, поддерживающих технологию NVIDIA Optimus;
- В DRM-драйвере Radeon появилась поддержка динамического управления питанием (DPM, Dynamic Power Management) и ASPM (Active State Power Management) для GPU HD 8000 (Sea Islands). Добавлена поддержка APU AMD Berlin, первого процессора на базе архитектуры HSA (Heterogeneous System Architecture) с графическим ядром GCN (Graphics Core Next);
- В DRM-драйвере для GPU Intel улучшена поддержка процессоров семейства Haswell с графическим ядром Iris Pro 5200.
- Поддержка ftrace, kprobes и kernel preemption для процессорной архитектуры Tile, отличающейся возможностью интеграции на одном чипе до нескольких сотен процессорных ядер. Прекращена поддержка старых CPU TILE64;
- Поддержка плат Freescale P1023 RDB и C293PCIE;
- Поддержка звуковых кодеков WM8997 (Wolfson Microelectronics), WM8904, TI PCM1792A, TI PCM1681, звуковых чипов AK4554 (Asahi Kasei Microdevices) и звуковых контрлллеров Renesas R-Car SoC, Freescale S/PDIF и SSI AC'97;
- Поддержка RAID-адаптеров ATTO Technology ExpressSAS
- Поддержка беспроводных карт на базе чипа Realtek RTL8188EU и Ethernet-адаптеров Intel i40e, MOXA ART (RTL8201CP), Solarflare SFC9100 и CoreChip-sz SR9700;
- Поддержка USB-контроллеров Faraday FOTG210 OTG и USB-модемов GCT GDM724x LTE;
- В Video4Linux добавлена поддержка чипов обработки видео Renesas VSP1, устройств видеоввода Renesas R-Car, Mirics MSi3101, универсальных программируемых приёмопередатчиков Mirics MSi3101, USB-камер Syntek STK1135 USB, декодировщиков видео Analog Devices ADV7842 и кодировщиков видео Analog Devices ADV7511;