Релиз ядра Linux 4.5

14 марта 2016 года

После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 4.5. Среди наиболее заметных изменений: системный вызов copy_file_range для ускорения копирования данных между файлами, поддержка технологии управления питанием Powerplay для GPU Radeon, улучшение распределения свободного пространства в Btrfs, реализация квот проектов в ext4, поддержка сборки с включением детектора неопределённого поведения, поддержка прямой коррекции ошибок в dm-verity, стабилизация новой унифицированной иерархии cgroup, подключение BPF-балансировщиков для UDP-сокетов в режиме SO_REUSEPORT, увеличение масштабируемости epoll для многопоточных приложений.

В новую версию принято около 13 тысяч исправлений от примерно 1500 разработчиков, размер патча - 70 Мб (изменения затронули 11589 файлов, добавлено 1146727 строк кода, удалено 854589 строк). Около 45% всех представленных в 4.5 изменений связаны с драйверами устройств, примерно 17% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 14% связано с сетевым стеком, 4% - файловыми системами и 3% c внутренними подсистемами ядра.

Из наиболее интересных новшеств ядра Linux 4.5 можно отметить:

  • Дисковая подсистема, ввод/вывод и файловые системы
  • Новый системный вызов copy_file_range, позволяющий ускорить выполнение операций копирования данных из одного файла в другой файл с выполнением операции только на стороне ядра, без предварительного чтения данных в память процесса в пространстве пользователя, что избавляет от частого переключения контекста между ядром и пространством пользователя. Тем не менее, в обычных условиях использование copy_file_range лишь немного быстрее обычной команды "cp", так как основное время уходит на ввод/вывод с накопителя.

Совсем иная ситуация с применением copy_file_range для файлов на разделах NFS. Так как копирование в NFS приводит к необходимости перемещения данных по сети с сервера к клиенту и возвращения от клиента на сервер, исключение из этой цепочки клиента позволяет существенно ускорить процесс. Поддержка copy_file_range уже доступна для NFSv4.2. В будущих выпусках поддержка ускорения копирования будет реализована для Btrfs и специализированных устройств хранения, также будут преодолены текущие ограничение, такие как действия только в рамках одной точки монтирования и одного суперблока, а также невозможность ускорения копирования данных внутри одного файла.

  • В Btrfs решены проблемы с масштабируемостью обработки свободного дискового пространства. Вместо использования кэша свободных блоков, становящегося узким местом на больших и нагруженных файловых системах (более 30 Тб), реализован новый экспериментальный метод представления кэша свободного дискового пространства, который лишен ограничений с масштабируемостью и не требует обновления после каждого изменения в ФС. Для включения новой реализации при монтировании следует указать опцию "-o space_cache=v2", после первого монтирования с которой файловая система будет переведена на новую реализацию кэша (старые ядра смогут только читать данные, для возвращения для них возможности записи следует вернуть старый вариант кэша через монтирование с опцией "-o clear_cache,space_cache=v1");
  • В модуль dm-verity (device-mapper verity), предназначенный для проверки целостности хранимых блоков данных по криптографическим хэшам (например, используется для верификации загрузки в платформе Android),

