커널 출시 노트

이 페이지에서는 각 커널 출시의 주요 기능을 요약하고 추가 정보 링크를 제공합니다.

커널 6.12의 새로운 기능

이 섹션에서는 커널 6.12의 새로운 기능을 설명합니다.

메모리 할당 프로파일링

메모리 사용을 이해하는 데는 할당이 이루어지는 위치를 아는 것이 중요합니다. 커널 6.12에는 메모리 할당 프로파일링 (구성의 CONFIG_MEM_ALLOC_PROFILING)이라는 새로운 메모리 할당 기여 분석 시스템이 포함되어 있습니다. 메모리 할당 프로파일링을 사용하면 할당 문제가 신속하게 식별될 수 있도록 각 할당에 고유한 소스 라인이 할당됩니다. 또한 메모리 할당 프로파일링은 다음과 같은 이점이 있습니다.

  • 엔지니어링 단계에서 사용되지만 표준 GKI 이미지에서 사용할 수 있습니다.

  • sysctl.vm.mem_profiling 부팅 매개변수를 사용하여 사용 설정할 수 있습니다.

  • 커널 내 모듈과 로드된 모듈 모두에서 작동합니다.

제로 카피 및 멀티샷 읽기를 사용한 더 빠른 io_uring

커널 6.12에서 statsdlogd 모듈은 sendfile 제로 복사를 사용하여 성능을 개선합니다.

또한 이 커널 버전은 단일 읽기 작업으로 여러 데이터를 동시에 검색할 수 있는 멀티샷 읽기를 구현하여 성능을 개선합니다.

버클리 패킷 필터 (BPF) 기능 및 지원 개선

커널 6.12에서는 BPF 도구 모음이 CO-RE 및 여러 최신 기능을 지원하도록 이동되었습니다. 또한 새 BPF 로더를 사용하면 AOSP의 일부인 프로그램에 최신 BPF를 사용할 수 있습니다.

프록시 실행

프록시 실행을 사용하면 스케줄러가 우선순위가 높은 프로세스에서 CPU 주기를 빌려 우선순위가 낮은 프로세스에서 보유한 잠금을 복구할 수 있습니다. 이 기능은 우선순위 역전 문제를 완화합니다.

커널 6.6의 새로운 기능

이 섹션에서는 커널 6.6의 새로운 기능을 설명합니다.

Rust 지원

여러 커널 6.6 프로젝트에서 Rust를 사용합니다.

가상 메모리 영역 (VMA)별 잠금

커널 6.6은 가상 메모리 영역별 잠금을 사용하여 mmap_sem (이전 명칭: mmap_lock)의 경합 문제를 해결합니다. 따라서 스레드 수를 많이 사용하는 앱의 경우 실행 시간이 최대 20% 단축될 수 있습니다.

Earliest Eligible Virtual Deadline First (EEVDF) 스케줄러가 CFS를 대체함

EEVDF는 완전 공정 스케줄러 (CFS)를 대체하여 짧은 작업과 장기 실행 작업 간의 CPU 액세스 균형을 개선합니다.

읽기 사본 업데이트 (RCU) 콜백의 전력 소비 감소

RCU_LAZY 옵션은 타이머 기반 RCU 콜백 일괄 처리 메서드를 사용하여 전원을 절약합니다. 부하가 가볍거나 유휴 상태인 시스템의 경우 이 옵션을 사용하면 소비 전력을 5~10% 줄일 수 있습니다.

향상된 ZRAM 메모리 압축

새로운 CONFIG_ZRAM_MULTI_COMP 빌드 설정을 사용하면 ZRAM이 세 가지 대체 알고리즘 중 하나를 사용하여 페이지를 다시 압축할 수 있습니다. 이러한 재압축은 압축된 메모리를 더욱 축소하여 활성 작업에 더 많은 여유 공간을 제공합니다.

커널 6.1의 새로운 기능

이 섹션에서는 커널 6.1의 새로운 기능을 설명합니다.

커널 제어 흐름 무결성 (KCFI)으로 보안 강화

KCFI는 제어 흐름 무결성 (CFI)을 대체하므로 런타임 비용이 줄고 빌드 시간 비용이 들지 않습니다. 런타임 비용이 줄어들면 CFI에 비해 더 많은 위치(특히 트레이스 포인트 및 공급업체 후크)에서 KCFI를 사용 설정할 수 있습니다.

커널 6.1에서는 KCFI 외에도 엄격한 memcpy 경계 검사, 직선 추측 공격 완화와 같은 여러 보안 기능을 도입합니다.

KCFI에 관한 자세한 내용은 커널 제어 흐름 무결성을 참고하세요.

다세대 LRU (MGLRU)

실제로 사용 중인 페이지를 더 잘 식별하여 메모리 관리를 개선하기 위해 MGLRU가 커널 6.1에 추가되었습니다. 이 개선사항을 통해 시스템에 메모리 부족이 발생할 때 앱을 중지할 필요가 줄어듭니다. 또한 전반적인 기기 응답성이 개선되어 사용자 환경도 개선됩니다.

MGLRU 구현에는 경우에 따라 레드-블랙 트리 (rbtree)를 대체하는 데 사용할 수 있는 새로운 RCU-safe maple 트리 지원도 포함되어 있습니다. RCU-safe maple 트리를 사용하면 풋프린트가 작고 잠금이 없으므로 성능이 향상됩니다.

MGLRU에 관한 자세한 내용은 다중 세대 LRU를 참고하세요.

스케줄링

스케줄러를 유지하고 업데이트하는 것은 커널을 개선하기 위한 작업의 핵심적인 측면입니다. 6.1의 커널 업데이트에는 다음이 포함됩니다.

  • L2 캐시를 공유하는 코어로 이전하여 성능을 높이는 클러스터 인식 예약을 추가했습니다.
  • 불필요한 에너지 마진 휴리스틱을 삭제했습니다. 이 업데이트는 일부 이전을 제한하여 에너지 사용량을 최대 5%까지 개선합니다.
  • 부하 분산을 개선하여 절전 모드 해제 지연 시간을 줄였습니다.
  • RCU 신속한 유예 기간을 실시간 kthread로 이동했습니다. 이 업데이트로 RCU 관련 지연 시간 외부값이 크게 줄었습니다.

그래픽

커널 6.1에는 Vulcan Video API의 요구사항에 맞게 동기화 파일을 내보내고 가져오기 위한 dma-buf의 새로운 메서드가 포함되어 있습니다.

futex_waitv() 메서드는 여러 futexe를 동시에 대기하여 다른 플랫폼에서 게임을 포팅하는 과정을 간소화합니다.

디버그 도구

디버그 빌드에서 Kernel Concurrency SANitizer (KCSAN)를 사용하여 커널 코드의 경합을 식별합니다.

또한 Kernel Memory SANitizer (KMSAN)를 사용하여 커널에서 초기화되지 않은 값을 찾습니다.

ARM64 지원 개선

6.1 커널은 다음을 포함하여 ARM64 아키텍처에 여러 가지 개선사항을 제공합니다.

  • ARMv8.6 타이머 확장 프로그램 지원
  • QARMA3 포인터 인증 알고리즘 지원
  • ARMv9 확장형 행렬 확장 프로그램 (SME)에 대한 초기 지원
  • 대체 기능 패치가 개선되어 커널 이미지 크기가 작아짐