2009-04-21 406 views
5

目前我正在研究讀取和寫入磁盤的MFC應用程序。有時候這個應用程序運行得非常快,有時候速度很慢。我猜測這是因爲涉及磁盤訪問,因此我想對其進行配置。這些是這方面的一些問題:分析磁盤訪問

(1)。目前,我正在使用AQTime分析器來描述應用程序。有沒有人嘗試使用此分析磁盤訪問?還是有其他可用的工具可供我使用?

(2)。我應該查看哪些最重要的磁盤參數?

(3)。如果我有多個線程試圖從磁盤讀取和寫入數據,是否會影響性能?也就是說我最好有一個單線程訪問磁盤?

回答

2

您可以使用Windows Performance Toolkit。您可以爲磁盤I/O事件啓用跟蹤提供程序,並查看每個事件的I/O時間和磁盤服務時間。它確實有一些學習曲線。這也可以讓您確定哪個文件I/O實際上會導致實際訪問磁盤,而不是由緩存管理器處理。

最重要的參數是磁盤服務時間和隊列長度。磁盤服務時間是磁盤實際用於處理請求的時間。隊列長度指示是否將磁盤請求備份在其他請求後面。

對於許多線程w /讀取&寫道 - 許多磁盤在背景寫入的讀取方面性能差。如果你有不同的線程在磁盤上隨機的位置進行大量的磁盤I/O操作,那麼可能會導致某些請求捱餓。

1

爲了幫助你(2):

  1. 嘗試批次您寫入磁盤,以避免很多小的調用來寫。當你完成清理你的緩衝區時,調用commit。提交(又名fsync)是一項昂貴的操作,所以在有很多小寫操作時變得更加如此。
  2. 在windows文件句柄上,您可以嘗試 FILE FLAG WRITE THROUGH以提高寫入速度。假設提交不需要使用該標誌調用句柄。
  3. 如果您正在寫入磁盤的數據也將通過讀取進行訪問,請考慮先寫入內存結構,讓另一個線程從結構中讀取並寫入磁盤。這將有助於避免調用從您剛剛寫入的磁盤讀取數據。

希望這有助於....

0

我會做什麼,如果你不能在同一時間暫停所有線程,並檢查它們的狀態,重點關注其中的一個暫停,雖然這是「該死的緩慢」。 This is a little known but effective technique.

由於它的速度相比它的速度非常慢,無論它等待的時間大概是99%,所以當你暫停時你會看到它。無論是一個大的等待還是幾十億的小孩,這都是真的。看看整個調用堆棧。罪魁禍首可能處於堆棧中間的某處。如果你不確定,請暫停兩三次。罪魁禍首將在所有堆棧樣本上。