На этой странице обобщены основные функции каждого выпуска ядра и приведены ссылки на дополнительную информацию.
Новые возможности ядра 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.
Поддержка Rust
Несколько проектов ядра 6.6 используют Rust.
Блокировки на уровне виртуальной памяти (VMA)
В ядре 6.6 используются блокировки отдельных областей виртуальной памяти для решения проблем с конкуренцией с mmap_sem
(ранее известной как mmap_lock
). Таким образом, время запуска приложений с большим количеством потоков может сократиться на 20%.
Планировщик EEVDF (самый ранний подходящий виртуальный крайний срок) заменяет 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 перенесены в поток реального времени 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)
- Улучшения в альтернативных функциях исправления, приводящие к уменьшению размера образа ядра