虚拟机播放本地视频,qemu有大量Write?

来源:互联网 发布:知我药妆产品是正品吗 编辑:程序博客网 时间:2024/06/11 05:26

最近在做测试,需要监控系统状态,然而多次测试的结果总是与我想象的有些差距。。。比如,播放本地视频,为何出现大量的Write。。郁闷了好久,还是要解决的呀!先看看是那个进程搞的鬼:

这里写图片描述

哦,好吧,qemu是在写磁盘…
1. 想到了strace命令:-strace -p PID -e write -t
发现写数据比较多的系统调用:

这里写图片描述

补充:
用于写的系统调用共有三个:
1. short_write (struct inode *inode, struct file *filp, const char *buf, int count)
short_write 函数是用于驱动程序里的系统调用;
2.write(inf fd, char *buf, int count)
write是用户程序的系统调用,只有三个参数:文件描述符,buffer,返回的字节数;
3.asmlinkage ssize_t sys_write(unsigned int fd, const char * buf, size_t count)
系统的写调用,是系统运作的核心函数,也是前两项通过调用实现向硬件设备写数据的必经通道;

2. 很明显,我测试中遇到的系统调用write操作主要是用户空间的写。它写的文件描述符很明确,先找到这些文件~举例:直接:sudo find / -name 22,就可以看到目前qemu进程所使用的fd找出来啦:

这里写图片描述

找到与我这个进程相关的fd。。随便进去一个目录:

这里写图片描述

一部分是socket文件,,大概是用于进程间通信和网络操作,毕竟是网络传输协议测试嘛。嗯,回归到我的重点:磁盘,于是下边的anon_inode:[eventpoll],anon_inode:[eventfd]成功的引起了我的注意。
3. anon_inode:动态生成的文件节点,一般没有具体的磁盘路径。
(1.) eventfd : 类似于pipe,用来完成两个线程之间事件触发,已经支持到进程级别了, 能够用来作为线程之间简单通讯,类似于pthread_cond_t。(https://www.cnblogs.com/Leo_wl/p/5879763.html)有关进程间通信的博文,写得比较清楚。
(2).epoll : 则是linux提供的一种多路复用技术,完成与select,poll等一样的功能,完成对多个文件描述符进行等待。我猜测它的职责是帮助调用者寻找当前就绪的设备。
(http://blog.csdn.net/wangxiaoqin00007/article/details/14448185)关于epoll,可以参考这个连接。因为我测试的环境下,主要是io操作,所以向这个文件下写内容就可以理解了。

嗯,大概就是这样,欢迎指点:)

原创粉丝点击