Глава 9. Ядро

Восстановление исходных значений SHMMAX и SHMALL

В файле /usr/lib/sysctl.d/00-system.conf раньше устанавливались параметры kernel.shmmax и kernel.shmall, которые имели слишком низкие значения, что нарушало работоспособность некоторых приложений. Эти переопределения были удалены, так как используемые в ядре значения изначально имеют приемлемо высокие значения.

Использование прозрачных HugePages больше не приводит к ошибкам памяти

Раньше синхронизация больших страниц во время выполнения операций чтения и записи производилась неверно, что при определенных обстоятельствах приводило к порче содержимого памяти. Эту проблему удалось решить, добавив предельные значения для памяти, которые будут учитываться при работе с большими страницами.

SCSI LIO

Реализация LIO (Linux IO Target) обновлена до версии, используемой в стабильном ядре Linux-4.0, включающей многочисленные исправления, в том числе для iSER. Кроме того, добавлена поддержка команд XCOPY, WRITE SAME и ATS, а также контроля целостности данных DIF.

makedumpfile поддерживает формат sadump, допускающий адресацию более 16 ТБ физической памяти

makedumpfile теперь поддерживает новый формат sadump, который позволяет адресовать более 16 ТБ пространства. На определенных моделях серверов это позволит выполнять чтение дампов больших размеров.

Удаление и обновление ядра больше не возвращают предупреждение

Раньше сценарий weak-modules, используемый в kmod для управления символьными ссылками на kABI-совместимые модули, удалял каталог /lib/modules/<версия>/weak-updates при удалении ассоциированных с ядром файлов. Так как этот каталог принадлежит пакету kernel, то его удаление приводило к нарушению согласования между файловой системой и ожидаемым состоянием в rpm и в итоге генерировало предупреждение при попытке обновления или удаления ядра.
Этот сценарий был доработан и теперь удаляет все содержимое каталога weak-updates, но оставляет сам каталог, поэтому предупреждение больше появляться не будет.

Новый пакет: libevdev

Libevdev — низкоуровневая библиотека ядра Linux для интерфейса событий, поступающих с устройств ввода, в которую вынесены наиболее распространенные функции для взаимодействия с устройствами evdev, в том числе опрос характеристик устройств и обработка событий. Эта библиотека входит в список обязательных зависимостей для xorg-x11-drv-evdev и xorg-x11-drv-synaptics.

Режимы работы Tuned

Раньше процесс Tuned выполнялся только в фоновом режиме, в котором дополнительная нагрузка на память могла отрицательно повлиять на производительность систем с ограниченными ресурсами. Теперь Tuned может запускаться как обычная программа, что не требует выделения резидентной памяти. По умолчанию эта возможность отключена, так как функциональность Tuned в этом режиме существенно ограничена.

Новый пакет: tuned-profiles-realtime

В Red Hat Enterprise Linux Server и Red Hat Enterprise Linux for Real Time добавлен пакет tuned-profiles-realtime, предоставляющий профиль realtime, используемый утилитой tuned для изоляции процессоров и настройки прерываний. При активации этого профиля tuned получит список изолируемых процессоров из секции переменных и инициирует перенос потоков с указанных процессорных ядер.

blk-mq: многопоточная реализация очередей ввода-вывода

