写一个能引起iowait偏高的linux内核 kernel的模块
时间: 2023-12-10 09:38:04 浏览: 149
以下是一个简单的内核模块,会在每个定时器中断时向磁盘写入数据,从而导致iowait偏高:
```c
#include <linux/module.h>
#include <linux/timer.h>
#include <linux/fs.h>
#include <linux/buffer_head.h>
static struct timer_list my_timer;
static void my_timer_callback(struct timer_list *timer)
{
struct file *fp;
mm_segment_t old_fs;
int ret;
fp = filp_open("/tmp/myfile", O_CREAT|O_WRONLY|O_APPEND, 0644);
if (IS_ERR(fp)) {
printk(KERN_INFO "failed to open file\n");
return;
}
old_fs = get_fs();
set_fs(KERNEL_DS);
ret = vfs_write(fp, "Hello World\n", sizeof("Hello World\n"), &fp->f_pos);
if (ret < 0) {
printk(KERN_INFO "failed to write file\n");
}
set_fs(old_fs);
filp_close(fp, NULL);
mod_timer(&my_timer, jiffies + HZ);
}
static int __init my_module_init(void)
{
init_timer(&my_timer);
my_timer.function = my_timer_callback;
my_timer.expires = jiffies + HZ;
add_timer(&my_timer);
return 0;
}
static void __exit my_module_exit(void)
{
del_timer(&my_timer);
}
module_init(my_module_init);
module_exit(my_module_exit);
MODULE_LICENSE("GPL");
```
该内核模块会在每秒钟向文件`/tmp/myfile`中写入一次数据,这会导致iowait偏高。请注意,这只是一个演示用的例子,不要在生产环境中使用。
阅读全文