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