2009年4月23日 星期四

X Window 圖形介面的效能

自從用了 Ubuntu 了以後,發現 X Window 的桌面環境反應有些鈍鈍的,反倒是 Windows 的 GUI 比較流暢 (這裡指的是當 Ubuntu 桌面特效沒開的時侯和 Windows XP 相比)。比較明顯的地方像是以前 XP 在 YouTube 下全螢幕看影片時都不會 lag,但是在 Ubuntu 下看就會;還有瀏覽器在上下捲動網頁時也是,尤其是 background-attachment 屬性設成 fixed 的時侯 (即捲動網頁時背景固定不動只有內容會捲動的時侯,例如像鳥哥的這個網頁) 較容易會 lag,有時甚至連正在播放的 mp3 都會因此停掉。此外,當畫面 lag 的時侯觀看右上角的系統負載指示器

GNOME panel 系統負載指示器

通常會發現 CPU 吃得滿兇的。

會發生上面那些問題可能有很多原因:
  1. 有可能是驅動程式的問題,因為顯示卡沒有被正確驅動造成 2D 硬體加速沒被致能。
  2. 也有可能是應用程式 Firefox 的問題。
  3. 可能是 desktop environment (如 KDE、GNOME 或 Xfce 等...) 或是 toolkit 的問題。
  4. 或是 X Window 系統本身的問題。
  5. 當然也不排除其它沒列出來的原因。

驅動程式的問題

這是有可能的,舉例來說,有重灌過 Windows 的人可能會發現剛灌完的 Windows 雖然螢幕解析度不高,可能只有 800x600 但是用起來畫面卻會鈍鈍的。一旦驅動程式灌完,即使解析度調高用起來也不會有 lag 的現象。

應用程式 Firefox 的問題

沒記錯的話,曾經在 XP 下比較 Firefox 和 IE 7 捲動的流暢度,在 IE 下捲動網頁比 Firefox 流暢 (但就 JavaScript 而言,依據 CNET 的測試 IE 卻是最慢的)。但這也無可厚非,畢竟 IE 不像 Firefox 支援多種 W3C 的標準,要知道 W3C 所定的一些標準其實是很複雜的 (例如 CSSDOM),相較於 Firefox,IE 對於 W3C 標準的支援似乎就沒那麼好 (也不支援 SVG),或許因此在設計上就簡化了許多。

X Window 系統本身的問題

提到 X Window 系統的問題,算得上是一個歷史的包袱。X Window 從 1984 年發展到現在已經將近 25 年了,當初設計時採用的主從式架構 (client-server architecture) 長久發展以來一直都沒有改變,這種架構雖然可以保有良好的網路通透性 (network transparency),卻因為如此造成圖形上的效能低落,這也就是為什麼當初蘋果電腦決定不採用 X Window 而自行研發 Quartz 作為 Mac OS X 的 window server。Quartz 其中一位作者 Mike Paquette 說: 「一旦蘋果電腦將所有希望被支援的功能加入 X Window,它可能將不再像是一個 X Window 而且也不會和其它的 server 相容」*。由於 X Window 推出已經很久了,累積了許多為 X Window 開發的應用程式,這些程式都是建構在古老的 X Window 架構上,形成 X Window 在架構改善上的一大障礙,一旦 X Window 真的翻新了軟體架構,勢必會造成許多舊有應用程式因相容性的問題而無法執行。

