Релиз ядра Linux 3.2. Обзор новшеств

Линус Торвальдс представил релиз ядра Linux 3.2. Из основных улучшений можно отметить увеличение отзывчивости десктоп-приложений в условиях интенсивной записи, поддержку гибкого лимитирования процессорного времени, увеличение до 1 Мб максимального размера блока в Ext4, ускорение операций проверки целостности данных и обеспечение автоматического резервного копирования важных метаданных в Btrfs, динамическое распределение свободного места и рекурсивные снапшоты в Device Mapper, реализацию алгоритма пропорционального снижения интенсивности отправки пакетов в TCP-стеке, поддержку процессорной архитектуры Qualcomm Hexagon, интеграцию модуля расширенной верификации EVM.

Так как выпуск 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" на этапе монтирования;
      • Вывод детальной информации о характере повреждений. Например, теперь выводятся обратные ссылки, указывающие на файлы или btree-структуры, связанные с повреждённым блоком. Вместо "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 и backupgid, дающие возможность делегирования доступа для создания резервных копий непривилегированному пользователю с указанным uid/gid;
    • В реализации файловой системы JFFS2 появилась поддержка опций "compr=lzo" и "compr=zlib";
  • Сетевая подсистема
    • В TCP-стек интегрирована поддержка алгоритма пропорционального снижения интенсивности отправки пакетов, реализованного инженерами Google и позволяющего быстрее восстановить оптимальные параметры потока после временных проблем с передачей данных;
    • Поддержка RFC4944, определяющего метод передачи IPv6-пакетов поверх маломощных беспроводных сетей IEEE 802.15.4 (6LoWPAN);
    • Реализация протокола NCI (NFC Controller Interface), используемого для передачи данных между NFC-контроллером (NFCC) и хост-устройством (DH);
    • Поддержка режима CAN Gateway/Router для маршрутизации и изменения CAN-кадров (Controller Area Network);
    • Для mesh-протокола B.A.T.M.A.N. добавлена поддержка изоляции точек доступа на принимающей и отправляющей стороне;
    • В mac80211 добавлена поддержка uAPSD (Unscheduled Automatic Power Save Delivery) и реализация mesh-шлюза;
    • В реализации сетевых мостов (bridge) добавлена поддержка перенаправления некоторых кадров c локального линка. Управление перенаправлением осуществляется через атрибут /sys/class/net/brX/bridge/group_fwd_mask;
  • Оборудование и аппаратные архитектуры
    • Поддержка DSP-процессоров Qualcomm Hexagon, сочетающих поддержку числовых операций, многопоточность, разделение привилегий и инструкции для эффективной обработки сигналов с расширенной архитектурой современных микропроцессоров;
    • Новый экспериментальный драйвер для механизма обнаружения и исправления ошибок EDAC, присутствующего в процессорах Intel Sandy Bridge;
    • Обновлён DRM/KMS-драйвер Nouveau DRM/KMS, в котором появилась поддержка новых карт семейства Fermi - NVC1 (GeForce GT 415M, 420, 420M, 425M, 430, 435M, 525M, 530, 540M, 550M, 555, Quadro 600 и 1000M), NVC8 (GeForce GTX 560 Ti OEM, 570, 580, 590, Quadro 3000M, 4000M и 5010M), NVCF (GeForce GTX 550 Ti и 560M). Переписана поддержка вывода через DisplayPort;
    • В DRM-модуле для карт Radeon проведено исправление ошибок, добавлены незначительные улучшения и оптимизации;
    • В DRM-модуле Intel решены проблемы со стабильностью для карт на базе Sandy Bridge и Ivy Bridge. Оптимизация работы с LLC-кэшем позволила достигнуть существенного увеличения производительности для Sandy Bridge и более новых графических карт. В процессе подготовки новой версии для карт Sandy Bridge по умолчанию был активирован режим энергосбережения RC6 и режим сжатия фреймбуфера (Frame Buffer Compression), но за несколько дней перед релизом из-за обнаружения проблем, данные режимы были отключены по умолчанию. Улучшена поддержка вывода через Display Port, HDMI, LVDS и SDVO. Продолжено развитие драйвера для карт Intel GMA 500 Poulsbo (Cedarview, Moorestown, Medfield), который пока не поддерживает функции акселерации;
    • Снят статус экспериментального с DRM-драйвера vmwgfx, предназначенного для обеспечения видеоакселерации внутри гостевых окружений VMware;
    • В состав включён DRM-драйвер для SoC-платформы Exynos4210, используемой в смартфоне Samsung Galaxy S II;
    • Из ветки staging в основное дерево переведены два новых brcm80211-драйвера для беспроводных карт Broadcom: brcmfmac (BCM4329 ASIC) и brcmsmac (BCM4313 (0x4727), BCM43224 (0x0576, 0x4353) и BCM43225 (0x4357));
    • Поддержка новых устройств хранения: MegaRAID 9360/9380 12GB/s, ASMedia ASM1061, OCZ RevoDrive3 & zDrive R4;
    • В драйвере ath9k появилась поддержка беспроводных карт на базе чипов AR9580, AR9580 и AR946/8x;
    • Добавлена поддержка подключаемых через USB графических карт SMSC UFX6000/7000;
    • Поддержка расширений шины PCI: PRI (Page Request Interface) и PASID (Process Address Space Identifiers);
    • Множество других улучшений и изменений, связанных с поддержкой аппаратных устройств.
  • Виртуализация и безопасность
    • Улучшенная реализация алгоритма хэширования SHA1, который оптимизирован для процессоров x86-64 и использует в процессе работы команды SSE3 и AVX;
    • Интеграция модуля расширенной верификации EVM (extended verification module), позволяющего защитить расширенные атрибуты файлов (xattrs) от атак, направленных на нарушение их целостности (EVM не позволит совершить offline-атаку, при которой злоумышленник может изменить метаданные, например, загрузившись со своего накопителя);
    • В lguest появилась возможность запуска в режиме паравиртуализации под управлением KVM;
    • Код с драйверами для поддержки работы в окружении Microsoft HyperV перемещен в основное дерево ядра из экспериментального каталога "staging".
    • Добавлен API для настройки параметров подсистемы crypto из пространства пользователя (например, можно выбирать используемые алгоритмы шифрования);
    • Расширение возможностей системы мандатного контроля доступа SMACK (включена в Linux 2.6.25+ и основывается на привязке меток к задачам и блокам данных (файлы, IPC, сетевые пакеты и т.д.) на уровне ядра): защита от смены контекста выполнения (Domain transition), увеличение скорости поиска в списках правил, возможность доступа к /smack/access;
    • Во фреймворк TOMOYO, позволяющий схожим с AppArmor способом привязать политику безопасности процесса к файловому пути, добавлена поддержка ограничения доступа к переменным окружения и операциям с сокетами, реализованы более гибкие механизмы для помещения информации в лог аудита (например, можно не помещать в лог часто вызываемые ioctl для определённых файлов, таких как /dev/null), обеспечена возможность смены контекста без вызова execve (например, при запуске cgi-скриптов в Apache).

© OpenNet