我正在修改kvm模块,并在内核代码中添加了printk语句。运行虚拟机后,printk会给我提供有关客户端操作系统的故障地址和其他信息。
我需要从这些信息中生成统计数据。当我使用dmesg时,我只能看到在内核空间中的故障地址,即它们的地址高于0XC0000000。(当VMEXIT发生时,即从客户机切换到主机模式时,需要故障地址)
当我在kern.log中查看相同的统计信息时,我也可以从用户空间(低于0XC0000000)获得故障地址。
因此,对我来说,dmesg的容量似乎有限,所提供的信息是kern.log的子集。
我的kern.log文件太大了,是否可以擦除其中旧的数据,因为文本处理命令如grep、join、awk在文件上运行时间太长?
我的问题是:
dmesg和kern.log之间有什么区别?
如何将kern.log文件大小作为cron作业减小?(擦除过去24小时添加的所有数据)
是否有更好的方法从内核中获取类似printf的功能?
dmesg
的输出与/var/log/kern.log
的最后16392个八位字节几乎没有关联(我使用tail -c 16392
获得了这些字节)。有一些(很少)行是相似的,但必须考虑到输出格式、显示的字段的差异,并且不清楚使用什么样的标志或awk
后处理会导致产生可以通过diff
干净地确定为相同的输出。 - Marcus Junius Brutus