добавлена поддержка кодов прямой коррекции ошибок (FEC, Forwarded Error Correction, помехоустойчивое кодирование), которые позволяют не только выявить повреждения, но и восстановить исходное состояние блоков данных;

  • В файловой системе ext4 реализована поддержка квот проектов ("project quota"). Файлы могут быть привязаны к отдельным "проектам" для которых применяются иные квоты, отличающиеся от общих системных квот.
  • В XFS добавлена проверка корректности всех записей в логе по контрольным суммам, выполняемая в процессе восстановления информации по логу. Реализация ioctl-команд XFS XFS_IOC_FSSETXATTR и XFS_IOC_FSGETXATTR, позволяющих запрашивать и устанавливать различные дополнительные атрибуты файлов (только синхронная запись, запрет изменения, только дополнение, запрет создание символических ссылок на файл, не включение в бэкапы, запрет дефрагментации и т.п.), перемещена на уровень VFS и унифицирована для использования в других ФС (например, уже существует реализация для ext4).
  • В файловой системе Ceph появилась поддержка асинхронного ввода/вывода и формата размещения файлов CEPH_FEATURE_FS_FILE_LAYOUT_V2 ;
  • В подсистему FUSE добавлена поддержка опций SEEK_HOLE и SEEK_DATA системного вызова lseek() для выявления пустых областей и блоков данных внутри файла;
  • В подсистему libnvdimm (работа с NVM-памятью) добавлен слой для управления сбойными блоками, адаптированный из кода MD RAID;
  • В VFAT добавлена поддержка управления резервированием пустых областей через вызов fallocate();
  • В F2FS, развиваемую компанией Samsung высокопроизводительную файловую систему для Flash-накопителей, добавлен ioctl F2FS_IOC_DEFRAGMENT для выборочной дефрагментации файлов и опция монтирования data_flush для сброса буферов перед фиксацией изменений;
  • В MD RAID5 добавлена возможность горячего подключения и отключения дисков для хранения журнала;
  • Сетевая подсистема
  • Произведена оптимизация производительности работы режима SO_REUSEPORT для UDP-сокетов. Опция SO_REUSEPORT позволяет сразу нескольким слушающим сокетам подключиться к одному порту для приёма соединений с распределением поступающих запросов одновременно по всем подключенным через SO_REUSEPORT сокетам, что упрощает создание многопоточных серверных приложений. В новой версии ядра для UDP добавлены две дополнительные опции: SO_ATTACH_REUSEPORT_CBPF и SO_ATTACH_REUSEPORT_EBPF, позволяющие определить BPF-программу (классическую или расширенную), выполняющую функции диспетчера, принимающего решения какому сокету из группы REUSEPORT передать обработку пакета. Кроме того, увеличена скорость выбора сокета SO_REUSEPORT для входящих пакетов. При выполнении теста на сервере с 48 ядрами CPU с 10 гигабитным линком, скорость распределения между 10 сокетами возросла на 18%, 20 - на 14% и 40 - на 13%;
  • В cgroup memory controller добавлена возможность учёта в едином пуле потребления памяти структурами данных, связанными с работой сокетов, анонимной памятью и кэше страниц памяти, позволяя учитывать состояние потребителей памяти в процессе распределения и лимитирования памяти в группе. Например, при нехватке памяти, может быть приостановлено выделение памяти на сетевые структуры. При желании можно вывести связанною с сокетами память из под действия общей системы лимитирования памяти (cgroup.memory=nosocket).
  • Добавлена поддержка опции SOCK_DESTROY, позволяющей системному администратору принудительно закрыть TCP-соединение через интерфейс "netlink socket diag", инициируя операцию TCP ABORT с отправкой другой стороне RST-уведомления о завершении соединения;
  • В nftables добавлена поддержка перенаправления и дублирования пакетов netdev, например, для быстрого проброса пакетов с одного интерфейса на другой или между входным/выходным буфером одного интерфейса. Также добавлена поддержка изменения данных в пакете (mangling packet payload) с автоматической корректировкой контрольной суммы и возможность учёта в правилах счётчика байт или пакетов;
  • Добавлен модуль "clsact" с реализацией обобщённого метода построения очереди сетевых пакетов;
  • Память и системные сервисы
  • Обеспечена возможность сборки ядра в GCC 4.9+ с включённой опцией "-fsanitize=undefined", активирующей отладочный режим UBSAN (Undefined Behavior Sanitizer) с реализацией детектора неопределенного поведения, добавляющего в скомпилированный код дополнительные проверки для выявления во время выполнения программы ситуаций, когда поведение программы становится неопределенным (зависит от реализации компилятора) из-за ошибки программиста. Например, к неопределённому поведению относится использование нестатических переменных до их инициализации, деление целых чисел на ноль, переполнения целочисленных знаковых типов, разыменование указателей NULL, проблемы с выравниванием указателей и т.п.
  • В системный вызов madvise, предоставляющий средства для оптимизации управления памятью процесса, добавлена поддержка флага MADV_FREE, который дополняет уже имеющийся флаг MADV_DONTNEED, через который ядру можно загодя сообщить о готовящемся освобождении блока памяти, т.е. о том, что этот блок уже не нужен и может использоваться ядром. В случае использования MADV_DONTNEED последующее обращении к блоку приведёт к генерации "page fault", выделению и обнулению страниц памяти или к повторному маппингу файла в память. MADV_FREE отличается тем, что только помечает блок доступным для освобождения, но не освобождает сразу, что позволяет вернуть его без генерации "page fault", если обращение произошло до его фактического использования ядром;
  • В вызов epoll добавлена поддержка флага EPOLLEXCLUSIVE, решающего проблемы с масштабируемостью в многопоточных приложениях. В обычных условиях при создании нескольких файловых дескрипторов epoll (epfds) для совместно обрабатываемых событий генерация события приведёт к информированию всех epfds. Флаг EPOLLEXCLUSIVE позволят привязать событие к отдельному файловому дескриптору и информировать только связанный с ним поток, что значительно повышает эффективность в программах с большим числом epfds. Например, перевод платформы Enduro/X на EPOLLEXCLUSIVE уменьшил время прохождения тестового задания с 860 до 24 секунд;
  • Интерфейс

Источники править

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

Комментарии

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