В Red Hat Enterprise Linux 7.2 представлен механизм blk-mq, реализующий стратегию многопоточного доступа к блочным устройствам и тем самым повышающий производительность за счет распределения запросов ввода-вывода между разными программными и аппаратными очередями. Оптимизация достигается благодаря сокращению числа конфликтов блокировок, которые неизбежно возникают, если разные потоки одновременно инициируют запросы к одному устройству. Этот механизм особенно эффективен для современных устройств с NVMe (Non-Volatile Memory Express), обладающих нативной поддержкой многопоточных очередей и изначально отличающихся низкой задержкой при обработке подобных операций. Очевидно, что уровень роста производительности напрямую зависит от оборудования и нагрузки.
По умолчанию функции blk-mq включены в драйверах virtio-blk, mtip32xx, nvme и rbd.
Еще один механизм, scsi-mq, построен на основе blk-mq и обеспечивает доступ драйверов SCSI к инфраструктуре blk-mq. В Red Hat Enterprise Linux 7.2 он предложен в качестве экспериментальной версии. Добавление scsi_mod.use_blk_mq=y в строке параметров ядра включает scsci-mq. По умолчанию эта функция отключена (значение n).
dm_mod.use_blk_mq=y, в свою очередь, разрешает использование инфраструктуры blk-mq многопутевыми устройствами Device Mapper, работающими на уровне запросов. Эта функция по умолчанию отключена (значение n).
dm_mod.use_blk_mq=y для устройств Device Mapper даже является предпочтительным, если основные SCSI-устройства тоже используют blk-mq. Это поможет сократить затраты на блокирование на уровне Device Mapper.
Для просмотра текущего состояния dm_mod.use_blk_mq, выполните cat для файла /sys/block/dm-X/dm/use_blk_mq, заменив dm-X именем многоканального устройства. Этот файл доступен только для чтения и отражает состояние глобальной переменной в /sys/module/dm_mod/parameters/use_blk_mq на момент создания устройства.

Интерпретация ошибок SCSI

Раньше изменения в функции printk() приводили к выводу многострочных сообщений об ошибках SCSI. Чем больше сообщений генерировалось, тем больше это усложняло чтение вывода. Код регистрации ошибок SCSI был доработан с применением опции dev_printk(), которая сопоставляет каждое сообщение с устройством, вызвавшим ошибку.

Подсистема libATA

Это обновление представляет ряд исправлений и изменений подсистемы libATA и ее драйверов.

FCoE и DCB

Компоненты ядра FCoE (Fibre Channel over Ethernet) и DCB (Data Center Bridging) обновлены до последних официальных версий, содержащих ряд улучшений и исправлений по сравнению с предыдущими версиями.

perf 4.1

Новая версия perf 4.1 характеризуется более высокой стабильностью и производительностью по сравнению с предыдущими версиями. Кроме того, добавлена поддержка технологий Intel Cache QoS Monitoring и AMD IBS Ops, процессоров Intel Xeon v4, сжатия модулей ядра, параметризованных событий и возможность определения длины контрольных точек. Дополнительно были добавлены новые параметры команды perf: --system-wide, top -z, top -w, trace --filter-pids и trace --event.

TPM 2.0

Добавлена поддержка устройств TPM 2.0 (Trusted Platform Module) на уровне драйверов.

Вывод turbostat

Раньше программа turbostat определяла наличие поддержки MSR исходя из содержимого файла /dev/cpu/0/msr для cpu0, а не cpu, в результате чего отключение процессора приводило к исключению процессоров из вывода turbostat. Эта ошибка была исправлена, и теперь turbostat ls работает так, как ожидается.

Поддержка Intel Xeon v5

В turbostat добавлена поддержка процессоров Intel Xeon v5.

zswap использует zpool API

Раньше механизм zswap использовал zbud, который осуществлял размещение сжатых страниц в пропорции 2:1. Теперь вместо него используется zpool API, предоставляющий доступ и к zbud, и к zsmalloc. Распределение zsmalloc может потенциально увеличить плотность размещения сжатых страниц и более эффективно использовать память. В этом обновлении zmalloc реализуется в драйверах /mm, поэтому zpool работает так, как запланировано.

Снятие ограничений с длины файла /proc/pid/cmdline

Раньше длина файла /proc/pid/cmdline жестко ограничивалась на уровне ядра и не могла превышать 4096 символов. Это ограничение было снято, что поможет при выводе процессов с длинными аргументами команд.

Поддержка dma_rmb и dma_wmb

В этом обновлении добавлены новые примитивы dma_wmb() и dma_rmb() для синхронизации операций чтения и записи когерентного кэша. Эта функциональность доступна для соответствующих драйверов.