虛擬機播放本地視頻,qemu有大量Write?

最近在做測試,需要監控系統狀態,然而多次測試的結果總是與我想象的有些差距。。。比如,播放本地視頻,爲何出現大量的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操作,所以向這個文件下寫內容就可以理解了。

嗯,大概就是這樣,歡迎指點:)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章