На этой странице кратко изложены основные особенности каждого выпуска ядра и приведены ссылки на дополнительную информацию.
Новые возможности ядра 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)
- Улучшения в альтернативных методах исправления ошибок, приводящие к уменьшению размера образа ядра.