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

22 июля 2012 года

Линус Торвальдс представил релиз ядра Linux 3.5. Из основных улучшений можно отметить: поддержка контрольных сумм для обеспечения целостности метаданных в Ext4; система профилирования приложений на пользовательском уровне; механизм создания sandbox-окружений с изоляцией системных вызовов; реализация новых алгоритмов управления очередями пакетов для борьбы с задержками в результате излишней буферизации; возможность сохранения состояния сетевых соединений между перезагрузками; поддержка RFC 5827 (TCP Early Retransmit); реализация по умолчанию активного спящего режима, подобного используемому в платформе Android; учёт статистики о проблемах с вводом/выводом в Btrfs; возможность проброса SCSI поверх Firewire и USB.

В новую версию принято около 11 тысяч исправлений от более чем 1200 разработчиков, размер патча - 42 Мб (изменения затронули 9631 файлов, добавлено 623283 строк кода, удалено 410731 строк). Около 38% всех представленных в 3.5 изменений связаны с драйверами устройств, примерно 26% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 15% связано с сетевым стеком, 5% - файловыми системами и 5% c внутренними подсистемами ядра.

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

  • Дисковая подсистема, ввод/вывод и файловые системы
  • В Ext4 добавлена поддержка контрольных сумм для проверки целостности метаданных. Для обеспечения работы новой функции в поле метаданных добавлен новый блок с контрольной суммой crc32 и соответственно изменена структура хранимых на диске метаданных. Контрольные суммы рассчитываются для суперблока, inode, битовых карт блоков, блоков дерева экстентов, htree-узлов, MMP-блоков, директорий и блоков с расширенными атрибутами. Также поддержка контрольных сумм добавлена в инфраструктуру журналирования jbd2 (Journaling block device), что позволит проверять целостность элементов журнала Ext4, а также отдельных коммитов и блоков данных, хранимых в журнале.

Поддержку контрольных сумм можно активировать для существующих разделов через команду "tune2fs -O metadata_csum", а для новых через "mkfs -O metadata_csum", после активации подобной поддержки системы с более старыми ядрами Linux смогут монтировать данные разделы только в режиме чтения. С точки зрения производительности, добавление контрольных сумм не привносит заметной задержки для типичных десктоп и серверных систем. Узким местом является только условия создания и удаления большого числа файлов или интенсивной модификации дерева экстентов, при таком характере нагрузки наблюдается замедление до 20%;

  • Поддержка работы SCSI поверх FireWire или USB (поддерживается транспорт BOT (Bulk Only Transport) и UAS (USB Attached SCSI)), что, например, позволяет экспортировать SCSI-устройства на другой хост с использованием FireWire и USB;
  • Учёт статистики о проблемах с вводом/выводом в Btrfs. Для каждого диска отслеживаются такие данные как ошибки ввода/вывода, несовпадения контрольных сумм, результаты проверки целостности блоков с метаданными. Накопленную статистику можно посмотреть командой "btrfs device stats", поддержка которой включена в свежие версии пакета btrfs-progs. Из других улучшений Btrfs отмечается интеграция патчей для более оптимальной работы с памятью и увеличения отзывчивости в ситуации большой нагрузки на подсистему ввода/вывода;
  • В Tmpfs и подсистему FUSE добавлена поддержка системного вызова fallocate(), обеспечивающего возможность предварительного выделения места под создаваемые приложением файлы, что позволяет гарантировать, что для заданного файла в ФС при любых обстоятельствах хватит места, даже если в процессе создания файла дисковый раздел будет переполнен другими процессами. Использование fallocate позволяет значительно ускорить создание больших файлов, таких как образы виртуальных машин;
  • Сетевая подсистема
  • Поддержка интерфейса для восстановления TCP-соединений, позволяющего зафиксировать контрольную точку с которой можно возобновить остановленное соединение. Наиболее интересным практическим применением указанной функции является возможность предотвратить разрыв соединений в результате перезагрузки системы или перемещения серверного процесса на другой хост. Например, в системах виртуализации упрощается решение таких задач как миграция работающих процессов с одного сервера на другой, незаметно для приложения на другой стороне соединения;
  • Поддержка RFC 5827 (ранняя повторная отправка пакетов) в сетевом стеке, позволяющая увеличить скорость восстановления потока после потери пакетов;
  • Интеграция алгоритма управления очередями ожидающих отправки пакетов CoDel (Сontrolled Delay - управляемая задержка), разработанного в рамках инициативы по борьбе с негативным влиянием промежуточной буферизации пакетов (Bufferbloat) сетевым оборудованием;
  • Виртуализация и безопасность

