2012-03-29 68 views
0

我想測量一些庫調用的性能。我的主要測量工具是rdtsc調用。在做了一些閱讀之後,我意識到我需要禁用搶佔和中斷以獲得最準確的讀數。有人可以幫我弄清楚如何做到這些?我知道pthreads有一個「設置親和力」機制。這足以完成工作嗎?固定一個pthread到一個核心

我也讀的地方,我可以打電話到那種

preempt_disable() 
raw_local_irq_save(...) 

是否有使用一種方法比其他任何好處的內核?我嘗試了後一種方法,並得到了這個錯誤。

error: 'preempt_disable' was not declared in this scope 

它可以通過包含linux/preempt.h來修復,但編譯器仍然抱怨。

linux/preempt.h: No such file or directory 

很顯然,我沒有做任何的內核黑客和我到處都找不到我的系統上這個文件。我真的希望我不必安裝新的Linux內核。 :)

感謝您的意見。

+0

無論如何我沒有看到你的問題。如果lib調用花費的時間很少,它被中斷的機率很小。如果庫調用需要很長時間,則中斷時間不重要。如果lib調用是「恰到好處」,那麼製作大量的中斷時間是不重要的。禁用中斷?試圖衡量一個無人能夠運行的癱瘓的操作系統的性能有什麼意義?禁用搶佔很容易 - 只需在空閒系統上運行測試 - 如果沒有其他任何準備就緒,則不會搶佔。 – 2012-03-30 05:00:14

回答

3

釘扎pthread單個CPU可以使用pthread_setaffinity_np

做,但你要實現的到底是什麼並不那麼簡單。我會解釋你爲什麼。

preempt.h是Linux內核源代碼的一部分。其位於here。你需要有你的內核資源。無論如何,你需要編寫一個內核模塊來訪問它,你不能在用戶空間中使用它。瞭解how to write a kernel module here。功能preempt_disable和其他

現在問題的關鍵是,pthreads在用戶空間中,並且您的搶佔禁用功能位於內核空間中。如何互動?

要麼你需要你自己的write a new system call你做搶先和中斷禁用,並從用戶空間調用它。或者你需要求助於其他Kernel-User Space Interfacesprocfssysfsioctl

但我對如何這些都將幫助你基準庫函數真的懷疑。你可能想看看how performance is typically measured using rdtsc

相關問題