很早之前 X Window 圖型效能不佳的問題就已經被提出來了,造成問題的潛在因素包括:
  1. 當 X client 向 X server 發送同步化的請求時 (synchronized request),client 將訊息發送出去後需等待 server 做出回應,這時 client 的執行就會 block 住,直到取得回應或 timeout 為止。從訊息發出直到取得回應這段時間叫做 round-trip delay time (即一趟訊息往返的時間),round-trip delay time 對效能有重大的影響。除非 client 可以再開一個執行緒繼續執行下去,用類似這種方式暫時跳過等待的時間,不過這種方式會增加設計上的難度,此外若後續程式的執行與 server 傳回的回應有關,則 client 仍舊必需得到結果才能往下繼續執行。
  2. 當 X client 與 X server 都在同一個 CPU 或同一個核心中執行時,系統需要額外的 context switch 才能在 client 與 server 之間輪流執行各別的程式碼。
  3. X client 與 X server 都要對傳送的命令作格式化以及緩衝的處理,對於各種請求的回應也必需遵照 X Window 的通訊協定,造成經常性 CPU 資源的浪費 (overhead)。
  4. 在一些具有快取 (cache) 機制的處理器中 (例如 ARM 9),X client 與 X server 間的 context switch 會清除 (flush) 快取的內容,進一步降低執行效率。

X Window 相關後續發展

前面提到 5 點可能的問題中,第 4 點即 X Window 的問題應該算是比較嚴重且普遍存在的問題。至於其它,大部份是出自個人的懷疑,到底對效能的影響有多大可能還要很多時間去研究才能得知了。不過在網路上找到的,大部份都是在討論 X Window 架構對 GUI 的影響,所以我想這應該是目前最迫切的問題。

針對 X Window 的問題,目前所找到的兩個解決方法 WaylandMicroXwin 是我個人認為比較有希望的。依我個人的了解 Wayland 是透過 DRI/DRI2 的方法,讓應用程式能夠直接取得 framebuffer 或是 offscreen pixmap 讓應用程式能夠直接在上面繪圖,因此等於是跳過了 X server 讓應用程式直接透過 kernel 存取繪圖裝置;至於 MicroXwin 所用的方法就是大家以前常提的: 「將 X server 搬進 kernel」,這麼一來不但可以改善 GUI 效能,也可以保持對既有應有程式的相容性。MicroXwin 或許可以在短時間內得到 GUI 效能的提升,不過長期而言或許 Wayland 才是真正的解決之道,因為大家都知道目前的 X.Org 已經是一個過於擁腫龐大的系統,而 client-server 架構也增加 X Window 程式設計上的困難與複雜度 *,程式可能會因此變得 buggy,所以走極簡路線的 Wayland 應該能大幅改善當前的情況。

8 意見:

archer 提到...

期待 x window 能夠趕快改善 ~~
不知有沒有發行版開始考慮新的架構了?

Justin Lee 提到...

我想一時間或許是無法得到理想的解決方案。

Wayland 才剛起步,還有一段很長的路要走,因為它架構不同,所以現有的 toolkit 都要 port 過去,此外 driver 的支援也是一個問題,Wayland 所用 Intel 開發的 GEM (Graphics Execution Manager) 要到 2.6.28 以後的 kernel 才有支援,至於其它廠家 (如 NVidia) 的 driver 是否願意跟進也還是個問號 (除非 NVdia 願意公開顯示卡的 data sheet 讓社群自行開發 driver)。

而 MicroXwin 雖然它的相容性比較好,架構的改變不像 Wayland 那麼大,但是目前也只支援有限的 distro,而它的 kernel 又不是 open source 所以一般的開發者也無法對它做改進。

Justin Lee 提到...

這裡還有一些相關文章:
Wayland:Linux的新X Server (簡體中文)
Wayland最新动态 (簡體中文)
Linux Kernel 2.6.30下Intel显卡性能有大幅提升! (簡體中文)

此外 Wayland 也出現在 Fedora 的 Whiteboards 或許將來有機會進入這個 distro

茶米 提到...

我提一些之前的經驗,當作參考:P

