Ядро 3.10
Линус Торвальдс после двух месяцев разработки анонсировал релиз ядра
Linux 3.10. Среди наиболее заметных улучшений: BCache для кеширования на SSD-накопителях содержимого более медленных жестких дисков, динамическая система управления генерацией прерываний таймером, улучшение ситуации в случае потери пакета в конце TCP-соединения, возможность проверки целостности метаданных в XFS, поддержка режима Skinny Extents в Btrfs, начало реализации поддержки гибридных систем ARM big.LITTLE, поддержка гипервизора KVM для платформы MIPS.
В новую версию принято 13.6 тысяч исправлений от примерно 1391 разработчиков, размер патча - 47 Мб (изменения затронули 10475 файлов, добавлено 663992 строк кода, удалено 395368 строк). Около 45% всех представленных в 3.10 изменений связаны с драйверами устройств, примерно 23% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 13% связано с сетевым стеком, 4% - файловыми системами и 5% c внутренними подсистемами ядра.
Из наиболее интересных новшеств можно отметить:
- Дисковая подсистема, ввод/вывод и файловые системы
- Интеграция разработанной и применяемой в Google системы Bcache, которая позволяет организовать кэширование доступа к медленным жестким дискам на быстрых SSD-накопителях, при этом кэширование ведётся на уровне блочного устройства, что позволяет ускорить доступ к накопителю независимо от используемых на нём файловых систем. Один SSD-накопитель может использоваться для кэширования нескольких различных блочных устройств. Блочное устройство может быть на лету прикреплено к кэшу и отключено от него, без размонтирования и временной остановки работы (создание кэша требует форматирования с использованием утилиты make-bcache). Поддерживается как сквозное кэширование (writethrough), так и режим отложенной записи (writeback) при котором данные записываются на исходный носитель не сразу, что позволяет обеспечить ускорение операций записи. Дополнительно поддерживается режим readahead, при котором кэш наполняется не только при записи, но и при операциях чтения;
- В Btrfs добавлена поддержка режима Skinny Extents, позволяющего уменьшить размер дерева распределения блоков на 30-35% за счёт сокращения размера ссылок в экстенте на каждый блок с 52 до 33 байт. Сокращение размера приводит к ускорению операций copy-on-write, более экономному расходованию пространства и более эффективному кэшированию метаданных в памяти. Для включения новой возможности для существующих разделов следует использовать команду "btrfstune -x". Из других изменений в Btrfs отмечается поддержка автоматического перестроения индекса квот;
- В файловой системе XFS появилась экспериментальная поддержка ведения контрольных сумм CRC32c для контроля целостности метаданных. Указанное изменение разработано в рамках более обширного проекта "self-describing metadata", нацеленного на решение проблемы с существенным временем проверки больших разделов с использованием утилиты fsck. Для решения проблемы формат ФС будет расширен дополнительной информацией, позволяющей судить о целостности каждого объекта метаданных. Например, подобные элементы проверки планируется добавить для типа метаданных, идентификатора ФС, данных о расположении блоков, параметров владельца метаданных, идентификаторе позиции в логе;
- В подсистему iSCSI добавлена поддержка протокола RDMA (iSER), предоставляющие похожие на DMA возможности для организации прямого доступа к памяти другого компьютера;
- В распределённую файловую систему Ceph добавлена поддержка многослойной работы для RBD. В частности, теперь доступен механизм для быстрого создания copy-on-write клонов сетевых блочных устройств, каждый из которых продолжает работать как отдельное RBD-устройство. Например, для организации быстрого развёртывания новых виртуальных окружений можно организовать создание образов таких окружений как клонов эталонного образа виртуальной машины;
- Виртуализация и безопасность
- Реализация порта KVM для процессоров MIPS. Порт KVM для MIPS базируется на использовании расширения MIPS-VZ, доступного в процессорах OCTEON III (MIPS32R2 и новее);
- Функциональность запуска скриптов, содержащих путь к интерпретатору в заголовке "#!", теперь может быть собрана в виде модуля ядра, что позволяет легко запретить выполнение скриптов как программ;
- Внесены многочисленные улучшения, связанные поддержкой cgroups. В cgroups добавлена поддержка генерации события с уведомлением приложения о приближении к исчерпанию доступной процессу или системе памяти. Реализована полная поддержка иерархических cgroups для групп "device" и "perf_event". Добавлена новая опция монтирования "__DEVEL__sane_behavior" при указании которой используется более жёсткий метод обеспечения непротиворечивости иерархии для всех групп;
- Выполнение криптографических функций, в том числе sha256, sha512, blowfish, twofish, serpent и camellia, оптимизировано с использованием инструкций AVX/AVX2 и SSE. Отдельно можно отметить задействование поддерживаемых в современных CPU AMD и Intel средств ускорения шифрования AES, что позволяет существенно повысить производительность eCryptfs AES-NI;
- Добавлен драйвер для виртуальных видеоадаптеров Microsoft Hyper-V;
- Интегрирован драйвер виртуальной графической карты QXL, применяемой в системах виртуализации для обеспечения акселерированного вывода графики с использованием протокола
SPICE;
- Сетевая подсистема
- В TCP-стек добавлена поддержка алгоритма проверки потери хвоста (Tail loss probe,
TLP), уменьшающего время восстановления скорости потока в случае отбрасывания пакета в конце соединения. Новый алгоритм эффективен для небольших и чувствительных к задержке соединений, для которых потеря последнего пакета может создавать существенные задержки. Интегрированный в ядро патч опробован на web-серверах Google и показал высокую эффективность при обработке небольших web-транзакций, позволил сократить время таймаута для повтора (RTO) на 15% и уменьшить время поступления HTTP-ответа на 6%;
- Для mesh-протокола B.A.T.M.A.N. ("Better Approach To Mobile Adhoc Networking), позволяющего создавать децентрализованные сети, каждый узел в которых связан через соседние узлы, обеспечена поддержка механизма "
сетевого кодирования", позволяющего в некоторых ситуациях одновременно передавать два пакета для разных получателей, путем их объединения с использованием операции исключающее "ИЛИ" (XOR);
- Удалена поддержка механизма TCP Cookie Transactions (TCPCT), который никогда не был полностью реализован на практике и негативно влияет на производительность;
- В реализацию протокола IPv6 добавлена поддержка работы поверх IEEE 1394 ("Firewire");
- В интерфейс netlink добавлена поддержка выполнения операций ввода/вывода с маппингом в память ( memory-mapped I/O), что позволяет избавиться от лишней операции копирования содержимого пакета из ядра в пространство пользователя;
- Поддержка спецификации IEEE 802.1ad (VLAN stacking или QinQ), определяющей средства для подстановки нескольких тегов VLAN в один фрейм Ethernet;
- Память и системные сервисы
- Добавлена динамическая система управления генерацией прерываний таймером, позволяющая в зависимости от текущего состояния изменять прерывания в диапазоне от тысяч тиков в секунду до одного прерывания в секунду, сводя к минимуму нагрузку на CPU при обработке прерываний при неактивности системы. В настоящее время добавленная функциональность нацелена на применение в системах реального времени и для высокопроизводительных вычислений (HPC), в будущих выпусках планируется задействовать указанную возможность и для десктоп-систем.
Важным эффектом введения новой системы является уход от использования фиксированного цикла генерации прерываний таймера в процессе организации работы многозадачности. Если ранее для переключения задач система полагалась на формирование 1000 прерываний таймера в любых условиях, независимо от того, имеется нагрузка или система простаивает, то отныне переключение между задачами не зависит от фиксированных сигналов таймера, что позволяет решить проблемы с энергопотреблением и выполнением задач в режиме реального времени (каждое прерывание от таймера приостанавливает realtime задачу в непредсказуемый момент ей выполнения). Текущая реализация в общем виде не зависит от сигналов таймера (tickless) даже когда имеются активно выполняемые задачи, тем не менее система не избавлена полностью от таймера, так как требует как минимум одного пробуждения от таймера в секунду. Полноценный tickless-режим отключается в случае выполнения более одного процесса, а также для одного из CPU, чтобы обеспечить работу других CPU в tickless-режиме;
- В ядро интегрированы наработки ветки 'ipc-scalability', в которой проведена работа по чистке и увеличению масштабируемости реализации SysV IPC. В частности, переработана система организации блокировок. Если ранее поддерживалась установка одной ipc-блокировки на массив семафоров, то теперь блокировки более гранулированы и могут быть установлены для отдельных семафоров. В итоге, некоторые тесты производительности показывают прирост производительности при работе с семафорами до 10 раз. Прирост производительности в тесте Pgbench составил 100%;
- Внесены оптимизации в код семафоров чтения и записи (rwsem), что позволило заметно повысить производительности для некоторых типов нагрузки. Например, прирост производительности в тесте Pgbench составил 100%;
- В реализацию POSIX-таймеров и таймеров высокого разрешения добавлен новый тип часов CLOCK_TAI, оперирующих международным атомным временем;
- Большая порция функций для доступа к физическому уровню USB помечена как экспортируемая только для компонентов под лицензией GPL, что не позволяет обращаться к ним и из проприетарных модулей ядра;
- Добавлена возможность сосуществования нескольких регуляторов частоты CPU (CPU frequency governor), запущенных с разными тонкими настройками. Одновременный запуск нескольких регуляторов может применяться в гетерогенных многопроцессорных системах (например ARM big.LITTLE), позволяющих разным CPU работать с разными параметрами;
- Внесены патчи, подготовленные в рамках проекта LLVMLinux и позволяющие собирать ядро компилятором Clang. Аналогичные патчи внесены в ветку Clang 3.3, что приблизило проект к состоянию, когда немодифицированное ядро можно пересобрать штатным компилятором Clang;
- Добавлен новый экспериментальный драйвер "sync", разработанный в рамках платформы Android и используемый для синхронизации между другими драйверами;
- В систему uprobes (userspace probes), нацеленную на анализ поведения выполняемых в пространстве пользователя приложений, добавлен контрольный вызов для перехвата выхода из функции (выполнение Return);
- В команду perf добавлена поддержка профилирования доступа к памяти;
- Аппаратные архитектуры
- Увеличено число SoC, поддерживающих многоплатформенные ARM-сборки (возможность собрать одно ядро, которое будет содержать поддержку различных ARM-платформ). Из распространённых ARM-систем без поддержки данной технологии пока остаётся Samsung Exynos, патчи для которого были отложены до следующего выпуска ядра;
- Интегрирован патч мультикластерного управления питанием для ARM, который приблизил ядро к полноценной поддержке технологии
big.LITTLE, комбинирующей в одном процессорном модуле несколько CPU - энергоэффективный и высокопроизводительный, с распределением работ между ними в зависимости от текущих задач;
- Поддержка новых средств управления питанием, появившихся в процессорах AMD семейства 16h ("Jaguar");
- Оборудование
- В DRM-модуль Radeon добавлена поддержка ускорения декодирования видео с использованием аппаратного декодера UVD, встроенного в современные GPU AMD. Поддержка UVD обеспечена для GPU HD4xxx-HD5xxx (R700, Evergreen), поддерживающих UVD2, и HD6xxx-HD7xxx (Northern Islands, Southern Islands) с поддержкой UVD3. Кроме того, в модуль Radeon добавлены идентификаторы графических чипов процессоров семейства Richland(A4, A6, A8 и A10) и обеспечена поддержка тайлинга для карт Radeon HD 7000;
- В DRM-модуле Nouveau для карт NVIDIA Fermi добавлена поддержка технологии сжатия видеопамяти и обеспечена поддержка переключения видеорежимов для серии NVF0;
- В драйвере для чипов NVIDIA Tegra добавлена поддержка 2D-ускорения;
- В DRM-драйвере для карт Intel улучшена поддержка чипов Valley View, добавлены расширенные средства "разгона" GPU и обеспечена поддержка Haswell Turbo. Реализована возможность бесшовного перехода в спящий режим, не требующего переключения в виртуальную консоль;
- Добавлены контроллеры частоты CPU для Samsung EXYNOS5440 и ARM big.LITTLE;
- Поддержка сетевых интерфейсов Netlogic XLR/XLS;
- Поддержка USB-контроллеров DesignWare USB2;
- В Video4Linux добавлена поддержка тюнеров Rafael Micro R820T и ITE Tech IT913x, FM-радио Silicon Laboratories 4761/64/68 AM/FM и Si476x I2C FM, звуковых кодеков Philips UDA1342, декодировщиков видео Techwell TW9903, TW9906 и TW2804.
- В подсистему ALSA ASoC добавлен новый обобщённый драйвер dmaengine_pcm, который заменил собой множество специфичных для платформ реализаций драйверов PCM;
- Добавлена поддержка новых процессоров Atmel SAMA5D3, Freescale T4240 QDS и B4 QDS, Renesas R8A73A4, R8A7778, R8A7790, Freescale i.MX6 DualLite/Solo;
- Поддержка беспроводных сетевых адаптеров на базе Ralink RT5572 и Realtek RTL8188EE, а также Ethernet адаптеров на базе Realtek RTL8152;
Более подробно можно посмотреть на форониксе (по-английски)
Грег Кроа-Хартман (Greg Kroah-Hartman), мантейнер нескольких подсистем ядра Linux и ответственный за поддержку стабильной ветки ядра,
объявил о придании ядру
Linux 3.10 статуса ветки с длительным сроком поддержки. Обновления для ветки 3.10 будут выпускаться как минимум в течение двух лет. Напомним, что для обычных выпусков ядра обновления выпускаются только до выхода следующей стабильной ветки (например, обновления для ветки 3.11 будут выпускаться до выхода 3.12.1).
Ядро 3.10 также будет использовано в качестве базиса для формирования следующей
LTSI-ветки, поддерживаемой организацией Linux Foundation. LTSI-ветка отличается от обычных выпусков с длительным сроком поддержки тем, что кроме исправлений проблем, влияющих на стабильность и безопасность, для ветки выполняется работа по бэкпортированию новшеств. В разработке LTSI-ветки участвует ряд крупных производителей потребительских устройств, среди которых Hitachi, LG Electronics, Renesas, NEC, Sony, Panasonic, Qualcomm, Samsung и Toshiba,
договорившихся о совместной работе по поддержке определённых версий ядра Linux с целью снижения затрат и более эффективного использования ресурсов. Использование ветки LTSI позволяет производителям обеспечить актуальность ядра в прошивке на протяжении всего жизненного цикла продукта без самостоятельного бэкпортирования и тестирования исправлений.
Из других longterm-веток, поддерживаемых Грегом Кроа-Хартманом, отмечаются версии 3.4 и 3.0. Ветка 3.4 будет поддерживаться ещё около года, а выпуск обновлений для ветки 3.0
будет прекращён в октябре. Отдельно силами компании Canonical обеспечивается длительная поддержка для ядра Linux 3.8, обновления для которого будут выходить до августа 2014 года. Кроме того, обновления продолжают выходить для ветки 3.2, поддержку которой взял в свои руки Ben Hutchings, входящий в команду мэйнтейнеров пакета с ядром Linux проекта Debian (ядро 3.2 используется в Debian Wheezy и в Ubuntu 12.04 LTS). Силами энтузиастов выпуск обновлений также организован для веток 2.6.32 и 2.6.34.
Дополнительно можно отметить выход очередных корректирующих обновлений ядра Linux -
3.10.5, 3.4.56,
3.2.50 и
3.0.89.
Как обычно, в анонсе выхода новых версий подчеркивается обязательность проведения обновления.
|