Linux
如何避免核心 printk 環形緩衝區溢出?
我正在嘗試調試 linux 驅動程序,並且一段特定的程式碼表現得非常奇怪。為了看看發生了什麼,我用 printk 語句填充了程式碼,這樣我就可以準確地看到我感興趣的變數在程式碼執行時做了什麼。不幸的是,當列印帶有
dmesg
很多行的環形緩衝區時,似乎隨機失去。Google告訴我這是因為我一次向環形緩衝區寫入了太多數據。我嘗試將環形緩衝區大小增加到最大值(1 << 21),並且嘗試插入 udelays 以減慢寫入速度,但我仍然遇到同樣的問題。我還能嘗試什麼?
據我所知,
klogd
使用阻塞read()
來讀取/proc/kmsg
. 如果您通過 renice 提高其優先級,它可能會有所幫助。您還可以嘗試將核心日誌寫入 ramfs/tmpfs 以節省一些磁碟成本,或者通過syslog
,或者使用klogd
’-f
選項直接寫入文件。否則,計劃 B 是ftrace和
trace_printk()
: http: //lwn.net/Articles/365835/