Steam下載為什麼會狂吃CPU?秘密找到了

本文經超能網授權轉載,其它媒體轉載請經超能網同意

很多讀者朋友都是Steam的忠實用戶,現在寬頻的頻寬普遍增多了,像200Mbps、500Mbps這樣入戶的也不少見了。

可能很多網速較快的朋友在Steam上下載遊戲時會發現自己電腦的CPU佔用率很高,難不成下載速度快了CPU會跟不上嗎?

這是有可能發生的,原因呢,就出在Steam的整套下載機制上。

Steam下載為什麼會狂吃CPU?秘密找到了

Steam使用了一套較為複雜的文件下載機制。首先,開發者可以給自己的遊戲建立多個倉庫,每個倉庫中可以存放不同的文件。

Steam會根據倉庫中的文件內容,形成一份清單,同時將該倉庫中的所有文件進行分塊,每個塊大小約為1MB。

為了不讓沒有購買過該遊戲的用戶輕鬆獲取到遊戲文件,Steam內容系統將每個塊都使用LZMA演算法進行了壓縮,並且使用一個256-bit長度的密鑰對文件塊進行了AES加密。

每個倉庫都有一個獨一無二的密鑰,並且在倉庫的清單中記載有原始文件名、文件大小、文件校驗值、文件類型和文件區塊的元數據,同時還會記載每個區塊的ID、校驗碼、文件位置偏移值和壓縮前後的大小。

通過這樣的設計,Steam能夠有效保障整個下載過程是高效的,並且在下載時不會有差錯。

同時,對於所有Steam用戶來說,每個區塊文件都是一樣的,這也允許CDN存儲靜態的內容,而不是動態加密的。

Steam下載為什麼會狂吃CPU?秘密找到了
大概就是這樣子,把整個倉庫的文件給壓縮並加密了

在下載一個已經發售的遊戲時,Steam是可以第一時間拿到用於解密文件的密鑰的。

為了節約時間,Steam使用了邊下載邊解密的辦法,而LZMA解壓縮(就是7-Zip用的演算法之一)和AES解密都是較為吃CPU資源的。

這也就是Steam下載速度越快,CPU佔用率越高的原因了——因為你同時間要解密的數據量更大了。

Steam下載為什麼會狂吃CPU?秘密找到了
在公司500Mbps的網路環境下,用Steam下載遊戲大概會吃掉我這塊i7-4770K約50%的佔用率,還是很高的

而在下載尚未發售遊戲的數據時,也就是在預載遊戲時,由於拿不到用來解密數據的Key,Steam會把下載到的數據存到*.csd文件中,在遊戲正式發售之後,就會使用拿到的密鑰進行解密和解壓縮。

如果你的存儲設備速度慢,而網速較快的話,那確實不如不做預載、直接在正式發售後進行下載。

本文主要參考了SteamDB對Steam下載機制的解讀文章,如果各位讀者對Steam下載還有別的疑惑的話,歡迎在評論區中提出。

Steam下載為什麼會狂吃CPU?秘密找到了