題 為什麼X11轉發如此低效?


每當我使用X11轉發遠程啟動大型GUI時,即使包括-C開關,這種體驗也是非常無響應的。我的問題是,在概念/協議級別會導致什麼?

通過我的25mbit連接,我可以毫無問題地將高清視頻流式傳輸到我的電腦。另一方面,遠程啟動的帶有X11轉發的GUI的無響應性甚至發生在100mbit LAN上,其中延遲應接近零。

據我所知,與視頻流相比,延遲最多只會加倍(因為輸入需要發送到遠程計算機,只有在此之後才可以響應),但在內部,還有其他因素會增加延遲甚至進一步?

其次,帶寬。它為什麼會吃掉這麼多?在圖片和視頻格式方面,許多方法都用於大幅減小尺寸。

例如,在.bmp vs .png的情況下,一個大的黑色方形圖像在.png表示中會少一些,因為信息不是為每個像素存儲的,而是以我所理解的範圍內的方式存儲。

在視頻的情況下,可以通過發送幀之間的差異而不是整個幀來保存大量信息。

我知道這是非常簡化的,但是X11不使用這些方法嗎?它在某種程度上是以位圖 - ish還是非差分原理運行?如果沒有,為什麼它會佔用如此多的帶寬?


80
2018-06-08 13:26


起源


瑣事: Xpra 提供一種有趣的方法。 - Kamil Maciorowski
順便說一句 - 如果鏈接速度足夠快,使用“-C”會降低連接速度,因為壓縮需要時間。 “-C”可能會使100Mb受益,但可能會傷害1Gb,並且肯定會傷害10Gb。也是'ssh'會損害您的吞吐量的情況 - 對快速鏈接的加密也是如此。如果您在計算機之間有直接連接或安全的內部鏈接,請通過TCP:6000直接連接X連接。你會得到明顯的速度提升。 - Astara
聽起來你正在通過SSH轉發,SSH必須加密/解密所有數據。這將增加開銷/延遲。更快的處理器可能有所幫助,但無論您做什麼,都會增加一定的延遲。 X非常“健談”,因此延遲略有增加=性能顯著下降。在過去,我能夠使用X,通過SSH通過28.8調製解調器進行隧道傳輸;那是使用lbxproxy(現已棄用),它緩存/壓縮了大量數據並減少了連接的“煩躁感”。使用-C只能添加更多延遲。 - Meower68
使用類似的東西 ssh -Y -c blowfish 在加密時最小化開銷。如果你完全控制兩端教ssh使用“none”加密來獲得連接的完全傳輸速度。 - Thorbjørn Ravn Andersen


答案:


X11協議從未意圖以圖形方式(就位圖/紋理而言)密集操作。回到X11最初設計的那一天,計算機圖形比現在簡單得多。

基本上X11不會將屏幕發送到您的計算機,但它會發送顯示說明,以便本地計算機上的X服務器可以在本地系統上重新創建屏幕。這需要在顯示器的每次更改/刷新時完成。
因此,您的計算機會收到一條指令流,例如“從坐標x,y到(xx,yy)繪製此顏色的線條,繪製矩形W像素寬,H像素高,左上角為(x,y)等。 “
本地客戶端並不真正意識到需要更新的內容,並且遠程系統幾乎沒有關於客戶端實際需要的信息,因此服務器必鬚髮送大量客戶端可能需要或不需要的冗餘信息。
如果要渲染的顯示由有限數量的簡單圖形形狀組成並且僅需要低刷新頻率(無動畫等),則這是非常有效的。在X11首次開發的時代就是這種情況。

但現代的GUI有很多吸引眼球,其中大部分需要以位圖/紋理/字體的形式從遠程系統發送到客戶端,這需要相當大的帶寬。各種各樣的眼睛糖果包括需要頻繁更新的動畫效果。並且顯示器也越來越大,兩倍寬/高是像素數的4倍。

當然,隨著時間的推移,對X11協議進行了增強,以盡可能地優化它,但基本的底層設計實際上根本不適合當前人們期望的那種GUI的需求。

其他協議(如RDP和VNC)更多的設計是讓遠程系統完成所有艱苦工作,讓系統盡可能高效地決定將哪些更新發送到客戶端(作為壓縮位圖)。通常情況下,現代GUI的效率更高。

