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

Линус Торвальдс представил релиз ядра Linux 3.3. Из основных улучшений можно отметить интеграцию изменений, подготовленных в процессе разработки платформы Android, поддержку новой архитектуры TI C6X, включение наработок по борьбе с негативным влиянием промежуточной буферизации пакетов (Bufferbloat), улучшенную реализацию RAID в Btrfs, возможность изменения размера ФС Ext4 на лету, интеграция кода виртуального коммутатора Open vSwitch, более масштабируемая альтернатива драйверу агрегации сетевых линков ("bonding"), новые средства для управления сетевыми приоритетами и ограничения TCP-буфера в привязке к cgroup.

В новую версию принято около 9 тысяч исправлений от более тысячи разработчиков, размер патча - 43 Мб (для сравнения, размер патча ядра 3.2 - 99 Мб, 3.1 - 49 Мб, 3.0 - 44 Мб). Добавлено 10753 тыс. строк кода, удалено - 10698 тыс. строк. Около 40% всех представленных в 3.3 изменений связаны с драйверами устройств, примерно 26% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 12% связано с сетевым стеком, 5% - файловыми системами и 4% c внутренними подсистемами ядра.

Ядро 3.3 также примечательно преодолением очередного рубежа - размер исходного кода ядра превысил отметку в 15 млн строк. При этом 5.6 млн строк приходится на драйверы, 1.8 млн на специфичный для аппаратных архитектур код, 700 тыс на файловые системы, 533 тыс на звуковую подсистему, 493 тыс на сетевой стек. 97.22% кода ядра написано на языке Си, 2.47% на ассемблере, 0.15% на Perl и 0.04% на Shell. Отметка в 10 млн строк была пройдена в конце 2008 года, при выпуске ядра 2.6.27.