關於Firefox部份,flash和卷動速度兩個的議題不太依樣。(我以Firefox 3為基礎來說)Flash這個問題比較複雜:大致上來說,一個是flash player有的版本播放有問題,或者是他的player是針對windows優化。我剛剛試了一下,發現youtube全螢幕只要不要讓下面toolbar突然顯示消失,就不會lag了。一但時間軸突然產生,影片就會卡住,這個和youtube的player設計有關,應該是舊版的player。另外看到土豆網的影片,在3D特效開/關以及全螢幕以及各種timebar顯示消失,都很順暢。以前的土豆網flash player在Linux上也像youtube一樣。可是土豆網換過一次player,而這個新的版本在linux上就非常順,影片的話土豆網的影片有的本來就很卡,這要看影片提供者而定。而我的解決方式是,如果遇到flash movie很卡的,我就下載回來看,順的我才再網路上看,這樣就沒問題了。另外flash在一堆廣告時CPU用量標高的問題,反倒是更頭痛的。

Firefox捲動的問題有兩種情況。以前的firefox捲動速度普通,而且我再猜因為gtk的關係,所以卷動速度在高速下顯的慢,在複雜的情況下firefox才會贏過IE。一般來說,以前的捲動速度算是普通。然而到了linux下,問題是卡在Firefox只要在KDE上跑,會有scroll bar 的卷動delay,這個和kde/gnome銜接有關(不過剛剛看了一下,你應該是用gnome)。然而到了firefox 3,因為rendering engine是新推出的,在複雜頁面下如果不開3D,還ok。如果一開3D,會lag到嚇死人。然後依堆複雜圖片以及flash一起來,幾乎卷不了。剛剛查了一下,發現到只要把平滑捲動關閉,卷動問題會小很多。至於hardware rendering問題的修改,可能要再設定一下。這個部份,可能要等到Firefox 3.5推出,應該會改善很多。畢竟新推出的scalable webpage以及平滑捲動,看起來還是會比較好。現在如果想讓卷動速度加快,建議把firefox升到最新版本,絕對會有很大的改善。

至於Xorg方面, Xserver 1.4 使用的事傳統 server/client架構。 Xserver 1.5 開始引用server/client結合的概念,速度開始提升,不過主體架構還是舊的。到了Xserver 1.6,server/client 在主機上被徹底結合,顛覆了傳統架構。速度的增加真的是有幾倍,一點也不誇張(因為我從Xserver 1.4用到1.6,所以有很大的感覺)。這應該就是所謂的wayland吧,因為我看上面的敘述,和Xserver1.6的新特性非常像,像是"讓應用程式能夠直接取得 framebuffer 或是 offscreen pixmap "這個特性在Xserver 1.6出現,另外還有EXA/XAA加速等。缺點是,因為server/client被徹底結合,所以只要GUi一當掉,就得重開機,這和以前windows的缺點很像。這個部份的話呢,就要靠Xserver的努力,把以前的優點和現在的優點結合起來,或者是設計出令一種穩定的架構。

Xserver 1.6,很有可能還是再untable or testing裏面。在Opensuse中,Xserver 1.6只有在factory(未來的Opensuse 11.2 套件)裡面才有。至於安裝上的細節,我最近有po依兩篇關於x server安裝上的注意事項。

另外,Opensuse 的build service上有時候會有ubuntu的套件歐,可以去看看XDD。

抱歉,昨天真的是弄錯了,看到你的職稱是MS 軟體工程師,還以為是Windows的fans,原來是弄錯了XDD。我有送出加入好友的邀請了。以後歡迎多多光臨 ^___^

Justin Lee 提到...

感謝茶米在小弟的寒舍留下這麼多的意見,真的是非常熱心。

其實會被誤會是 Windows 的 fans 也是很正常的事,因為在簡介中說自己是 Ex-軟體工程師 for MS Windows App. 或許大家一看到 MS Windows 就開始有點反感了。其實小弟目前正在待業中,而在金融風暴之前的身份是軟體工程師,主要的發展平台是在 MS Window,所以簡介中才會提到這個很敏感的公司,重點在於頭銜前面的那一個 Ex-,跟 ex-girlfriend 的用法一樣,代表是前一任的意思。(也許要思考一下新的頭銜,比較不會引起誤會)。因為以後比較想朝 Linux 的方向發展,所以目前正在找的都是和 Linux 比較有關的工作,只不過小弟在 Linux 上開發的經驗可以算是 0,所以要找到這樣一份工作實在不太容易。

