Примечания к выпуску ядра

На этой странице обобщены основные функции каждой версии ядра и приведены ссылки на дополнительную информацию.

Новые возможности ядра 6.12

В этом разделе описываются новые функции ядра 6.12.

Профилирование распределения памяти

Ключ к пониманию использования памяти — это знание того, где производится распределение. Ядро 6.12 включает новую систему атрибуции распределения памяти, называемую профилированием распределения памяти ( CONFIG_MEM_ALLOC_PROFILING в конфигурации). При профилировании распределения памяти каждое распределение приписывается уникальной исходной строке, что позволяет быстро выявлять проблемы с распределением. Кроме того, профилирование распределения памяти:

  • Используется на этапе проектирования, но доступен в стандартном образе GKI.

  • Можно включить с помощью параметра загрузки sysctl.vm.mem_profiling .

  • Работает как для модулей ядра, так и для загруженных модулей.

Более быстрый io_uring с нулевым копированием и многократным чтением

В ядре 6.12 модули statsd и logd используют нулевое копирование sendfile, что повышает их производительность.

Кроме того, в этой версии ядра реализовано многопоточное чтение, при котором одна операция чтения может извлекать несколько фрагментов данных одновременно, что повышает производительность.

Улучшенные возможности и поддержка Berkeley Packet Filter (BPF)

В ядре 6.12 инструментальная цепочка BPF была перемещена для поддержки CO-RE и нескольких современных функций. Кроме того, новый загрузчик BPF позволяет использовать современный BPF для программ, которые являются частью AOSP.

Исполнение доверенности

Выполнение прокси позволяет планировщику заимствовать циклы ЦП из высокоприоритетных процессов для восстановления блокировок, удерживаемых низкоприоритетными процессами. Эта функция смягчает проблемы инверсии приоритетов.

Новые возможности ядра 6.6

В этом разделе описываются новые функции ядра 6.6.

Поддержка ржавчины

Несколько проектов ядра 6.6 используют Rust.

Блокировки на уровне виртуальной области памяти (VMA)

Ядро 6.6 использует блокировки областей виртуальной памяти для решения проблем с конкуренцией с mmap_sem (ранее известным как mmap_lock ). Таким образом, приложения, использующие большое количество потоков, могут заметить сокращение времени запуска на целых 20%.

Планировщик EEVDF (Earliest Eligible Virtual Deadline First) заменяет CFS

EEVDF заменяет Completely Fair Scheduler (CFS) для лучшего балансирования доступа к процессору между краткосрочными и долгосрочными задачами.

Снижение энергопотребления за счет обратных вызовов для чтения и обновления копии (RCU)

Опция RCU_LAZY использует метод пакетирования обратного вызова RCU на основе таймера для экономии энергии. Для слабо загруженной или простаивающей системы эта опция может снизить потребляемую мощность на 5–10%.

Лучшее сжатие памяти ZRAM

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

Новые возможности ядра 6.1

В этом разделе описываются новые функции ядра 6.1.

Более высокая безопасность благодаря целостности потока управления ядра (KCFI)

KCFI заменяет целостность потока управления (CFI), что приводит к снижению стоимости выполнения и отсутствию стоимости времени сборки. Снижение стоимости выполнения позволяет включить KCFI в большем количестве мест по сравнению с CFI, особенно в точках трассировки и хуках поставщиков.

Помимо KCFI, в ядре 6.1 реализовано множество функций безопасности, таких как строгая проверка границ memcpy и снижение вероятности атак методом прямой спекуляции.

Дополнительную информацию о KCFI см. в разделе Целостность потока управления ядром .

Многопоколенческий LRU (MGLRU)

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

Реализация MGLRU также включает поддержку нового RCU-безопасного maple tree, которое в некоторых случаях может использоваться для замены красно-черного дерева (rbtree). При использовании RCU-безопасное maple tree повышает производительность из-за его меньшего размера и отсутствия блокировок.

Дополнительную информацию о MGLRU см. в разделе Multi-Gen LRU .

Планирование

Поддержание и обновление планировщика является ключевым аспектом работы по улучшению ядра. Обновления ядра в 6.1 включают:

  • Добавлено планирование с учетом кластера, которое повышает производительность за счет перехода на ядра, которые совместно используют кэш L2.
  • Удален ненужный эвристический запас энергии. Ограничивая некоторые миграции, это обновление улучшает использование энергии до 5%.
  • Улучшенная балансировка нагрузки для сокращения задержки пробуждения.
  • Перемещены ускоренные льготные периоды RCU в поток реального времени kthread. Это обновление значительно сократило выбросы задержек, связанные с RCU.

Графика

Ядро 6.1 содержит новые методы dma-buf для экспорта и импорта файлов синхронизации, соответствующие требованиям Vulcan Video API.

Новый метод futex_waitv() упрощает портирование игр с других платформ за счет одновременного ожидания нескольких фьютексов.

Инструменты отладки

Используйте Kernel Concurrency SANitizer (KCSAN) в отладочных сборках для выявления гонок в коде ядра.

Кроме того, используйте Kernel Memory SANitizer (KMSAN) для поиска неинициализированных значений в ядре.

Улучшения поддержки ARM64

Ядро 6.1 вносит множество улучшений в архитектуру ARM64, в том числе:

  • Поддержка расширений таймера ARMv8.6
  • Поддержка алгоритма аутентификации указателя QARMA3
  • Первоначальная поддержка ARMv9 Scalable Matrix Extension (SME)
  • Улучшения в альтернативных функциях исправления, приводящие к уменьшению размера образа ядра