我被要求編寫測試用例以實際顯示信號量的性能,並在有更多讀者和更少編寫者的情況下讀取寫入信號量,反之亦然。 我已經實現了信號量(在內核空間中我們被問到了實際情況),但沒有得到如何編寫用例,並做了相同的實際實際評估(分類)。信號量和R/W信號量之間的性能評估
回答
爲什麼不直接寫兩個版本的代碼(Semaphore/R/W Semaphore)來開始。用例將取決於正在測試的實際功能。它是一個設備驅動程序嗎?它是否與IO有關?它與網絡有關嗎?如果不知道這一點,很難想出用例。
一般來說,我會做一些類似於IO基準測試的測試,將會針對一組運行的增加的內存佔用情況進行多次模擬。另一組運行可能會越過處理負載。另一個可能會在不同的塊大小。我會比較每一個與總帶寬之類的東西,看看性能(在這種情況下聚合帶寬)是如何在這些測試中發生變化的。
同樣,如果您正在測試類似USB驅動程序的東西,您的用例可能會完全不同。
它實際上是一個設備驅動程序(一個IPC設備驅動程序)。因此,我們必須實際顯示信號和R/W信號的兩個用例的表現: 1)更多的讀者,少寫 2)少讀取和寫入更多的那麼 如何從交流程序..should這些用例我寫了20-30個相同的c程序,並通過打開許多終端來運行paralley,或者也有其他方法。 經過上面的介紹,我們可以真正看到和觀察性能之間的差異。 –
使用自定義信號量,寫出下列2個C程序和編譯它們
reader.c
writer.c
作爲一個簡單的初步測試,寫一個shell腳本test.sh
並添加命令加載測試二進制文件如下。
#!/bin/sh
./reader &
./reader &
./reader &
./reader &
./writer &
啓動上述外殼腳本./test.sh
將推出4個讀卡器和1個寫操作。將其自定義到您的測試場景。
確保您的程序正常運行,即先驗證數據是否正確交換,然後再嘗試分析性能。
一旦您確定IPC按預期工作,請分析CPU使用情況。在啓動test.sh
之前,在另一個終端中運行top
命令。在測試腳本運行期間,觀察不同讀寫器的CPU使用模式。
您也可以啓動單獨的二進制文件(或測試腳本)有:
time <binary>
要打印總壽命和時間花在等待上的內核驅動程序 。perf record <binary>
和完成後,運行perf annotate main
要獲得的代碼中的的各部分所花費的時間的相對量。
- 1. 互斥量和信號量之差= 1?
- 2. 時間延遲/延遲估計非週期性信號(和週期性信號)
- 3. 完成變量和信號量之間的差異
- 4. 信號量併發性
- 5. Ruby信號量?
- 6. Python:構建可重入信號量(結合RLock和信號量)
- 7. fortran的信號量
- 8. C - 多信號叉與信號量
- 9. Linux信號量:自旋鎖或信號?
- 10. 信號量和用C
- 11. 信號量和同步
- 12. ReverseOneToOne在Django信號不評估
- 13. 強制JavaScript重新評估信號?
- 14. 如何評估GPS信號強度? (iPhone)
- 15. 兩個進程之間的信號量不能使用fork
- 16. JAVA中的互斥量和信號量?
- 17. 2個時間相關的多維信號(信號向量)的相關性
- 18. C中設置的信號量的最大信號量數
- 19. 信號量計數器和信號量方法之間的理解差異整數參數?
- 20. 重置信號量
- 21. 實現信號量
- 22. 再入信號量
- 23. 信號量計數
- 24. 可調信號量
- 25. pthread_cond_wait與信號量
- 26. 實現信號量
- 27. 信號量術語
- 28. Shell/C信號量
- 29. C信號量值
- 30. 信號量與互斥量
它實際上是一個設備驅動程序(一個IPC設備驅動程序)。因此,我們必須實際在兩個用例信號和R/W信號的性能:1)更多的讀者,少寫2)少讀,更使寫入如何..should我寫20生成交流計劃這些使用情況-30相同的c程序並通過打開許多終端來運行paralley,或者也可以使用其他方式。之後,我們可以真正看到並觀察性能之間的差異。 –