這兩種方法都不是完美的,可以很好地處理每種情況。在每個可能的用例中都沒有單一的顯示協議可以做得很好。
因此,在大多數情況下,您只需嘗試本地客戶端和遠程服務器之間支持的所有協議,並使用提供最佳結果的協議。在某些情況下,沒有選擇,你只需要做任何可用的事情。

大多數協議都允許進行一些性能調整,但其中許多設置僅限服務器端,普通用戶無法使用。 (並正確配置它們是一種神秘的藝術。很多系統管理員都不願意搞砸它。)

在大多數情況下,提高性能的最簡單方法(有時非常顯著)是通過切換到更簡單的桌面環境,減少眼睛糖果並放棄使用背景圖像。


104
2018-06-08 14:31



+1由於提到了RDP和VNC,我還應該提到 x2go 這是一個真正加速X11轉發的X11緩存/轉發解決方案。我過去曾成功使用它。 - rath
關於“靠近服務器端的設置”,請回想一下X. 服務器 在連接到物理顯示器和X的計算機上運行 客戶 是用於執行某些任務的軟件(例如Web瀏覽器或文字處理器)。因此,為了運行圖形應用程序,連接到遠程系統的用戶可以訪問X服務器設置。但是,這並沒有顯著降低您的答案的價值。 - α CVn
技術上 協議是RFB,而不是VNC。 - OrangeDog
我錯了還是您在第二段中混淆了客戶端和服務器?客戶端是遠程運行的程序,服務器是本地機器。 - Jonas Schäfer
根據我的測試,RDP並不比X11快。 VNC在許多情況下是因為其幀丟失能力可以防止應用程序因帶寬限制幀速率而減慢速度。 - Joshua


X11連接速度主要有兩個原因,這兩個原因都是你提到的問題:帶寬和延遲。要了解為什麼X11應用程序在網絡上運行緩慢,讓我們討論這兩個問題。

帶寬

默認情況下,X11不會對在應用程序和顯示服務器之間傳遞的網絡數據執行任何壓縮。正如您所提到的,您可以在SSH上使用-C選項來啟用壓縮,雖然這確實有幫助,但它並未針對壓縮圖形數據進行優化。與可以獲得100比1的壓縮率的H.264格式相比,-C壓縮將很幸運地實現2比1的壓縮。一個更好的解決方案是為X11視頻使用圖形或視頻優化的編解碼器,但我們必須小心不要使它太有損,因為桌面通常需要比電影更清晰的圖像,因此用戶仍然可以清楚地閱讀文本和弄清楚細節。

潛伏

X11往往具有高延遲,因為大多數操作需要在應用程序和顯示服務器之間進行多次往返。當在LAN上運行時,ping時間小於一毫秒,這些多次往返不明顯,但是通過互聯網連接,它們會快速加起來。

解決方案

許多年前,有一些項目旨在解決X11協議中固有的帶寬和延遲問題。 lbx(低帶寬X)和dxpc(差分X協議壓縮器)。我不認為lbx有太大的吸引力,但是dxpc成為了一種叫做產品的底層技術 NX。 NX使用有損壓縮來減少帶寬需求,並使用差分算法和緩存來減少傳遞的來回信息數量,從而產生高延遲。我經常使用NX,並且發現性能幾乎與本地應用程序一樣好。如果您對此感到滿意,可以試試NX並查看它是否適合您。缺點是它需要在連接的兩端安裝軟件,而X11通常已經安裝。


36
2018-06-08 16:04



與延遲主題相關的是,對於大多數流媒體視頻,X11將是TCP,而不是UDP。還有一些其他產品可以幫助遠程工作。 Tony提到了RDP和VNC。甲骨文仍然銷售Sun Global Desktop(SGD),效果很好。 Citrix有什麼東西(XenApp?)。我們的評估發現SGD是滿足我們需求的更好選擇,但之前使用過兩種Citrix產品。 - sleepyweasel
x2go對我來說非常好,即使“服務器”是一台舊筆記本電腦。在幾分鐘內啟動並運行... X11前進的性能大幅提升(我的配置無法使用) - comte