另一個造成誤會的原因,可能是因為上次在你 blog 留的意見,看起來有點像是在批評 Linux 的 GUI,這點實在很抱歉,怪就要怪小弟用詞不當,留意見時沒有注意措詞。不過小弟主要是求好心切,希望能藉由自己的使用經驗能夠讓人能稍微注意效能這方面的問題,並提出一點點改進的想法,沒想到做得太過火了而弄巧成拙 ^^" 如果茶米有稍微看過敝人之前在此網誌發表的文章,應該就能辨認小弟其實是偏好 Linux 的 =]

CPU 用量飆高也許是因為 GUI 太耗資源的關係,感覺有時因為 CPU 在處理 GUI 忙不過來,所以才會造成畫面有點卡,而正在播放的 mp3 也會因此暫時停掉。其實小弟比較在意的是當 XP 和 XOrg 兩個擺在一起比較時情況,當初剛開始用 Ubuntu 時個人心理上會預期 XOrg 的流暢度應該會和 XP 差不多,不過實際上 XP GUI 的表現個人感覺起來似乎是比較流讚暢 ... 不過這樣的說法也不全然代表 XOrg 就真得有很大的問題,這也只能算是一個個案。因為小弟這邊用的是主機板內建的 Sis 顯示卡,基本上這塊卡的硬體規格算是 close 的,所以可能許多 Xorg 一些較新的技術 (如: DRI/DRI2, GEM, UXA/EXA/XAA) driver 都不是支援得很好,也無法將硬體所有的功能都發揮出來,所以如果只因為個人單一個案就以偏概全的認定 XOrg 的能力就不是很客觀,也許改用 Intel 或 ATI 的顯示卡這些問題就不會麼嚴重或是甚至表現得比 XP 更好 =] 不過最終還是希望這些硬體廠商能夠加強對 Linux 的支援並且開放規格,這樣才能比較有效地決解這方面的問題。

茶米 提到...

哈哈,主要不是因為看到你是MS software,是文章內容和投銜接在一起才會稿錯XD。其實阿,我並不會說討厭什麼(自己是不愛用win),之前是怕說筆戰,結果後來弄錯了(看到這個blog後),真是不好意思呢。

話說我之前都在用xorg的非加速介面以及compiz 3D介面,所以一開始根本就不知道原來xorg會lag :p(畢竟差異幅度真的不大,是你說到這個我才發現到,哈哈)。我只是用了新的xorg,發現怎麼那麼快,就很愛用了。

其實阿,現在有些3D/2D特效系統,如果寫的不好,就有可能大量用CPU,其實這個是很怪的。Gnome的compiz比較不會,因為之前用起來,爛顯卡都跑的很順暢。而KDE的2D/3D特效,因為是新創的,就會出現CPU大量佔用,這個其實真的是要改進的地方,那就看KDE團隊的表現拉XDD。我覺得等KDE4.5出來,應該會是個不錯的系統。現在才快到4.3而已呢。

Xorg,新的是比較快,可是,對於我那個mobility radeon x1300,不知道是radeonhd還是xorg還是kde特效的問題,當到我快抓狂了!!!電腦一直重開真的是很xxxx。總覺得我的筆電很愛和Linux打架,每次都要調老半天。桌機卻一下子就很正常了。很希望Xorg在推出新架構時,考慮穩定性的問題,不然真的可能落入windows之前的狀況。不過後來發現用kde 4.3svn比較會當掉,現在用回4.2.85就沒問題了。覺得是KDE導致radeonhd發出exception,然後導致xorg崩潰。

