修改Linux内核的printk缓冲区(log缓冲区)大小
2017-08-17 10:41
1031 查看
我们可以用printk打印kernel的日志信息(即log信息),根据时间戳可以判断内核新打印的log会覆盖掉以前打印的log。原因是内核用环形缓冲区存放打印的log信息。那么如何增大缓冲区的大小呢?
我们看kernel/printk.c的代码
#define LOG_ALIGN __alignof__(struct printk_log)
#define __LOG_BUF_LEN (1 << CONFIG_LOG_BUF_SHIFT)
static char __log_buf[__LOG_BUF_LEN] __aligned(LOG_ALIGN);
static char *log_buf = __log_buf;
static u32 log_buf_len = __LOG_BUF_LEN;
正是__LOG_BUF_LEN这个宏设置了环形缓冲区的大小,那么__LOG_BUF_LEN的大小是多少呢?是由1 << CONFIG_LOG_BUF_SHIFT(即2的CONFIG_LOG_BUF_SHIFT次幂)来决定的,那么CONFIG_LOG_BUF_SHIFT这个配置项又是在哪里定义呢?
在init/Kconfig里定义
config LOG_BUF_SHIFT
int "Kernel log buffer size (16 => 64KB, 17 => 128KB)"
range 12 21
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
可见CONFIG_LOG_BUF_SHIFT是一个内核配置项。它的大小可以配置为12~21,也就是说环形缓冲区的大小可以配置为4 KB - 2MB。内核(3.18内核)默认是17,即缓冲区的大小为2^17(131072)B。
所以要想增大或者减小环形缓冲区的大小,只需要在内核的配置文件里(对于arm架构为arch/arm/configs/xxx或者arch/arm64/configs/xxx)添加CONFIG_LOG_BUF_SHIFT=XX
即可修改环形缓冲区的大小。
我们可以用printk打印kernel的日志信息(即log信息),根据时间戳可以判断内核新打印的log会覆盖掉以前打印的log。原因是内核用环形缓冲区存放打印的log信息。那么如何增大缓冲区的大小呢?
我们看kernel/printk.c的代码
#define LOG_ALIGN __alignof__(struct printk_log)
#define __LOG_BUF_LEN (1 << CONFIG_LOG_BUF_SHIFT)
static char __log_buf[__LOG_BUF_LEN] __aligned(LOG_ALIGN);
static char *log_buf = __log_buf;
static u32 log_buf_len = __LOG_BUF_LEN;
正是__LOG_BUF_LEN这个宏设置了环形缓冲区的大小,那么__LOG_BUF_LEN的大小是多少呢?是由1 << CONFIG_LOG_BUF_SHIFT(即2的CONFIG_LOG_BUF_SHIFT次幂)来决定的,那么CONFIG_LOG_BUF_SHIFT这个配置项又是在哪里定义呢?
在init/Kconfig里定义
config LOG_BUF_SHIFT
int "Kernel log buffer size (16 => 64KB, 17 => 128KB)"
range 12 21
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
可见CONFIG_LOG_BUF_SHIFT是一个内核配置项。它的大小可以配置为12~21,也就是说环形缓冲区的大小可以配置为4 KB - 2MB。内核(3.18内核)默认是17,即缓冲区的大小为2^17(131072)B。
所以要想增大或者减小环形缓冲区的大小,只需要在内核的配置文件里(对于arm架构为arch/arm/configs/xxx或者arch/arm64/configs/xxx)添加CONFIG_LOG_BUF_SHIFT=XX
即可修改环形缓冲区的大小。
相关文章推荐
- 修改Linux内核的printk缓冲区(log缓冲区)大小
- 修改Linux内核的printk缓冲区(log缓冲区)大小
- 修改oracle redo log的大小
- RAC修改redo log 日志大小
- window 修改 cmd 窗口以及缓冲区大小
- oracle学习笔记----在线修改redo.log文件的大小
- 套接字选项—修改套接字缓冲区大小
- 修改socket收发缓冲区大小限制
- 【Vegas原创】在线修改redo.log文件的大小
- 修改FILE缓冲区大小,改进写日志性能
- arduino修改串口缓冲区大小的三种办法
- 修改日志组大小 v$log
- 修改shell界面回滚缓冲区大小
- 套接字选项—修改套接字缓冲区大小
- 在线修改redo.log文件的大小
- 修改Oracle redo.log文件的大小
- 在线修改redo.log文件的大小
- Python网络编程——修改套接字发送和接收的缓冲区大小
- windows命令行cmd窗口大小(80*40)和缓冲区大小修改方法
- v$log中status说明及redo log大小修改