Интеграция механизма seccomp filter, принцип работы которого сводится к ограничению доступа к системным вызовам. Важной особенностью seccomp filter является то, что логика выставляемых ограничений задаётся на уровне защищаемого приложения, а не через задание внешних ограничений, как в случае AppArmor или SELinux. В код программы добавляется структура с перечнем допустимых системных вызовов (например, ALLOW_SYSCALL) и реакции в случае несовпадения (например, KILL_PROCESS). Доступ к системным вызовам определяется в виде правил, оформленных в BPF-представлении (Berkeley Packet Filter), которое получило распространение в системах фильтрации сетевых пакетов.

Система seccomp filter позволяет реализовывать достаточно сложные правила доступа, учитывающие передаваемые и возвращаемые аргументы. Программа сама определяет какие системные вызовы ей необходимы и какие параметры допустимы, все остальные системные вызовы блокируются, что позволяет ограничить возможности атакующего в случае эксплуатации уязвимости в защищённом при помощи seccomp приложении. Возможность задания фильтров аргументов позволяет также защититься от большинства атак, эксплуатирующих уязвимости в системных вызовах. Например, выявленные за последние годы критические уязвимости в glibc и ядре Linux, такие как AF_CAN (Архивная копия от 17 февраля 2021 на Wayback Machine), sock_sendpage и sys_tee(недоступная ссылка), успешно блокируются при надлежащем использовании seccomp.

В настоящее время поддержка seccomp filter реализована в таких популярных серверных приложениях, как OpenSSH и vsftpd. Средства для изоляции запускаемых сервисов добавлены в системный менеджер systemd, что позволяет создавать sandbox-окружение для произвольных сервисов, не модифицированных для поддержки seccomp filter. При использовании systemd для помещения процесса в sandbox достаточно в секции "[Service]" указать опцию "SystemCallFilter", в которой перечислить список допустимых системных вызовов. Патчи с поддержкой seccomp filter уже используются в промышленной эксплуатации, например, входят в состав пакета с ядром Linux для дистрибутива Ubuntu 12.04;

  • В модуль Yama, разработанный компанией Canonical и используемый в Ubuntu для блокирования некоторых типов атак, добавлены два дополнительных режима для контроля доступа к функциональности PTRACE_ATTACH;
  • Память и системные сервисы
  • Интеграция чувствительной к активности процессов реализации спящего режима, представляющего собой альтернативу используемой в платформе Android системы блокировок "wakelocks". Добавленный дополнительный механизм блокировок для системы управления питанием позволяет предотвратить переход в спящий режим в ситуациях, когда это недопустимо (например, активен разговор по телефону) и обеспечить временное просыпание в условиях жесткой политики нахождения в спящем режиме, свойственной для мобильных систем. Реализованный подход рассматривает систему как находящуюся постоянно в спящем режиме, в котором энергия тратится только на синхронизацию памяти и поддержание работы некоторых устройств. Активация происходит только в ситуациях, когда возникает необходимость выполнения определённой работы, после завершения которой система возвращается в спящий режим;
  • Переработан код планировщика задач для архитектуры NUMA;
  • Интеграция кода uprobes (userspace probes), аналога ранее доступной системы kprobes, нацеленного на анализ поведения выполняемых в пространстве пользователя приложений. Uprobes можно использовать для определения узких мест в производительности, накапливать отладочные данные и информацию о времени выполнения разных частей приложения в полностью прозрачном режиме, никаким образом не влияя на работу отслеживаемого процесса. Запустить и остановить сбор данных можно в любой момент, без перезапуска или модификации программы. Изначально реализация uprobes была подготовлена в рамках проекта SystemTap и уже много лет доступна в стандартной поставке Fedora и RHEL.