close source顯卡的問題,除了SIS,intel也會有這種現象。之前用intel時,kde特效是能用,但不是很順。然後在scilab5畫圖時,視窗是黑的(後來查詢,才發現是顯卡問題)。而SIS我以前有用過,對他印象非常,非常的差。如果忍受不了,換顯卡是明智的選擇XDD(我桌機剛買了個1500元的ati 4350,超級順的)。對了,xserver 1.6有兩種加速系統,一般如果沒有設定的話,他會幫你選(可以查/var/log/Xorg.0.log),查詢(exa/xaa/shadowfb)
Exa: 新的加速系統,對於有些顯卡很容易當機(我筆電如果同時開一堆程式,用exa,基本上就會當掉,桌機因為速度夠快,沒測過)
Xaa: 舊的加速系統,比較慢,但穩定(依搬顯卡會使用這個加速)
shadowfb: 軟體加速,有的顯卡不夠力,可能會開這個。這對於3D/2D加速都有影響

如果要嘗試EXA的話,再/etc/X11/Xorg.conf(一般是這個路徑)的device section可以設定,不同顯卡的設定方式不同,有可能會當機,如果當機得切回console (fallback,一般distro應該都有),然後改回設定。如果怕弄錯要先把原來的xorg.conf備份。如果Xserver 1.5/1.6都有用過的,應該會明顯改覺到加速的差異,尤其是反應時間。

Justin Lee 提到...

: "然後在scilab5畫圖時,視窗是黑的"
小弟見識淺薄...沒聽過這套軟體,不過從字面上看來似乎和 MATLAB 有點關聯,猜想可能是茶米在工作或課業上會用到的工具吧。自己在寫部落格,也希望能在內容裡多加入一些圖片、GIF 甚至是自製 YouTube 影片或 Flash,一方面圖文並茂會比較易於了解,另一方面看起也比較不會單調,不過一切都要從零開始學起,畢竟不是讀美工相關科系的。目前比較常用的是 GIMP 和 Inkscape,而 Blender 也才剛開始摸,之後可能會寫一些關於量子計算機的東西,如果要圖示說明,會 MATLAB 這類的工具應該也會有不少幫助吧。

: “SIS我以前有用過,對他印象非常,非常的差。如果忍受不了,換顯卡是明智的選擇XDD(我桌機剛買了個1500元的ati 4350,超級順的)。”
當初曾想過要買一塊顯示卡,也許就可以把 Compiz 打開了,不過沒想到家中桌機遇到不穩定當機的問題目前為止還無法解決,原本是打算等換新電腦再來考慮,不過聽你提到 1500 元的價格可能我要重新評估是否要先買一塊來用了,不知道 Linux driver 對 ATI 4350 的支援度如何,可能要先上網先來做點功課了 =]

: "如果要嘗試EXA的話,再/etc/X11/Xorg.conf(一般是這個路徑)的device section可以設定,不同顯卡的設定方式不同"
看了一下 log,就如同你說的的確是用 XAA,可以找時間來試一試,或許真的可以變得快一點 =]

p.s. 上次有在你很舊的一篇部落格文章留言,不知道有沒有發現,如果沒有可以參考一下。

茶米 提到...

呵,那篇不見了啦(不小心砍掉的)。我後來檢查桌機上的,是開XAA模式。Fglrx似乎不讓人家設定加速模式,radeon的才可以,其他的要用man driver-name來看。

Scilab的話,其實很像C,不過結尾的時候用end,多寫幾次應該就ok。

Linux fglrx對ATI 4350支援度應該算是不錯啦。一般開3D特效非常順暢,都沒什麼問題,用XAA加速就很快了。不過基本上4350不算是legacy的,建議安裝fglrx,因為新顯卡radeonhd的支援度不見的高,反而更低。另外就算開了遊戲,也都ok(只測試過魔獸爭霸3),我覺得這部分應該和windows差不多的。