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

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

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

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

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

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

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

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

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

Ускоренная обработка ввода-вывода с нулевым копированием и многократным чтением.

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

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

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

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

Прокси-выполнение

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

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

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

Поддержка Rust

В нескольких проектах на основе ядра 6.6 используется Rust.

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

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

Система планирования EEVDF (Earlyest 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)

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

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

Для получения дополнительной информации о MGLRU см. Multi-Gen LRU .

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

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

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

Графика

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

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

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

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

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

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

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

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