對原理沒興趣直接看reduce custom game latency(一)
以下轉錄自sitos在PTT魔獸爭霸所回應文章
文章代碼(AID): #18NFFRON (WarCraft) [ptt.cc]
以下我先翻譯 Dota-Client 首頁的一段文字。
Warcraft III 的區域網路連線在遊戲中並不是透過 UDP 封包來傳輸的,
Warcraft III 的區域網路遊戲和在 Battle.net 的遊戲,
是用一模一樣的方式在進行。唯一的不同只有在尋找遊戲與加入遊戲的機制。
WC3 的區域網路,透過 UDP 廣播來找尋區域網路當中的遊戲,
並取得由主機所送出的遊戲資訊。一旦收到這些資訊,用戶端將會建立 TCP 連線,
連接到主機,並加入遊戲。這個加入遊戲的動作和在 Battle.net 是相同的。
唯一的不同是,在區域網路遊戲中,每個遊戲會有一個獨一無二的代碼,
這個 32-bit 的值會由主機透過描述遊戲的 UDP 封包送給用戶端。
但在 Battle.net 當中,這個值會被設成 0 。
(譯註: Battle.net 的遊戲列表由 Battle.net Server 直接送出,
在顯示遊戲時也有某種機制避免重覆顯示已經出現的遊戲。)
唯一不同的地方很簡單: WC3 在區域網路當中的同步時間間隔是 100ms ,
而在 Battle.net 遊戲中的時間間隔是 250ms 。 Listchecker (另一個軟體)
用了某些小技巧讓在使用 B.net 的 WC3 自以為在區域網路中,
使它會以每 100ms 的時間單位作同步的動作,而非 250ms 。
(譯註: 這件事譯者在本版 #169j3p-2 也已經提過, Listchecker 的構想我也想過,
不過沒有動手去實行,因為有更有趣的目標。 Dota-Client 的做法,
應該和 Listchecker 是類似的,或許是強迫修改某個紀錄同步時間的記憶體值。)
中略三段,主要是在講為啥 100ms 比 250ms 快。基本上這很直覺,
如果有興趣可以參考 #169j3p-2 ,我認為意思是差不多的。
當你將同步時間從 250ms 降到 100ms ,你將會看到重大的改變,
主機優勢只剩 100ms (譯註: 本來是 250ms),而不可避免的延遲也減到 100ms 。
但是,要在不影響用戶的情況底下掉封包或封包變慢可容忍的時間,
也只剩下 100ms (譯註: 這裡應該是講 TCP 的 retransmittion)。
這會使得主機在要送 2.5 倍的封包情況下,變得更糟,
使得封包更有可能在傳送當中遺失。這個方法的確有它的好處。
但是否值得,可以參考論壇當中的討論。
http://forums.dota-allstars.com/index.php?showtopic=154464&st=0&p=1918905
譯文到此為止。
其實 Dota-Client 的首頁已經給這個方法作了很清楚的說明,
不管你要調怎樣的 latency ,你必須要承擔它的後果,而且是正回饋的後果。
把 latency 從 250ms 調到 100ms ,封包量就要變 2.5 倍。
如果進一步調到 50ms 封包量是原本的五倍。封包量變大,但延遲容忍度降低。
原本一個封包要超過 250ms 沒送到,才會有感覺,但現在只要 100ms 就有感覺了。
更慘的是,封包量變大,直接導致 queuing latency 增高,增加封包延遲的情況,
另一方面也使得封包會掉的機會更大。
在這種情況底下,如果隨意調短 latency 卻沒有足夠的網路頻寬,
特別是主機的上傳頻寬(他要傳給遊戲中的其它人),就會出現嚴重的延遲。
以先前 GGC 給的建議值為參考基準的話, 100ms * 10 人的遊戲,
上傳所需是 640kbps ,如果降到 50ms 則會成為 1280kbps 。
而且依據 queuing theory ,頻寬使用量與延遲的關係是指數成長,
因此在網路情況不良的狀況下,縮短同步時間反而可能是一件不好的事。
如果離開理論,回到現實當中,高橋名人的極速是一秒 16 連打,
也就是每個動作之間是 62.5ms ,而一般人能作到 10 連打就已經很強了。
但 WC3 當中的 action 有時不是單純的一次按鍵,因此可達到的 apm 就更低了。
如果每秒都可以送出 10 個 action , apm 就是 600 。
但 apm 到達三百事實上就已經不常出現了。對 apm 300 的人而言,
平均每一個動作是 200ms ,sample frequency 只要是它的兩倍就很夠了,
也就是 100ms 正是 LAN game 的設定值,因此目前 LAN game 的效果大部份人都很滿意。
因此我們要問,真的有必要追求 100ms 以下的同步時間嗎?
為了效益並不明顯的延遲改善,而犧牲網路的頻寬與穩定性,
在不斷追求速度的同時,不要忘記 B 社在製作的時候,
為何選用這兩種數值,考量現實的網路狀況並作出合理的設定,
是相當重要的。上傳 > 2m 的人也許可以開個遊戲來造福大家,
但至少以我而言,連在 LAN game 我都不想作主機了。
反正我的手眼協調和神經傳導根本沒那麼快。
這篇是我寫的
文章代碼(AID): #18NIsiKP (WarCraft) [ptt.cc]
當初在ESM上發表3套reduce latency的軟體
dota client無法測試 (後來才知道1.8要用eesti)
令外兩套使用方式真的很麻煩,即使寫了詳細的說明
我也不覺得會有人願意使用,丟下一句有興趣的自己看說明吧 (我真的很懶是吧)
只提sitos沒講到的部份
對網路了解不多,以下是從網路上看來來 (本人不對內容真實性背書)
參考資料
sitos寫的文 #169j3p-2
TDA Community討論
http://forums.dota-allstars.com/index.php?showtopic=154464&st=0&p=1918905
從玩家的角度來看,影響遊戲有兩個因素 delay, spike
delay是玩家下一個指令後多久會生效,減少latency可以減少delay
spike發生時,玩家會感覺到畫面跳動,或是人物突然動作變很快
這是因為server(host)送給client的封包,有一部份沒在latency的時間內收到
client在收到封包後,要想辦法跟server同步,就得想辦法趕上
1) 直接跳畫面 2)加速跑完
TCP time-out最小是3秒 (遠大於250ms or 100ms)
如果這個封包沒辦法在latency時間內送到client,就會發生spike
如果spike不多,玩家是感覺不太出來的
一個spike畫面只會往前跳個250ms or 100ms
只有在server和client間連線狀況不穩定,連續spike出現才有明顯影響
連線的穩定程度指的不是ping值
在選latency時,必須要比玩家和host之間的ping值還大,否則就會有一堆spike發生
為了避免spike,猜想server會多送幾個同樣的封包出去
ogc anti-spike開了會耗用更大頻寬的原因所在?
ping怎麼看? 可以用這兩個程式
WC3Banlist
DotaRank
如果你在ogc開game能進行的很順,那麼使用dota client在Bnet上也可以辦到
也可能會有更好的結果,因為系統負擔比較小
至於我不提Dota Client Anti-Cheat的原因
作用原理跟Hollywood一樣,必需每個玩家都要開
你覺得這可行性有多大? 辦比賽再考慮吧
號稱可以減少delay是確定無誤的
只是為了宣傳,沒有提到可能增加spike的副作用
調整latency就是在delay和spike的trade-off,怎麼調自己斟酌吧
Saturday, June 21, 2008
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment