开发者

Appending data to a file from the Linux Kernel

开发者 https://www.devze.com 2023-02-13 20:39 出处:网络
I\'m trying gather measurements of cycle counts for a particular sys call (sys_clone) in the linux kernel.That said, my process won\'t be the only one calling it and I can\'t know my pid ahead of time

I'm trying gather measurements of cycle counts for a particular sys call (sys_clone) in the linux kernel. That said, my process won't be the only one calling it and I can't know my pid ahead of time; so I'll have to record every invocation of 开发者_开发百科it for every pid.

The problem that I've got is that the only ways I can figure out how to output this data (debugfs, sysfs, procfs) involve statically sized buffers, which will be quickly overwritten with irrelevant data from other processes calling sys_clone.

So, does anyone know how to append an arbitrary number of lines to a user space accessible file in linux?


You can take the printk()/klogd approach, and use a circular buffer that is exported via /proc. A user-space process blocks on reading your /proc file, and once it reads something that is removed from the buffer. In fact, you could take a look whether klogd/syslogd can be modified to also read your /proc file, thus you wouldn't need to implement the userspace part.

If you are good with something simpler, just printk() your information in a normalized form with some prefix, and then just filter it out from your syslog using this prefix.

There are a few more possibilities (e.g. using netlink to send messages to userspace), but writing to a file from the kernel is not something I'd recommend.


You could stash the counts in the right task_struct, and make it visible through a per-process file in /proc/<pid>/.

0

精彩评论

暂无评论...
验证码 换一张
取 消