X Window渲染是在client還是server端完成的?

如題

實驗室的伺服器是浪潮的坑爹貨,沒有顯卡,linux系統,做計算很快,但是計算結果的後處理很慢,但是平時用都是ssh到伺服器,再在本地開一個x11 server,所以計算結果是在本地顯示的。

現在我想加一塊高級顯卡來加快後處理的速度,請問應該是加在伺服器那頭,還是本機上比較好?我想這個問題和X window的c/s結構有關係,我不知道3d渲染的工作是在x window的c還是s中完成的?顯卡加在哪邊會比較好?

p.s. 可能引起迷惑的一點是,x window的c/s和ssh的c/s是反的,希望各位大神稍微細說一下所說的server端是指x window的server(在本機)還是ssh的 server(在浪潮伺服器)


Server 端,不過很神奇地,X 的「Server」實際上位於用戶那裡,因為當年能跑動 UNIX 的都是小型機(Minicomputer),沒有顯卡,所以所有的用戶交互都是通過終端機(當年「終端」是個硬體)實現的,X 的繪圖過程就是小型機連接圖形終端(可能是一台硬體圖形終端,也可能是微型機)上的「伺服器」實現的。

而各種 PC 則從一開始都是有顯卡和顯示屏的,所以就沒有使用這麼複雜的協議,而是用「內存」IO 顯示圖像。


server端


3D 渲染是在 server 端完成的,但是最好不要讓 server 和 client 跨網路通信。一方面大量渲染用的數據要從 client 傳到 server,消耗網路帶寬,另一方面沒有了 DRI 的支持顯卡的有些功能可能用不了。

針對題主的情況,比較好的辦法是把顯卡直接插在計算伺服器上,網路上只傳送渲染好的 2D 圖像。VirtualGL 據說是專門用來干這件事的,題主要是捨得折騰可以試試。


X的Server的意思是Display Server。Eric Raymond在《The Art of Unix Programming》裡面說X Server沒法簡單解釋清楚,我的解釋就可以。聽我說過的人都立刻懂


3d渲染的工作是在x window的c還是s中完成的

簡單說,現代的X11架構顯然是在客戶端渲染3D的了,為什麼還會有人覺得這事還是在Server端完成。

現在我想加一塊高級顯卡來加快後處理的速度,請問應該是加在伺服器那頭,還是本機上比較好?我想這個問題和X window的c/s結構有關係,我不知道3d渲染的工作是在x window的c還是s中完成的?顯卡加在哪邊會比較好?

我會說,X11的Server和Client都是可以使用opengl的

p.s. 可能引起迷惑的一點是,x window的c/s和ssh的c/s是反的,希望各位大神稍微細說一下所說的server端是指x window的server(在本機)還是ssh的 server(在浪潮伺服器)

下面說的server只Xorg進程所在的機器(在DRI架構下就是同一台機器)

伺服器神馬的不懂,單從linux桌面的角度描述一下問題。X11一直都是CS結構,最早的時候所有的繪製都是由X Server負責的,Client調用Xlib繪圖函數(比如XDrawLine什麼的),其實是發送了一個繪圖指令,打包成X的消息,通過socket發送給server。因為X Xserver在服務端分配了client的繪圖區域(backing store)並在服務端完成繪製。Server和Client可以在同一台機器也可以不同。client在連接的時候(XOpenDisplay)指定要連接的x server。這個方式最大的問題在於繪圖效率,因為有太多的IPC通訊,對於複雜的現代opengl程序是不理想的。

當然這是很久以前了,現在的X11(僅僅指Xorg在Linux下的實現)雖然仍然是CS結構,但是為了提高渲染效率,支持大型3D程序,設計實現了DRI(目前主流的是DRI2,也有部分支持DRI3)架構(Direct Rendering Infrastructure)。DRI可以支持direct rendering和indirect rendering。基本上對一個opengl程序來說,所謂的direct rendering就是在client端直接訪問硬體來進行渲染。indirect rendering(AIGLX)就是client把繪製指令打包成X的消息,發送給Server,由Server利用DRI實現硬體加速繪製。

然後是像XRender這種現代的X繪圖擴展,一般也通過DRI實現了硬體加速。也就是說,現代的X11的2D繪圖仍然是由Server實現,但是通常都是硬體加速的。當然,目前流行的趨勢是client會自己做2d繪圖(通過cairo,gtk3和qt都支持),最後通過XRender等把buffer拷貝到Server。

所以,3D繪製通常在client端(direct rendering)。但是,DRI要求Server和Client是同機(非網路),所以無所謂顯卡放在哪邊,因為是根本就是同一台機器。

但是看你的說法,更類似OpenCL。顯卡當然加在你的程序跑的機器上。

PS:伺服器我不懂,你參考一下吧。


不知道題主所謂的後處理指的是不是將計算後的數據可視化顯示出來?

如果是這樣,假設題主的計算軟體是自己寫的,或者可以修改,原本是基於xlib顯示結果,那建議題主直接改下程序架構,不用x協議傳遞數據,搞不好更好實現。

假設題主的計算軟體無法修改,那有可能此軟體完全是2d渲染,那顯卡放哪兒都加速不了。

如果題主說的後處理指的是用顯卡來做高性能計算,而不是渲染,那應該放在伺服器端。

瞎答,請指正


推薦閱讀:

如何將真人照片ps成3d遊戲風格?
Adobe Reader 和 Acrobat 的字體渲染出現鋸齒是怎麼回事?
渲染倒角反射的不正常如何解決?
斯坦福兔子模型的來源和故事有哪些?

TAG:Linux | 伺服器 | 計算流體力學CFD | 渲染 |