[Android System] Kernel Log Buffer Size

subinJeong·2024년 6월 30일

Android System

목록 보기
2/2

Android System의 Kernel Buffer Size를 확인 및 변경하는 방법을 기술한다.

1. CONFIG_LOG_BUF_SHIFT

Kernel log의 buffer size는 CONFIG_LOG_BUF_SHIFT 에 따라 변경된다.
buffer의 크기는 설정된 값의 2의 제곱수로 설정된다.
예를 들면, 아래의 예시에서는 값이 17로 되어있으므로 2^17 = 128KB로 설정이 되어있는 것으로 해석할 수 있다.

설정 값은 아래의 Command를 입력하여 확인할 수 있다.

1.1 adb shell Command

커널을 빌드하는 과정에서 /proc/config.gz 을 통해 커널 configuration의 상태를 쉽게 확인할 수 있다.

$ adb shell
$ zcat /proc/config.gz | grep CONFIG_LOG_BUF_SHIFT  
CONFIG_LOG_BUF_SHIFT=17

config.gz 파일을 생성하는것도 Config를 설정하여 생성 유무를 설정할 수 있으며, 아래에 Config가 y로 설정되어있는 것을 확인할 수있다. (필수적으로 y로 설정하는것이 좋을듯!)

1.2 out dir

out/target/product/[platformName]/.config file에서 Android build시, 설정된 Config들을 확인할 수 있다.

CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_IKHEADERS=y
CONFIG_LOG_BUF_SHIFT=17 	<<<
CONFIG_LOG_CPU_MAX_BUF_SHIFT=12
CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=13
CONFIG_GENERIC_SCHED_CLOCK=y
  • CONFIG_IKCONFIG
    커널이 자신을 구성할 때 사용된 .config 파일을 포함하도록 함.
  • CONFIG_IKCONFIG_PROC
    /proc/config.gz 경로를 통해 커널 설정을 조회할 수 있게함.
  • CONFIG_LOG_BUF_SHIFT
    커널 로그 버퍼 크기 설정
  • CONFIG_LOG_CPU_MAX_BUF_SHIFT
    CPU 최대 로그 버퍼 크기

2. Set Kernel Buffer Size

보통은 init/KConfig 파일에 정의되어있다.
kernel 또는 kernel-5.10 directory 내에서 검색하여 찾을수 있다.

...
config LOG_BUF_SHIFT
	int "Kernel log buffer size (16 => 64KB, 17 => 128KB)"
	range 12 25 if !H8300
	range 12 19 if H8300
	default 17
	depends on PRINTK
	help
	  Select the minimal kernel log buffer size as a power of 2.
	  The final size is affected by LOG_CPU_MAX_BUF_SHIFT config
	  parameter, see below. Any higher size also might be forced
	  by "log_buf_len" boot parameter.

	  Examples:
		     17 => 128 KB
		     16 => 64 KB
		     15 => 32 KB
		     14 => 16 KB
		     13 =>  8 KB
		     12 =>  4 KB
...

나의 경우, LOG_BUF_SHIFT를 별도로 설정해주지 않았기 때문에 default값인 17로 설정되어있었다. 값의 범위는 12 - 10까지 허용한다.

Config의 Default 값을 확인해주었으니 설정하고자 하는 값을 overlay 해주어야한다.
overlay는 kernel의 deconfig 파일에서 설정한다.
kernel-5.10/arch/arm64/config/[kernel_name]_deconfig 에서 설정되는 것을 찾을 수 있었고, 아래의 내용을 추가하였다.

CONFIG_LOG_BUF_SHIFT=19

값 변경 및 빌드 후 결과를 확인하였을 때, dmesg의 size가 변경된 것을 확인할 수 있다.
(dmesg.txt : CONFIG_LOG_BUF_SHIFT=17
dmesg_increase : CONFIG_LOG_BUF_SHIFT=19)

Kernel buffer 외에도 다른 Config 파일을 변경하여 Config 값을 변경할 수 있다는 것을 알게 되었고, KConfig, deconfig와 같은 config 설정파일들을 설정 및 수정하는 방법과 빌드에 포함되는 과정 등을 자세히 공부해볼 필요가 있다고 생각했다😁

4. Refer

🔗 HOW TO CHANGE LINUX KERNEL DMESG BUFFER SIZE
🔗 CONFIG_LOG_BUF_SHIFT: Kernel log buffer size

profile
Andorid developer

0개의 댓글