Для управления uprobes используется стандартная утилита perf, например, выполнение "perf probe -x /lib64/libc.so.6 malloc" приведёт к созданию привязанного к malloc проверочного события, а "perf record -e probe_libc:malloc -agR sleep 1" к ежесекундному накоплению статистики использования вызова malloc в libc, которую можно посмотреть в виде отчета "perf report". Можно создавать несколько проверок, смешивать из с трассировками ядра и вызовами kprobes, просматривать список доступных для привязки функций ("perf probe -F -x /lib64/libc.so.6" или "perf probe -F -x /bin/zsh");

  • Реализация системного вызова kcmp() для определения различий между двумя порождёнными одним родителем процессами (сравнение файловых дескрипторов, обработчиков прерываний, адресного пространства и других характеристик);
  • Переработка организации ведения логов на уровне ядра. Добавлена поддержка ведения структурированных логов ядра через /dev/kmsg, с поддержкой одновременного чтения несколькими приложениями и возможностью перемещения по логу и повторного чтения элементов в рамках доступного буфера (Например, открыв /dev/kmsg процесс начнёт чтение не с текущего момента, а с начала данных уместившихся в буфере). Переработка вызова printk для отправки данных в виде отдельных буферизированных записей, вместо байтового потока;
  • Поддержка таблиц Apple NLS (Native Language Support), необходимых для корректной поддержки файловой системы HFS;
  • Реализация режима Frontswap, при котором раздел подкачки может быть размещён в напрямую недоступной памяти, которую невозможно напрямую адресовать и которая не предоставляет оперативной информации о наличии свободного места;
  • Добавлена новая опциональная система распределения памяти Contiguous Memory Allocator (CMA), которая оптимизирована на выделение больших непрерывных областей памяти с использованием техники перемещения страниц памяти. Подобное поведение востребовано некоторыми драйверами и подсистемой pagecache;
  • Оборудование и аппаратные архитектуры
  • Проведена чистка устаревших драйверов, в том числе удалены: драйвер ixp2000 Ethernet, драйверы для карт MCA, sun4c SPARC CPU, netfilter-модуль ip_queue (его заменил nfnetlink_queue), все компоненты поддержки сетей Token ring, поддержка протокола Econet, поддержка процессоров ARMv3 и IXP2xxx (XScale), поддержка плат ST-Ericsson U5500, драйвер последовательных портов Motorola 68360;
  • В системе DMA-BUF, предназначенной для организации совместного использования буферов драйверами и различными подсистемами ядра, расширена поддержка интерфейса PRIME, который позволит реализовать возможность бесшовного переключения вывода между разными видеокартами;
  • В DRM-драйвере Radeon расширена поддержка новых карт на базе Evergreen GPU и обеспечен вывод звука через HDMI. Существенно увеличена производительность драйверов для GPU семейства Evergreen и Northern Islands (HD5000 и HD6000);
  • Обновлен DRM-драйвер для карт Intel, добавление предварительной поддержки процессоров на базе микроархитектуры Haswell и SoC Valley View с новыми процессорами Atom;
  • Обеспечена поддержка плат Blackfin BF609, Renesas Armadillo-800 EVA и KZM-A9-GT;
  • Поддержка сетевых устройств: WIZnet W5100, W5300, Marvell Avastar 88W8797, Emulex One Connect InfiniBand-over-Ethernet, GCT Semiconductor GDM72xx WiMAX;
  • Поддержка USB host-контроллеров: Marvell PXA USB OTG, Broadcom BCMA и SSB, USB-трансивера NXP ISP1301, контроллера периферии NXP LPC32XX;
  • Интегрированы драйверы для звуковых карт Creative Sound Core3D и Xonar DGX;
  • Добавлены базовые KMS-драйверы для графических чипов ASpeed Technologies 2000 и Matrox G200, а также для карт Cirrus, эмулируемых в Qemu;

Источники

править
 
 
Creative Commons
Эта статья содержит материалы из статьи «Релиз ядра Linux 3.5. Обзор новшеств», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
 
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.