共用方式為


優化 Windows 遊戲的 DVD 效能

執行 Windows 的電腦有 DVD 光碟機,而且許多遊戲都隨附于 DVD 上。 因此,我們建議您確保遊戲使用 DVD 光碟機來發揮其完整優勢。 藉由瞭解從 DVD 讀取資料的方式,以及資料的位置如何影響其讀取時間,您可以減少載入時間,並改善遊戲期間的整體效能。 本文討論如何優化 Windows 遊戲的 DVD 效能。

DVD 的基本版面配置

此圖顯示 DVD 的基本配置。

dvd 版面配置

DVD 上的資料會儲存為連續的金屬,例如在 CD 上;不過,檔案會分成區塊和磁區。 檔案會分散到 ECC) 區塊 (錯誤修正碼,而每個區塊會分成十六個 2 KB 磁區, (也就是每個區塊) 32 KB 的資料。 檔案會沿著磁區界限對齊,且磁區中的任何未使用空間都保留空白。 如果檔案只有 10 個位元組,則會浪費該 2 KB 磁區中的其餘空間;因此,盡可能將檔案組合成 2 KB 的增量,以取得最佳的資料密度。 請注意,這些規格僅適用于 DVD,而 CD 和 HD-DVD 有不同的規格。

從 DVD 讀取

以下是 DVD 磁片磁碟機在收到從 DVD 讀取要求時執行的順序:

  1. 視需要變更圖層
  2. Seek
  3. 將光學取貨單位重新對焦 (OPU) 以讀取資料
  4. 檢查實際位置
  5. 調整並重複,直到找到正確的資料為止

磁片磁碟機讀取作業會根據磁片磁碟機讀取或實體磁片磁碟機讀取,以不同的方式進行量化。 邏輯磁片磁碟機讀取只能讀取 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