我正試圖在Redhat Linux上優化我們的gettimeofday()系統調用。 通過他們的文檔,它可以通過使用虛擬動態共享對象(VDSO)在用戶區域運行呼叫來加快速度。我很好奇,我怎樣才能確定電話的速度呢?我想做出改變,然後比較對我的以前的結果測量系統調用速度
Q
測量系統調用速度
4
A
回答
6
僞代碼:
- 呼叫
gettimeofday()
和保存導致a
- 呼叫
gettimeofday()
一百萬次 - 呼叫
gettimeofday()
並保存結果在b
- 計算
(b-a)/1,000,000
原理:對gettimeofday()
的兩個邊界調用不應對循環產生太大影響。調用你想要的功能可能會感覺很奇怪,但沒關係。
+1
+1常識勝。 – 2010-09-24 13:53:17
1
如果您在英特爾平臺IAPerf.H上有一些宏,可以使高分辨率的計時變得簡單明瞭。
PERFINITMHZ(1200) // Set the clockspeed of your processor
PERFSTART
gettimeofday();
PERFSTOP
PERFREPORT
它使用Time Stamp Register所以你避免SYS通話費用,以獲得時間並獲得精確的時序。如果結果不夠充分,您可能仍然希望調用gettimeofday一百萬次,並將結果分開。
1
也許
strace -T
相關問題
- 1. 測量系統++()的調用用C
- 2. SQL調度系統
- 3. Codeigniter調度系統
- 4. R中的快速系統調用
- 5. 測量下載速度
- 6. 測量下載速度Java
- 7. 測量TCP連接速度
- 8. asp.net調度/訂票系統
- 9. 擬合調度系統
- 10. iPhone/iPod文件系統的速度
- 11. 被測系統上的調用方法
- 12. 使用Java/Android測量下載速度
- 13. 使用Eclipse測量下載速度
- 14. 使用python測量上傳速度
- 15. 使用http.ResponseBody測量上傳速度
- 16. RSpec測試的測量速度
- 17. 系統(「」)調用
- 18. 差異b/w意向調度系統和前臺調度系統
- 19. 測量推薦系統的質量
- 20. 使用Python(Bash?)獲取操作系統級別的系統信息(CPU速度)
- 21. Powershell調用命令和系統變量
- 22. 系統調用和系統程序
- 23. 如何測量文件系統路徑的深度?
- 24. Android的加速度計來測量速度
- 25. Android加速度計 - 測量緩慢加速度
- 26. MIPS:系統調用
- 27. 調用C「系統」 ++
- 28. Ptracing系統調用
- 29. 調用android系統
- 30. Pipe()系統調用
我不知道如何系統調用在用戶空間中運行,或有什麼可以做,以充分優化嗎......?我的理解是,VDSO只是讓內核可以公開在當前處理器上運行系統調用的首選方式(使用'int 80h'或'sysenter' /'syscall'),並跟蹤其他一些內務處理細節。 – Doug 2010-09-24 13:32:19
在glibc運行時庫中實現了一個虛擬動態共享對象(VDSO)。 VDSO映射一些內核代碼,這是讀取用戶空間中的gettimeofday所必需的。標準紅帽企業版Linux 5.1允許gettimeofday函數完全在用戶空間中執行 ,消除系統調用開銷。 – Ananymous 2010-09-24 13:34:52
謝謝,這絕對有趣 - 我想到了這種可能性,但沒有意識到它實際上已經完成。似乎內核在發生上下文切換時將處理器的時間戳記計數器(RDTSC)和時間存儲在VDSO頁面中,這使得glibc可以計算一天中的時間,而無需實際進行系統調用。 – Doug 2010-09-24 13:44:07