Linux 3.6
🕛 01.10.2012, 17:11
Линус Торвальдс на неделю раньше прогнозируемого срока представил релиз ядра Linux 3.6. В новую версию принято около 9 тысяч исправлений от более чем 1200 разработчиков, размер патча - 34 Мб (изменения затронули 8296 файлов, добавлено 528478 строк кода, удалено 256811 строк). Около 42% всех представленных в 3.6 изменений связаны с драйверами устройств, примерно 23% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 15% связано с сетевым стеком, 6% - файловыми системами и 4% c внутренними подсистемами ядра. Наиболее интересные новшества ядра 3.6: Сетевая подсистема Включение наработок по использованию коротких очередей TCP пакетов (TSQ - TCP Small Queues), подразумевающих использование сокращённого буфера для очереди отправляемых через каждый сокет пакетов. Указанная возможность разработана в рамках инициативы по борьбе с негативным влиянием промежуточной буферизации пакетов (Bufferbloat) сетевым оборудованием. Тесты показали, что уменьшение размера буфера до разумных величин не влияет на пропускную способность, но позволяет снизить негативное влияние излишней промежуточной буферизации пакетов на однородность потока (jitter) и время прохождения пакетов (latency), за счёт сокращения числа находящихся в очереди исходящих пакетов и, соответственно, уменьшения времени нахождения пакетов в очереди. Регулировать лимит на размер очереди можно через файл /proc/sys/net/ipv4/tcp_limit_output_bytes (значение по умолчанию 128 Кб). Поддержка режима быстрого открытия TCP-соединений (TFO - TCP Fast Open), позволяющего сократить число шагов установки соединения за счёт комбинирования в один запрос первого и второго шагов классического 3-этапного процесса согласования соединения, и давая возможность отправки данных на начальном этапе установки соединения. TFO пока отнесён к экспериментальным TCP-расширением, так как соответствующая опция пока не одобрена IANA. По оценке компании Google, разработавшей TFO, для примерно 33% HTTP-запросов браузеру требуется предварительная отправка одного RTT-пакета для установки TCP-соединения с удалённым хостом. Большинство HTTP-ответов укладываются в начальное окно перегрузки величиной 10 пакетов, удваивая время отклика. Режиме TFO позволяет снизить накладные расходы за счёт возможности включения HTTP-запроса в начальный TCP SYN пакет. В итоге, активация TFO позволяет сократить время загрузки страниц в среднем примерно на 10%, а в некоторых ситуациях до 40%. Дисковая подсистема, ввод/вывод и файловые системы В состав ядра интегрирована подсистема VFIO (Virtual Function I/O), нацеленная на предоставление средств для создания виртуализированных драйверов устройств, работающих в пространстве пользователя. Подсистема была создана разработчиками системы виртуализации KVM для упрощения создания драйверов для прямого доступа к PCI-устройствам из гостевых систем, обеспечивающих максимальную производительность и минимальное время задержки, но не требующих запуска отдельных компонентов уровня ядра на стороне хост-системы. В частности VFIO предоставляет более безопасный механизм, чем UIO, позволяющий обойтись без использования специфичного KVM PCI кода и выносящий драйверную логику в пространство пользователя, используя для обеспечения изоляции IOMMU Groups. Поддержка VFIO ожидается в будущих выпусках QEMU. Для файловой системы Btrfs добавлена поддержка команды send, позволяющей вычислить различия между двумя подразделами Btrfs и выделить результат в обособленном виде (информация о различиях сохраняется в файле). В дальнейшем, сохранённая информация о различиях может быть использована при помощи команды "receive" для накатывания изменений к снапшоту для доведения его до состояния другого снапшота. Указанная возможность окажется полезной при организации инкрементального копирования или при организации зеркалирования содержимого разделов. Формирование слепка различий производится командой "btrfs send -i oldsnap snapshot", для применения изменений к снапшоту предусмотрена команда "btrfs receive".
Кроме того, в Btrfs добавлена поддержка квот для отдельных подразделов, позволяющих определить как много места могут занимать отдельные области ФС. Информация о квотах для EXT4 отныне не сохраняется в видимых файлах, а размещается в форме метаданных, внутри скрытых inode. Интеграция патчей для обеспечения работы разделов подкачки поверх NFS; Добавлен интерфейс для информирования ядра об изменении размера дискового раздела, что позволяет сразу учесть подобные изменения для примонтированных устройств. Виртуализация и безопасность Поддержка групп IOMMU (IOMMU Groups), позволяющих обеспечить изоляцию устройств PCI и PCIe с использованием технологий виртуализации ввода/вывода AMD-Vi и Intel VT-d. IOMMU Groups решает проблему с невозможностью изоляции одного PCI-устройства от другого. Для устройств которые не могут быть изолированны по отдельности поддерживается их объединение в одну группу. IOMMU Groups, в частности, выступает в качестве основы для вышеотмеченной подсистемы VFIO. Добавлена новая инфраструктура netfilter для отслеживания соединений из пространства пользователя. Во многих модулях netfilter добавлена поддержка пространств имён. Память и системные сервисы Проведена работа по рефакторингу заголовочных файлов, в рамках которой произведено разделение по разным иерархиям директорий заголовочных файлов для UAPI (Userspace API) и KAPI (Kernel API). Подобное разделение позволит более явно выделить необходимые только для ядра заголовки (например, разработчики дистрибутивов получат возможность подготовить сокращённый пакет только с заголовками UAPI). Кроме того проведена работа по упрощению сложившейся усложнённой и запутанной схемы внутренних зависимостей между заголовочными файлами, например, разработчики сталкивались с проблемами добавления inline-функций в заголовочный файл, так как нередко в таких функциях необходимо было использовать компоненты из других заголовочных файлов; Поддержка протокола EFI Handover Protocol на уровне ядра, позволяющего упростить написание EFI-загрузчиков и ускорить процесс загрузки на EFI-системах; Добавлен режим "Suspend to both", комбинирующий спящий и ждущий режимы, путем перехода в ждущий режим после предварительного сохранения образа памяти на диск. В ситуации когда запас аккумулятора иссяк, новый режим позволяет восстановить работу через загрузку с диска дампа памяти, как при спящем режиме. Если запас энергии не исчерпан, восстановление будет совершено как при ждущем режиме; Оборудование и аппаратные архитектуры Обновлен DRM-драйвер для карт Intel, интегрированы наработки по оптимизации производительности. В DRM-драйвере Radeon по умолчанию включена поддержка PCI Express 2.0. В драйвер "intel_idle" добавлена поддержка дополнительных режимов экономии энергии, появившихся в Intel Ivy Bridge. Для просмотра статистики об изменении частоты процессора и его нахождения в состоянии простоя (idle) в состав дерева ядра включён переработанный вариант утилиты "turbostat". В подсистему perf добавлена поддержка метрик производительности "uncore", реализованных в CPU Intel Nehalem и Sandy Bridge. Для 64-разрядных процессоров на базе архитектуры x86 добавлена поддержка загрузочных опций "reboot=bios" и "reboot-cpu". Добавлена поддержка CANFD, расширения протокола CAN (Controller Area Network). В подсистеме Bluetooth добавлена поддержка трёхпроводных UART, что позволяет организовать работу Bluetooth через соединения поверх последовательных портов; Поддержка новых процессоров и платформ: TI OMAP5, Loongson 1B, Freescale BSC9131RDB, Altera SOCFPGA Cyclone V, Marvell Armada 370 и Armada XP, TI EVMC6678LE, Freescale Coldfire 5251/5253 и 5441x. Поддержка звуковых систем и кодеков: Wolfson Micro "Arizona", TI Isabelle IC, ST-Ericsson AB8500 Dialog DA732x, Wolfson Micro WM5102 и WM5110 и ST STA529. Поддержка новых сетевых устройств: RealTek rt3290 WiFi, Sony PaSoRi NFC, радиопередатчиков Atmel RF230/231, Cambridge Silicon Radio wireless, Broadcom BCM8706 и BCM8727 Ethernet и Asix AX88172A USB 2.0 Ethernet.