Линус Торвальдс представил релиз ядра Linux 3.2. Из основных улучшений можно отметить увеличение отзывчивости десктоп-приложений в условиях интенсивной записи, поддержку гибкого лимитирования процессорного времени, расширение до 1 Мб максимального размера блока в Ext4, ускорение операций проверки целостности данных и обеспечение автоматического резервного копирования важных метаданных в Btrfs, динамическое распределение свободного места и рекурсивные снапшоты в Device Mapper, реализация в TCP-стеке алгоритма пропорционального снижения интенсивности отправки пакетов, поддержка процессорной архитектуры Qualcomm Hexagon, интеграция модуля расширенной верификации EVM, переписанная утилита "perf top".
Так как выпуск 3.1 был задержан почти на месяц, выпущенный релиз является рекордным по числу изменений - размер патча 99 Мб (добавлено 12664 тыс. строк кода, удалено - 12608 тыс. строк), что примерно в два раза больше, чем для прошлой версии ядра. Около 40% всех представленных в ядре 3.2 изменений связаны с драйверами устройств, примерно 23% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 15% связано с сетевым стеком, 3% - файловыми системами и 4% c внутренними подсистемами ядра.
Наиболее интересные новшества ядра 3.2:
Память и системные сервисы
Система гибкого распределения ресурсов CPU (Process bandwith controller). В планировщик задач CFS добавлена возможность ограничения времени потребления CPU для группы процессов, например, если система не нагружена подобная возможность позволит выделить больше ресурсов процессам, которые в иной ситуации были бы ограничены более жёстко. Разделяя текущие ресурсы CPU (процессорное время) между всеми процессами, планировщик задач ранее не имел механизмов адресного распределения свободных ресурсов CPU, так как каждый все процессы заинтересованы получить как можно больше времени CPU.
Начиная с версии ядра 3.2 появилась возможность задать верхнюю границу допустимых затрат ресурсов CPU, которую теперь можно указать для группы процессов через задание квоты процессорного времени и периода действия квоты. Вместо общей квоты на максимальное время CPU, действующей на всём протяжении выполнения процессе, новая схема подразумевает задание дополнительного параметра - числа микросекунд, за которые группе разрешено потратить ресурсы, указанные в значении квоты. После истечения периода - выделенная квота становится доступной снова (до истечения периода, если квота уже израсходована, процесс замораживается, пока текущий период не закончится);
Увеличение отзывчивости десктоп-приложений в условиях большой интенсивности операций записи данных. Переработаны некоторые механизмы процесса Writeback, выполняющего операции сброса буферизированных страниц памяти из ОЗУ на диск. Во время сброса данных выполняется блокировка процессов, чтобы избежать поступления от них новых данных, пока не записаны на диск текущие. В новой версии ядра переработан алгоритм, определяющий размер буферизируемых в ОЗУ данных, в результате чего было сокращено число операций ввода/вывода и снижена нагрузка на CPU. Дополнительно сокращено число операций обратной записи, связанных с файловой системой, что также положительно повлияло на производительность во многих ситуациях;
Новые системные вызовы process_vm_readv и process_vm_writev для организации прямого обращения к областям памяти других процессов. Главной идеей технологии доступа к внешним областям памяти является решение задачи по предоставлению MPI-приложениям эффективных средств для взаимодействия между процессами внутри одного узла кластера, например, вместо дополнительного копирования сообщения через разделяемую память, можно обеспечить прямой доступ к одной копии сообщения;
Полностью переписана утилита "perf top". Улучшено оформление вывода, добавлена поддержка инспектирования задач и библиотек на лету (live-режим, при котором можно выполнять навигацию по данным в процессе их поступления и просматривать детали для отдельных процессов и библиотек), а также возможность рекурсивного просмотра аннотированного ассемблерного кода для вызываемых функций;
Дисковая подсистема, ввод/вывод и файловые системы
Для файловой системы Ext4 максимальный размер блока данных увеличен с 4 Кб до 1 Мб. Форматирование ФС с большим размером блока позволяет заметно увеличить производительность при хранении файлов большого размера за счёт уменьшения фрагментации и снижении затрат на операции распределения блоков. Ценой использования блоков большого размера является снижение эффективности расходования дискового пространства при хранении мелких файлов, например, при блоке в 1 Мб даже если файл занимает 1 Кб ему будет выделен мегабайтный блок. Большие размеры блоков поддерживаются утилитой mkfs из пакета e2fsprogs начиная с версии 1.42, при этом созданные с большими блоками ФС не являются обратно совместимыми с прошлыми версиями ядра Linux (т.е. с ними сможет работать только ядра начиная с версии 3.2);
Серия интересные улучшений для файловой системы Btrfs:
Увеличение скорости выполнения операции проверки целостности данных ("Scrubbing", сверка указанных в экстентах контрольных сумм с контрольными суммами, вычисленными на основе фактических данных). Использование упреждающего чтения позволило сократить время проверки раздела с 89 до 43 секунд и увеличить пропускную способность с 70 до 90%;
Реализация поддержки автоматического резервного копирования наиболее критичных метаданных, с информацией о корневых деревьях ФС, участвующих в четырёх последних коммитах. Переключение на резервную копию осуществляется через опцию "-o recovery" на этапе монтирования;
Вывод детальной информации о характере повреждений. Например, теперь выводятся обратные ссылки, указывающие на файлы или btrees-структуры, связанные с повреждённым блоком), которую можно использовать. Вместо "block xxyyzz is bad" система отныне выведет значительно более подробное сообщение: "btrfs: checksum error at logical 5085110272 on dev /dev/sde, sector 2474832, root 5, inode 32583, offset 0, length 4096, links 1 (path: default/kernel-0/Makefile)";
Подготовка набора утилит для ручного анализа и инспектирования файловой системы. Например, для определения файла, связанного с экстентом 5085110272 можно запустить "btrfs inspect logical 5085110272 /mnt", а для поиска файла по номеру inode - "btrfs inspect inode 32583 /mnt";
Новая опция монтирования: nospace_cache;
Интеграция наработок по увеличению производительности в некоторых областях применения, например, заметно ускорена работа в конфигурациях, связанных с большим числом случайных записей. Скорость прохождения теста xfstests 83 увеличилась с 445 до 28 секунд;
Поддержка динамического выделения места в хранилище (Thin provisioning) в Device Mapper. Поддержка "Thin provisioning" в Device Mapper позволяет создать несколько виртуальных дисковых разделов, суммарный размер которых превышает физический размер доступных накопителей. Например, если имеется хранилище для 100 пользователей, каждому из которых требуется раздел в 10 Гб, при этом пользователи в среднем используют не более 50% предоставленного дискового пространства, физическое хранилище размером 1000 Гб будет заполнено наполовину.
Техника "Thin provisioning" позволяет выделять физическое дисковое пространство по мере необходимости и создать виртуальное хранилище, размер которого превышает физический размер накопителей, т.е., для вышепредставленного примера, будет достаточно накопителя в 500 Гб. Со своей стороны пользователи получат хранилище требуемого размера, по мере заполнения которого будет выделяться место из общего пула. В ситуации, когда станет наблюдаться нехватка физического дискового пространства, администратору будет достаточно подключить к пулу дополнительный диск;
Поддержка рекурсивных снапшотов в Device Mapper, т.е. можно создавать снапшот в снапшоте, без ограничения уровня вложенности и без потери эффективности для вложенных снапшотов;
В реализации файловой системы CIFS добавлена поддержка маппинга uid/gid в SID, появилась опции монтирования backupuid и backugid для делегирования доступа для создания резервных копий пользователем с указанным uid/gid;
В реализации файловой системы JFFS2 появилась поддержка опций "compr=lzo" и "compr=zlib";
Сетевая подсистема
В TCP-стек интегрирована поддержка алгоритма пропорционального снижения интенсивности отправки пакетов, реализованного инженерами Google и позволяющего быстрее восстановить оптимальные параметры потока после временных проблем с передачей данных;
Поддержка RFC4944, определяющем метод передачи IPv6-пакетов поверх маломощных беспроводных сетей IEEE 802.15.4 (6LoWPAN);
Реализация протокола NCI (NFC Controller Interface), используемого для передачи данных между NFC-контроллером (NFCC) и хост-устройством (DH);
Оборудование и аппаратные архитектуры
Поддержка DSP-процессоров Qualcomm Hexagon, сочетающих поддержку числовых операций, многопоточность, разделение привилегий и инструкции для эффективной обработки сигналов с расширенной архитектурой современных микропроцессоров;
Новый экспериментальный драйвер для механизма обнаружения и исправления ошибок EDAC, присутствующего в процессорах Intel Sandy Bridge;
Обновлён DRM/KMS-драйвер Nouveau DRM/KMS, в котором появилась поддержка новых карт семейства Fermi, например, карт GeForce GT 520;
Снят статус экспериментального с DRM-драйвера vmwgfx, предназначенного для обеспечения видеоакселерации внутри гостевых окружений VMware;
В состав включён DRM-драйвер для SoC-платформы Exynos4210, используемой в смартфоне Samsung Galaxy S II;
Множество улучшений и изменений, связанных с поддержкой аппаратных устройств.
Виртуализация и безопасность
Улучшенная реализация алгоритма хэширования SHA1, который оптимизирован для процессоров x86-64 и использует в процессе работы команды SSE3 и AVX;
Интеграция модуля расширенной верификации EVM (extended verification module), позволяющего защитить расширенные атрибуты файлов (xattrs) от атак, направленных на нарушение их целостности (например, EVM не позволит совершить offline-атаку, при которой злоумышленник может изменить мета-данные, например, загрузившись со своего накопителя).