Fast file Loading(Part .1)

source:http://www.gamasutra.com/features/20070419/garcia_01.shtml

這篇值得紀錄一下。這篇主要在比較如何快速地從硬碟或是DVD光碟機中把檔案載入。作者一共比較了四種。

程式碼我就不貼了,請連回原本的網站看。

1)正統可攜的方式(傳統c fopen的方式)

2)使用win32 api

3)File Memory Mapping

4)非同步IO

測試環境:

  • 7200轉的硬碟,平均讀取速度有46.8 MB/s
  • DVD-ROM(使用 DVD+RW) 平均速度為 2.40 MB/s

而作者為了怕作業系統cache這個檔案,還自行撰寫一個程式於讀取後清掉cache。這每個測試都測試過十次。

底下是測試數據,作者使用了一個100 MB的檔案。

硬碟讀取部份:

硬碟 Min(MB/s) Max(MB/s) Average(MB/s)
ANSIC 47.847 48.828 48.527
W32 47.483 48.852 48.497
MMapped 45.830 48.828 48.190
Async I/O 48.239 48.852 48.700

DVD部份:

DVD Min(MB/s) Max(MB/s) Average(MB/s)
ANSIC 2.381 2.386 2.383
W32 2.383 2.390 2.386
MMapped 2.524 2.528 2.526
Async I/O 2.384 2.408 2.399

從上面的結果你可以看到,硬碟部份差異不大。作者建議使用非同步IO的方法,一方面是非同步IO的方式是最穩定的方式,另一方面是可以同時啟動多個I/O的request。

結果…其實作者建議搭配另一種方式XD。其實很容易聯想啦,就是壓縮資料,畢竟在I/O的時候 CPU是處於idle狀態的。作者在此處利用了ZLIB而不是使用LZO。因為LZO並不支援串流格式。100MB 的資料被壓縮成64 MB。

底下是結果:

硬碟部份:

硬碟 Min(MB/s) Max(MB/s) Average(MB/s) Improvement %
ANSIC 59.067 69.384 67.558 +39%
W32 67.797 69.396 68.446 +41%
MMapped 52.247 53.562 52.980 +10%
Async I/O 68.634 69.832 69.242 +42%

DVD部份:

DVD Min(MB/s) Max(MB/s) Average(MB/s) Improvement %
ANSIC 2.469 2.476 2.472 +3%
W32 3.437 3.467 3.455 +44%
MMapped 3.713 3.724 3.720 +47%
Async I/O 3.464 3.475 3.470 +44%

結論)

作者推薦使用非同步分式,雖然他在每個特定的情況下都不是頂尖,但是他是最平均的方法。並且在使用壓縮格式的檔案方面也是最快的。

廣告

One thought on “Fast file Loading(Part .1)

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s