Релиз ядра Linux 4.10

После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 4.10.

В новую версию принято около 13 тысяч исправлений от 1647 разработчиков, размер патча — 50 Мб (изменения затронули 11674 файлов, добавлено 743994 строк кода, удалено 249421 строк). Около 47% всех представленных в 4.10 изменений связаны с драйверами устройств, примерно 17% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 15% связано с сетевым стеком, 4% — файловыми системами и 5% c внутренними подсистемами ядра. 13.7% изменений внесено сотрудниками компании Intel, 7.1% изменений подготовлено сотрудниками Red Hat, 4.3% — Samsung, 3.9% — Linaro, 3.7% — SUSE, 3.0% — IBM, 2.5% — AMD, 2.4% — Google, 1.4% — Oracle, 1.4% — ARM.

Основные новшества:

  • Дисковая подсистема, ввод/вывод и файловые системы
    • Интегрированы патчи с улучшенной реализацией механизма фонового сброса данных на накопитель, решающие проблемы с подвисаниями во время фонового копирования данных на медленный USB-накопитель. На системах с большим объёмом ОЗУ и медленными устройствами ввода/вывода переносимые на накопитель данные буферизируются в кэше обратной записи и копирование завершается в фоне. Ранее, операции сброса кэша обратной записи приводили к существенному снижению отзывчивости интерфейса приложений, подобных Firefox, вплоть до невозможности нормальной работы в течение нескольких минут. Например, выполнение «dd if=/dev/zero of=foo bs=1M count=10k» или копирование большого файла на USB-накопитель не давало запустить браузер или любое крупное приложение пока оставался не сброшен кэш обратной записи.

      Предложенный в новом ядре режим «writeback throttling» решает указанную проблему благодаря урезанию интенсивности очистки кэша при наличии в очереди других операций ввода/вывода, что не затрудняет монополизирование очереди ввода/вывода операциями интенсивной записи. Алгоритм урезания отслеживает появление задержек и изменение размера очереди, автоматически корректируя параметры для достижения оптимального результата. В итоге удалось решить проблемы с отзывчивостью за счёт незначительного увеличения времени сброса данных из кэша;

    • В подсистему MD RAID добавлена поддержка флага failfast, который может быть привязан к дискам в процессе создания массивов RAID1 или RAID10, и активирует режим быстрого перевода устройства в режим сбоя. В случае неудачного завершения операции ввода/вывода диск будет сразу выведен из массива, без проведения полноценной обработки ошибки и повторных попыток проведения операции чтения.
    • В MD RAID также реализован кэш обратной записи для RAID5, позволяющий агрегировать операции записи для последующей единовременной записи блока чётности, что позволяет добиться повышения производительности в условиях последовательной записи данных с дальнейшим выполнением операции fsync;
    • В дополнение к появившейся в ядре 4.4 поддержке поллинга ввода/вывода для блочных устройств (I/O polling), в новой версии представлен режим гибридного адаптивного поллинга для блочных устройств. Поллинг позволяет уменьшить нагрузку на систему при использовании высокопроизводительных устройств за счёт периодического опроса состояния вместо генерации прерываний, при этом эффективность поллинга высока только при высокой нагрузке, иначе затраты ресурсов CPU на периодический опрос могут привышать затраты на обработку прерываний. Гибридный режим, вместо выполнения поллинга после завершения операции ввода/вывода, выполняет поллинг через искусственную задержку (например, если операция ввода/вывода длится 8 мкс, то опрос инициируется через 4 мкс), что позволяет подогнать цикл пробуждения ко времени до завершения операции, а не пробудиться после. Данный подход позволяет значительно сократить задержки без повышения нагрузки на CPU. По умолчанию гибридный режим отключен и для активации требует установки параметра /sys/block/{dev}/queue/io_poll_delay;
    • В файловую систему UBIFS, предназначенной для использования на Flash-накопителях, добавлена поддержка шифрования;
    • В файловой системе Ext4 добавлена защита от включения режима журналирования данных для зашифрованных разделов (функции журналирования и шифрования данных не совместимы, но ранее могли быть активированы вместе из-за ошибки в настройках);
    • В XFS реализован более быстрый метод поиска в используемых для кэша буферах, для прямого ввода/вывода (Direct I/O) задействован iomap, объявлены устаревшими опции монтирования barrier/nobarrier;
    • В CIFS добавлена новая опция монтирования «snapshot=время», позволяющая примонтировать прошлую версию внешнего раздела;
    • В F2FS, развиваемой компанией Samsung высокопроизводительной файловой системе для Flash-накопителей, появилась возможность объединения нескольких устройств в рамках одного большого виртуального раздела с одним экземпляром F2FS;
    • Из состава ядра удалена файловая система logfs, которая несколько лет находится без сопровождения и на практике не используется;
    • Добавлена поддержка высокоприоритетных команд ATA, передаваемых устройству вне очереди. По умолчанию данный режим отключен;
  • Виртуализация и безопасность
    • На системах с прошивками EFI ядро получило возможность сохранять некоторые случайные данные в виде EFI-переменных и затем на этапе загрузки использовать их для инициализации генератора псевдослучайных чисел. Данная возможность позволяет получить высокое качество энтропии сразу после начала загрузки.
    • В криптографические компоненты ядра включена новая подсистема «acomp», позволяющая сжимать данные в асинхронном режиме;
    • В подсистему virtio включено новое устройство virtio-crypto для обеспечения шифрования, предоставляющее типовые криптографические операции для виртуализированных гостевых систем;
  • Сетевая подсистема
    • В сетевом стеке обеспечена поддержка маршрутизации сетевых пакетов с учётом UID-идентификатора процесса получателя или отправителя. Возможность перенесена из платформы Android, на которой используется для создания политик маршрутизации, привязанных к отдельным приложениям. Например, администратор теперь может использовать правила вида «ip rule add uidrange 100–200 lookup 123»;
    • Для IPv6 реализована поддержка Segment Routing (SR-IPv6), одной из новых техник маршрутизации от источника (source-routing);
    • В подсистему netfilter добавлена поддержка объектов с сохранением состояния (stateful objects), которые могут быть идентифицированы заданным пользователем уникальным именем и прикреплены к таблицам пакетного фильтра. В настоящее время поддерживается два типа таких объектов — счётчики и квоты;
    • В nftables добавлена поддержка выражения «rt», позволяющего проверить nexthop (IP-адрес шлюза для отправки исходящих пакетов). Например правило «nft add rule filter postrouting ip daddr 192.168.1.0/24 rt nexthop!= 192.168.0.1 drop», заблокирует любой трафик к подсети 192.168.1.0/24, маршрутизируемый не через шлюз 192.168.0.1;
    • Добавлена возможность привязки программы BPF к cgroups для обеспечения фильтрации и учёта сетевого трафика для всех процессов, которые подпадают под эти cgroups. Возможность реализована через новый тип BPF-программ BPF_PROG_TYPE_CGROUP_SKB и две новые команды систменого вызова bpf — BPF_PROG_ATTACH и BPF_PROG_DETACH. Дополнительно реализован тип BPF_PROG_TYPE_CGROUP_SOCK, позволяющий привязать BPF-обработчик к открытию любого сокета AF_INET или AF_INET6 процессом из заданного cgroups;
    • Добавлена возможность привязки программы BPF к инфраструктуре легковесных сетевых туннелей для контроля за передаваемым трафиком или для его модификации на лету;
  • Память и системные сервисы
    • Реализован механизм устройств-посредников («mediated device»), реализованных программно через интерфейс VFIO (Virtual Function I/O, виртуализированные драйверы устройств, работающие в пространстве пользователя). Например, представленный интерфейс можно использовать для создания виртуальных GPU, работа которых обеспечивается за счёт привлечения возможностей имеющегося физического GPU.
    • Добавлен драйвер uleds (Userspace LEDs), позволяющий создавать эмулировать LED-индикаторы или создавать драйвера для LED-индикаторов, работающие в пространстве пользователя. Взаимодействие между ядром и драйвером в пространстве пользователя производится через устройство /dev/uleds;
    • В BPF появилась поддержка новой map-стройктуры с реализацией LRU-списк c вытеснением записей, которые не использовались дольше всех;
    • Расширены средства фильтрации точек трассировки (tracepoint — вариант динамических printf (), выставляемых разработчиками программ для анализа поведения системы, к которым затем можно обращаться из LTTng, perf, SystemTap, ftrace). Если раньше можно было определять только простейшие маски, то теперь средства фильтрации точек трассировки значительно расширены и по своим возможностям напоминают шаблоны для выбора имени файла в командных оболочках;
    • Добавлена поддержка технологии CAT (Cache Allocation Technology), присутствующей в некоторых процессорах Intel Xeon и позволяющей определить политику распределения L2/L3 кэшей в CPU, например задачам реального времени может быть выделен отдельный участок кэша;
    • Реализован новый инструмент «perf c2c» (c2c — «cache to cache»), предназначенный для выявления и анализа проблем с производительностью, вызванных некорректной организацией совместной работы с памятью на системах NUMA. В частности, на многопроцессорных системах NUMA разные модули памяти физически закреплены за разными CPU, при этом доступ к локальной памяти текущего процессора осуществляется быстрее, чем к памяти, закреплённой за другим CPU. В многопоточных приложениях разные потоки могут выполняться на разных CPU, но работать с одной памятью, что в условиях архитектуры NUMA может привести к снижению производительности. При помощи «perf c2c» можно выявить подобные обращения к памяти чужого CPU, оценить задержки и на работу какие процессов и функций они влияют;
    • Подготовлен отчёт 'perf sched timehist' для анализа событий планирования выполнения задач, включая время ожидания выполнения, задержки и фактическое время выполнения задачи. Например, «perf sched record — sleep 1; perf sched timehist»:
                   time    cpu  task name         wait time  sch delay  run time                            [tid/pid]            (msec)     (msec)    (msec)          -------- ------  ----------------  ---------  ---------  --------          1.874569 [0011]  gcc[31949]            0.014      0.000     1.148          1.874591 [0010]  gcc[31951]            0.000      0.000     0.024          1.874603 [0010]  migration/10[59]      3.350      0.004     0.011          1.874604 [0011]                  1.148      0.000     0.035          1.874723 [0005]                  0.016      0.000     1.383          1.874746 [0005]  gcc[31949]            0.153      0.078     0.022    
  • Оборудование
    • Для архитектуры PowerPC реализована поддержка системного вызова kexec_file_load (), позволяющего выполнить проверку по цифровой подписи для нового ядра, перед его запуском с использованием механизма kexec. Для PowerPC также обеспечена возможность сборки ядра с опциями защиты стека;
    • Для архитектуры ARM64 добавлена поддержка системы контрольных проверок uprobes (userspace probes), используемой для анализа поведения выполняемых в пространстве пользователя приложений. Для ARM64 также обеспечена эмуляция режима предотвращения привилегированного доступа («privileged access never»), не позволяющего ядру неявно обращаться к памяти пространства пользователя;
    • В DRM-драйвер (Direct Rendering Manager) Nouveau добавлена поддержка чипсетов GP102 и GP106, реализован режим атомарного переключения видеорежимов и добавлена поддержка MST (Displayport 1.2 Multistream);
    • В драйвере AMDGPU появилась поддержка виртуальных устройств, реализована возможность экспорта информации из видео-BIOS, добавлен новый менеджер видеопамяти, разбивающих операции распределения VRAM на блоки в 4MB. Добавлена поддержка ещё не поступивших в продажу графических карт AMD Polaris12;
    • В драйвере i915 для видеоподсистемы Intel реализована модель устройств GVT-g, позволяющая виртуализировать ресурсы GPU;
    • Добавлен драйвер для Amlogic Meson Graphic Controller, используемого в SoC GXBB/GXL/GXM;
    • Добавлен драйвер для графической подсистемы ZTE VOU;

© OpenNet