
通常會發現 CPU 吃得滿兇的。
會發生上面那些問題可能有很多原因:
- 有可能是驅動程式的問題,因為顯示卡沒有被正確驅動造成 2D 硬體加速沒被致能。
- 也有可能是應用程式 Firefox 的問題。
- 可能是 desktop environment (如 KDE、GNOME 或 Xfce 等...) 或是 toolkit 的問題。
- 或是 X Window 系統本身的問題。
- 當然也不排除其它沒列出來的原因。
驅動程式的問題
這是有可能的,舉例來說,有重灌過 Windows 的人可能會發現剛灌完的 Windows 雖然螢幕解析度不高,可能只有 800x600 但是用起來畫面卻會鈍鈍的。一旦驅動程式灌完,即使解析度調高用起來也不會有 lag 的現象。應用程式 Firefox 的問題
沒記錯的話,曾經在 XP 下比較 Firefox 和 IE 7 捲動的流暢度,在 IE 下捲動網頁比 Firefox 流暢 (但就 JavaScript 而言,依據 CNET 的測試 IE 卻是最慢的)。但這也無可厚非,畢竟 IE 不像 Firefox 支援多種 W3C 的標準,要知道 W3C 所定的一些標準其實是很複雜的 (例如 CSS 和 DOM),相較於 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 圖型效能不佳的問題就已經被提出來了,造成問題的潛在因素包括:
- 當 X client 向 X server 發送同步化的請求時 (synchronized request),client 將訊息發送出去後需等待 server 做出回應,這時 client 的執行就會 block 住,直到取得回應或 timeout 為止。從訊息發出直到取得回應這段時間叫做 round-trip delay time (即一趟訊息往返的時間),round-trip delay time 對效能有重大的影響。除非 client 可以再開一個執行緒繼續執行下去,用類似這種方式暫時跳過等待的時間,不過這種方式會增加設計上的難度,此外若後續程式的執行與 server 傳回的回應有關,則 client 仍舊必需得到結果才能往下繼續執行。
- 當 X client 與 X server 都在同一個 CPU 或同一個核心中執行時,系統需要額外的 context switch 才能在 client 與 server 之間輪流執行各別的程式碼。
- X client 與 X server 都要對傳送的命令作格式化以及緩衝的處理,對於各種請求的回應也必需遵照 X Window 的通訊協定,造成經常性 CPU 資源的浪費 (overhead)。
- 在一些具有快取 (cache) 機制的處理器中 (例如 ARM 9),X client 與 X server 間的 context switch 會清除 (flush) 快取的內容,進一步降低執行效率。
X Window 相關後續發展
前面提到 5 點可能的問題中,第 4 點即 X Window 的問題應該算是比較嚴重且普遍存在的問題。至於其它,大部份是出自個人的懷疑,到底對效能的影響有多大可能還要很多時間去研究才能得知了。不過在網路上找到的,大部份都是在討論 X Window 架構對 GUI 的影響,所以我想這應該是目前最迫切的問題。針對 X Window 的問題,目前所找到的兩個解決方法 Wayland 與 MicroXwin 是我個人認為比較有希望的。依我個人的了解 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 應該能大幅改善當前的情況。