После почти двух с половиной месяцев разработки и восьми кандидатов в релизы вышла новая версия ядра Linux 3.15. С организационной точки зрения этот выпуск примечателен тем, что он состоялся в разгар двухнедельного окна приёма изменений для следующей версии, 3.16. Линус Торвальдс сообщил о проведении такого эксперимента в момент выпуска 3.15-rc8.
Технически же в новой версии произведена масса интересных изменений. Основные новинки ядра по категориям представлены ниже.
- Файловые системы и подсистема хранения данных.
- В XFS новый дисковый формат версии 5 признан стабильным. Также в этой ФС произведено обновление кода, отвечающего за fallocate и добавлена поддержка O_TMPFILE.
- В ext4 произведена работа по улучшению масштабируемости. Также в код fallocate добавлена поддержка операций ZERO_RANGE и COLLAPSE_RANGE.
- Увеличена производительность операций записи в FUSE.
- Обновлен код kernfs с тем, чтобы его можно было использовать в большем количестве подсистем.
- В код btrfs внесено множество изменений, направленных на исправление возможных повреждений данных. Также в btrfs отказались от собственной реализации асинхронных потоков в пользу стандартного механизма workqueues.
- F2FS получила поддержку больших каталогов.
- Представлен новый системный вызов renameat2, позволяющий атомарно поменять имена двух файлов.
- Принят код, реализующий функцию приватной POSIX-блокировки файлов (file-private POSIX locks).
- Инфраструктурный код.
- Размер стека ядра на платформе x86_64 увеличен до 16 КиБ. Это связано с тем, что в ядре выявлены возможные сценарии, при выполнении которых 8 КиБ стека уже не хватает.
- Добавлена частичная поддержка LTO (Link-Time Optimization). В будущем возможна полная поддержка LTO, что позволит несколько уменьшить итоговый размер образа ядра и повысить его быстродействие.
- Принято множество патчей, позволяющих компилировать ядро с помощью clang. Добавлены не все патчи, часть недостающих изменений принята в 3.16, ещё одна часть запланирована на 3.17.
- Добавлена поддержка смешанного режима EFI, благодаря которому появилась возможность загрузки 64-битного ядра с помощью 32-битного UEFI, что актуально для некоторых ноутбуков.
- Добавлена поддержка инструкций AVX-512 и RDSEED, реализованных в процессорах Intel.
- В код управления питанием добавлена поддержка асинхронного вывода из режима сна подсистемы SCSI, что позволило значительно сократить общее время просыпания.
- В планировщике процессов продолжена работа по интеграции собственно планировщика и механизма выбора политики простоя (idle state) процессора. В 3.16 работа по улучшению интеграции ещё ведётся.
- В коде cgroups произведена оптимизация переключения контекстов.
- Внесены улучшения в код планирования процессов реального времени.
- Переработан механизм балансировки списков активных и неактивных страниц в подсистеме управления памятью, что привело к заметному увеличению производительности при некоторых типах нагрузок.
- Значительно переработан JIT-компилятор для фильтра пакетов BPF.
- zram теперь может использовать алгоритм сжатия LZ4.
- Удалена поддержка устаревших платформ x86: SGI Visual Workstation, Sequent Computer Systems NUMAQ, IBM Summit/EXA и IA32 Unisys ES7000.
- Код PowerPC KVM теперь поддерживает транзакционную память для гостевых систем. В коде KVM для x86 исправлена поддержка OS X в качестве гостевой системы. Также в KVM улучшена поддержка Windows в качестве гостевой ОС.
- Драйверы.
- Для подсистемы драйверов реализована поддержка QoS управления питанием.
- Подсистема AHCI (libata) переработана таким образом, что множество драйверов теперь могут повторно использовать один и тот же код без его дублирования. Также в libata добавлена поддержка асинхронных операций по управлению питанием.
- В подсистему V4L добавлена поддержка множества новых устройств.
- В драйвере Intel DRM произведено множество улучшений, связанных с управлением питанием, поддержкой дисплеев HiDPI и 4K DisplayPort. Также расширена поддержка чипов Broadwell.
- В коде nouveau представлена начальная поддержка чипов Maxwell.
- Драйвер Radeon теперь поддерживает кодирование видео VCE 2.0.
- В код поддержки Samsung Exynos внесены изменения, направленные на поддержку многоплатформенных ядер. Работа над этим ещё не завершена.
- Добавлена поддержка мультитач-устройств, разработанных специально для Windows 8.1.
- Добавлена поддержка контроллера Dualshock 4, который используется в игровой консоли PlayStation 4.
- Для ноутбука Lenovo ThinkPad Carbon представлена более полная поддержка клавиатуры.
- В драйвер ACPI для ноутбуков Toshiba добавлена поддержка акселерометра и включения-выключения тачпада.
- Произведены значительные улучшения в звуковой подсистеме, которые затрагивают HD Audio и чистку кода ASoC. Также добавлены драйверы для чипов Analog Devices ADAU1977, TI PCM512x, частично для CSR SiRF SoC, TLV320AIC31XXX, Armada 370 DB и Cirrus cs42xx8.
- Добавлена поддержка чипа Realtek RTL8723AU (Wi-Fi).
Отдельно стоит упомянуть о том, что для включения в ядро предложены две интересные вещи.
- ФС Tux3, разрабатываемая с 2008-го года. Несмотря на перспективность, код в ядро не включен из-за низкого его качества и нереализованности множества заявленных функций.
- Планировщик ввода-вывода BFQ. Код уже получил хорошие отзывы в LKML, однако разработчиков просят доработать его с учётом некоторых замечаний. Также мейнтейнер блочной подсистемы чётко дал понять, что не собирается принимать в ядро ещё-один-CFQ, но в то же время готов заменить алгоритм CFQ на более разумную реализацию BFQ постепенно. Дискуссия и анализ кода BFQ в LKML продолжается. Прогнозов по срокам пока нет.
Конечно же, в новом ядре есть и множество других изменений, которые, к сожалению, не поддаются перечислению в рамках данной новости. Чтобы получить более детальную информацию о новшествах ядра, рекомендуется обратиться к указанным ниже источникам.
- LWN (первая часть, вторая часть).
- Phoronix.