Наиболее интересные новшества ядра 3.3:

  • Системные сервисы
    • Интеграция некоторых улучшений и исправлений, подготовленных для ядра, используемого в платформе Android. В частности, перенесена поддержка ashmem (реализация разделяемой памяти, позволяющая маркировать незакреплённые страницы памяти, которые в последующем можно освободить в ситуации нехватки свободной памяти), механизма межпроцессного взаимодействия Binder IPC, ram console (возможность сохранить вывод консоли в специальной области ОЗУ, к которой можно получить доступ после перезагрузки в режиме диагностики), специализированного драйвера для ведения системного лога, реализации LMK (low memory killer, управление принудительным завершением приложений в случае нехватки памяти), вариант драйвера gpio. Некоторые подсистемы ядра Android, например wakelocks, пока остаются неперенесёнными, но в конечном итоге в будущем планируется добиться интеграции всех наработок из ядра Android, что существенно упростит сопровождение кода, позволит сконцентрироваться на одном ядре при разработке драйверов и даст возможность использования последней версии ядра Linux при портировании Android;
    • Поддержка загрузки с использованием EFI (Extensible Firmware Interface). В состав ядра включен набор компонентов, необходимых для загрузки и запуска образа ядра (x86 bzImage) непосредственно прошивкой EFI. Образ ядра bzImage выглядит для прошивки как приложение EFI. При этом, созданный образ bzImage является универсальным и кроме поддержки EFI может использоваться без изменений и с классическими загрузчиками, вызываемыми из BIOS;
    • Интеграция патча, который решает проблемы с повышенным потреблением энергии на ноутбуках, поддерживающих технологию ASPM (Active State Power Management) для карт PCI Express. Проблема проявляется начиная с ядра 2.6.38, в котором была реализована новая система инициализации ASPM, и проявляется в повышении энергопотребления на 10-30%. Предложенный патч имитирует поведение Windows Vista при инициализации системы управления питанием, т.е. не очищает статус ASPM для всех устройств в процессе загрузки, оставляя параметры, выставленные BIOS. В феврале данный патч уже был распространён для прошлых версий ядра в виде обновлений 3.0.20 и 3.2.5;
    • Поддержка технологии DMA-BUF для совместного использования буферов. Используя DMA-BUF различные подсистемы ядра (V4L2, DRI и т.п.) могут совместно использовать буферы между различными драйверами устройств;
  • Дисковая подсистема, ввод/вывод и файловые системы
    • Расширение возможностей файловой системы Btrfs:
      • Полностью переработанная реализация операции балансировки ("balance"), используемая для полной перезаписи данных файловой системы, в чём возникает необходимость, например, при добавлении дополнительного диска, на который следует перераспределить уже имеющиеся в ФС данные. Таким образом операция балансировки позволяет привести ФС в сбалансированное состояние, но обычно перестроение является длительной операцией и занимает много часов. При этом новая реализация кода балансировки поддерживает возможность приостановки процесса и его последующего возобновления, а также возможность вывода подробной информации о статусе выполнения операции. Процесс балансировки теперь основан на использовании профилей данных и метаданных, что позволяет организовать балансировку только пустых групп блоков.
      • Поддержка перестроения данных (restriping) между различными RAID-уровнями (т.е. можно перейти от одного типа RAID на другой). Поддержка новой возможности реализована в ветке "parser" инструментария btrfs-progs;
      • Новая отладочная утилита "integrity check", предназначенная для расширенного тестирования целостности данных разработчиками ФС в процессе выявления ошибок. Суть тестирования состоит в обеспечении дополнительного слежения за соблюдением непротиворечивности записываемых на диск данных, выявляя ситуации при которых возможно нарушение целостности ФС;
    • Новая реализация механизма изменения размера ФС Ext4. В отличие от существующей в настоящее время системы изменения размера, новый механизм полностью реализован в ядре, а потому работает намного быстрее. В тестах производительности он значительно обогнал прошлую реализацию, позволив изменить размер файловой системы, с 20 Гб до 230 Гб за 3.3 секунды, вместо более чем 5 минут, которые понадобились утилите resize2fs. Для выполнения изменения размера в ядро был добавлен новый ioctl EXT4_IOC_RESIZE_FS;
  • Сетевая подсистема
    • Альтернативная реализация системы агрегирования сетевых интерфейсов. Реализовано новое сетевое устройство "teaming", изначально позиционируемое как быстрая, масштабируемая, прозрачная и управляемая из пространства пользователя замена механизму "bonding". Teaming позволяет создавать виртуальные сетевые интерфейсы, объединяющие несколько физических Ethernet-адаптеров, что обычно делается для обеспечения более высокой пропускной способности или для обеспечения отказоустойчивых конфигураций. В настоящее время teaming поддерживает два режима балансировки пакетов между связанными интерфейсами: round-robin и active-backup. Для организации управления новым устройством подготовлена специальная библиотека libteam, а также набор демонстрационных приложений;
    • Контрольная группа net_prio для управления сетевыми приоритетами (Network priority cgroup). Используя cgroup net_prio администратор теперь может динамически управлять приоритетом сетевого трафика, генерируемого различными приложениями. Традиционно, приложение может установить приоритет для своего трафика на этапе создания сокета через опцию SO_PRIORITY, но к сожалению это не всегда возможно. Cgroup позволяет администратору привязать процессы к группе, которая будет иметь иной приоритет для исходящих пакетов, отправляемых через заданный сетевой интерфейс;
    • Поддержка байтового ограничения очередей передачи данных, реализованного в рамках проекта по разработке средств для борьбы с эффектом "Bufferbloat", под которым понимается феномен негативного влияния промежуточной буферизации пакетов на пропускную способность, однородность потока (jitter) и время прохождения пакетов (latency). В состав ядра 3.3 интегрирована поддержка задания ограничения на размер данных пакета, помещаемых в очередь передачи данных для заданного сетевого устройства. В результате появилась возможность обеспечения приемлемой транзитной задержки (latency) для высокоприоритетных пакетов, без очистки аппаратных очередей, когда появляются данные для отправки. Настройка ограничений осуществляется через файлы tx-n в директории byte_queue_limits внутри sysfs;
    • Возможность ограничения размера TCP-буфера в зависимости от cgroup. Механизм cgroup позволяет установить ограничения на ресурсы группы процессов, но эти ограничения ранее затрагивали только память в пространстве пользователя. В некоторых ситуациях, работа процессов приводит к большим расходам памяти на уровне ядра, которую хотелось бы тоже ограничить. Представленная возможность является первым шагом к реализации таких ограничений и позволяет управлять потребление памяти ядра, выделяемой для буферизации TCP-соединений. В частности, теперь можно в привязке с cgroup задать ограничение на размер буферов, используемых кодом TCP;
  • Оборудование и аппаратные архитектуры
    • Поддержка LPAE (large physical address extension) для 32-разрядной архитектуры ARMv7, что позволит организовать адресацию более 4 Гб памяти;
    • Поддержка архитектуры C6X, используемой в одноядерных и многоядерных DSP-процессорах C64x и C66x, выпускаемых компанией Texas Instruments и используемых в широком спектре современных мобильных платформ (DaVinci, OMAP3, OMAP4). Изначально поддержка C6X для Linux обеспечена проектом linux-c6x.org;
    • DRM-модуле для карт Radeon обеспечена поддержка вывода звука через порт HDMI для карт серии Radeon HD 5000 "Evergreen";
    • Улучшение поддержки карт Sandy Bridge и Ivy Bridge в DRM-модуле Intel;
    • В DRM-модуле Nouveau для некоторых карт семейства GeForce добавлена поддержка вывода звука через порт HDMI, для карт NVD0-Fermi добавлена поддержка Page Flipping, улучшена поддержка MXM, добавлен код для определения типа памяти, возможность управления частотой GPU для карт Fermi;
  • Виртуализация и безопасность
    • Интеграция Open vSwitch, программной реализации мультипротокольного сетевого коммутатора. Open vSwitch поддерживает как стандартные управляющие интерфейсы (sFlow, Netflow, RSPAN, CLI), так и позволяет подключать дополнительные программные расширения или использовать для управления протоколы Openflow и OVSDB. В отличии от уже входящей в состав ядра подсистемы сетевых мостов, Open vSwitch изначально создан для решения более комплексных задач, таких как организация сетевого взаимодействия между виртуальными машинами;
    • Набор патчей с решением некоторых проблем с производительностью Xen Dom0. Патчи позволяют организовать информирование гипервизора о текущих режимах энергопотребления (cpufreq). Поэтому, без данных патчей Xen не может инициировать выставление оптимальной частоты работы CPU, необходимой для достижения максимальной производительности;
    • Множество других улучшений и изменений, связанных с поддержкой аппаратных устройств.


Источник:
http://www.opennet.ru/opennews/art.shtml?num=33387

<= Назад
Комментарии
]]> ipv6 ready Kiev LUGLinux4MeНостальгияЛичный сайт skeletora ]]>