優化 Windows 遊戲的 DVD 效能
執行 Windows 的電腦有 DVD 光碟機,而且許多遊戲都隨附于 DVD 上。 因此,我們建議您確保遊戲使用 DVD 光碟機來發揮其完整優勢。 藉由瞭解從 DVD 讀取資料的方式,以及資料的位置如何影響其讀取時間,您可以減少載入時間,並改善遊戲期間的整體效能。 本文討論如何優化 Windows 遊戲的 DVD 效能。
DVD 的基本版面配置
此圖顯示 DVD 的基本配置。
DVD 上的資料會儲存為連續的金屬,例如在 CD 上;不過,檔案會分成區塊和磁區。 檔案會分散到 ECC) 區塊 (錯誤修正碼,而每個區塊會分成十六個 2 KB 磁區, (也就是每個區塊) 32 KB 的資料。 檔案會沿著磁區界限對齊,且磁區中的任何未使用空間都保留空白。 如果檔案只有 10 個位元組,則會浪費該 2 KB 磁區中的其餘空間;因此,盡可能將檔案組合成 2 KB 的增量,以取得最佳的資料密度。 請注意,這些規格僅適用于 DVD,而 CD 和 HD-DVD 有不同的規格。
從 DVD 讀取
以下是 DVD 磁片磁碟機在收到從 DVD 讀取要求時執行的順序:
- 視需要變更圖層
- Seek
- 將光學取貨單位重新對焦 (OPU) 以讀取資料
- 檢查實際位置
- 調整並重複,直到找到正確的資料為止
磁片磁碟機讀取作業會根據磁片磁碟機讀取或實體磁片磁碟機讀取,以不同的方式進行量化。 邏輯磁片磁碟機讀取只能讀取 DVD 磁區的整數數量,而實體磁片磁碟機讀取要求只能讀取 ECC 區塊的整數數量。 一般而言,實體磁片磁碟機會收到讀取要求;它會嘗試填滿其快取。 DVD 磁片磁碟機快取大小取決於個別磁片磁碟機的規格。
當 DVD 磁片磁碟機取得超過快取大小的讀取要求時,要求會細分成快取大小的要求。 磁片磁碟機會搜尋包含要求第一個磁區的 ECC 區塊,並讀取整個 ECC 區塊。 磁片磁碟機韌體會解碼 ECC 區塊,然後讀取下一個 ECC 區塊。 此程式會重複執行,直到磁片磁碟機快取填滿或滿足所有要求為止。 然後,核心會從磁片磁碟機快取讀取已解碼的資料。 然後它會排清快取,並在有任何讀取要求時啟動下一個讀取作業。
注意
每個未快取的讀取都會排清磁片磁碟機快取。
讀取錯誤
DVD 和 DVD 磁片磁碟機不是完美的,而且讀取期間可能會發生錯誤。 就像 CD 一樣,DVD 的部分可能會從塵封或頭變成無法讀取。 如果區塊的任何部分無法讀取,則會將整個區塊視為無法讀取。 如果發生讀取錯誤,磁片磁碟機會嘗試重新讀取 ECC 區塊。 如果區塊仍然無法讀取,磁片磁碟機會中止讀取作業,並將值傳回至核心,指出區塊無法讀取。 然後核心會決定接下來要採取的步驟。 核心可以重新發出要求、完全中止讀取,或將磁片磁碟機向下微調,然後重新發出要求。
資料輸送量
DVD 磁片磁碟機的資料輸送量取決於多個因素:要求的資料位置、磁片的清除或暫存程度、從磁片讀取的資料流程數目、與這些資料流程相關聯的緩衝區大小,以及個別磁片磁碟機的規格。 輸送量也取決於磁片磁碟機是否 (CAV) 或 CLV) (固定線性速度。 如果磁片磁碟機使用 CAV 旋轉,無論 OPU () 的光學取貨單位位於何處,磁片磁碟機都會以相同的速度旋轉。 這表示當 OPU 接近光碟的外部邊緣時,資料追蹤會更快速地移過 OPU。使用 CLV 時,當 OPU 向外移動時,磁片旋轉速度會變慢,因此資料追蹤會以固定速度將 OPU 移過。 大部分電腦中的 DVD 光碟機都使用 CLV。
當磁片磁碟機正在搜尋和變更圖層時,無法從光碟讀取資料。最好將這些作業最小化,特別是在讀取初始載入畫面的資料時。
浪費輸送量的範例
若要瞭解資料輸送量如何浪費,請考慮假設的磁片磁碟機和 DVD。 假設必須在光碟中間讀取檔案。 來自該磁片區的輸送量大約是 8.25 MB/秒。如果搜尋筆劃為一半或第三個已滿,則平均搜尋時間為 150 毫秒。 在此範例中,1.2 MB (150 毫秒 × 8.25 MB/秒) 可能已在取得 OPU 到可讀取的位置時讀取。 新增圖層變更會將浪費的輸送量提升至 1.8 MB (225 毫秒× 8.25 MB/秒) 。
另一個示範浪費輸送量的範例是從 CAV 磁片磁碟機載入 20 個位置不佳的檔案,而不需要變更圖層。 如果每個檔案的搜尋時間加上讀取資料之前的延遲大約是 200 毫秒,則 4 秒 (20 個檔案× 200 毫秒) 只花在搜尋資料。 如果檔案位於外部直徑上,並以 11×速度讀取,則輸送量平均為 15.2 MB/秒, (11 速度/12 速度× 16 MB/秒) 。 此範例中浪費的輸送量大約是 60.8 MB (15.2 MB/秒,× 4 秒) 。
以同步方式讀取與非同步讀取
非同步讀取比同步讀取更有效率。 同步讀取時,一或多個 ECC 區塊的資料會在複製到應用程式記憶體之前讀取到系統記憶體中。 相反地,非同步讀取會將解碼的 ECC 區塊直接複製到應用程式記憶體,以避免 L2 快取並產生較少的 CPU 額外負荷。 若要以非同步方式讀取,請在使用 CreateFile 函式開啟檔案時,使用 FILE_FLAG_OVERLAPPED 旗標。 ReadFile函式也需要傳入的有效 OVERLAPPED 結構,才能執行非同步 I/O。
如需非同步 I/O 的詳細資訊,請參閱 同步和非同步 I/O。
以最佳方式閱讀
從 DVD 讀取的最佳準則是避免搜尋和讀取少量的資料。 當讀取的資料量小於 ECC 區塊的容量 -- 小於 32 KB 時,其餘區塊就會浪費。 由於快取大小會因磁片磁碟機而異,因此開發人員必須決定讀取要求的資料量下限,而不會讓資料小於該數量。 最小大小應該是 ECC 區塊的整數倍數,以避免在讀取和解碼不會使用的資料時浪費時間。 也請務必避免所有成本的搜尋,因為任何花費的時間都是花費在讀取資料的時間。
DVD 相容性
在 DVD 上發行時,有一些重要的相容性問題需要注意。 首先,Windows 電腦中的 DVD 磁片磁碟機可能會因效能而異,因此如果您的 DVD 有特定的輸送量需求,請務必確定使用者的硬體符合這些需求。 此外,多層式 DVD 可能會導致某些 DVD 磁片磁碟機上的相容性問題。 若要避免這些問題,建議您提供單層 DVD,或在發行前徹底測試大部分磁片磁碟機上的多層 DVD。
摘要
若要改善 DVD 效能,可以套用一些一般規則。 下列技術可協助將輸送量最大化,並減少浪費的資料:
- 避免讀取小於 32 KB 的讀取
- 配置資料以減少或消除搜尋
- 在 ECC 區塊界限上配置資料
- 將小型檔案統合成 2 KB 區塊,並減少 DVD 磁區中的填補空間,以最大化容量
- 以非同步方式讀取,以減少 CPU 負載和過多的記憶體使用量
- 避免釋放多層式 DVD