2010年11月25日 星期四

XBMC@Ubuntu - 閒置時CPU負載問題

利用XBMC來建立HTPC是個簡單且快速的方案,而且重點是可以讓你家的『PC』瞬間提昇成高級數位家電,衝著這點就很值得了XD。


我手邊的機器是ASUS ES5000,前陣子很流行的農場主人機^^!,配有處理器:Intel Celeron 220(1.2GHz) /記憶體:2GB DDR2 667/硬碟:500GB,ATI HD3450 256M獨立顯示晶片,機器原本是沒有附帶作業系統的,當然你說這難不倒有決心要養小動物的主人…沒錯啦,但我還是決定安裝開源的Ubuntu,算是對開源碼社群盡一份心力。


我的Ubuntu版本是10.04,有裝ATI Driver,跑起XBMC還算順,在一切看似沒問題的時候,我突然發現XBMC在閒置時竟然會讓CPU維持在30~40%的使用率,這真是個奇怪的問題,什麼事都沒做就這樣了,要是跑高畫質的影片還得了。


在逛遍各大討論區(包含XBMC的討論區)後得到的解法如下:


XBMC:設定下面,『Vertical Blank Sync』 選項放在 『Let the driver decide』


amdcccle:3D options,『VSYNC』選項放在『Alyways On』


調整過後,我的CPU閒置時負載降到約20%左右,雖然不是很滿意,但尚可接受啦。


在一堆討論串中我終於看到原因了,這跟XBMC的設計原理有關。一般的程式(例如:小作家)是採事件驅動(event-driven)的方式設計的,意思是一般狀況下程式會維持在等待的狀態,直到作業系統給予事件(event)時(例如:敲滑鼠)程式才會有所回應,所以小作家在閒置時並不會消耗CPU資源。
但XBMC閒置時會一直維持在執行迴圈(Execution-Loop)中,不斷的重繪介面(GUI)或是監控滑鼠及鍵盤的動作,目的是讓你得到較高的螢幕更新率(frame rates)。由此推論,在Windows下面應該也會有這個問題。


故這其實不是個Bug,只是資源如何運用的問題(可能跟XBMC原本是用在XBOX上面有關,XBOX是個遊戲機,故很有可能採Loop的方式執行它的程式),似乎也有人提到可以藉由設定將這個動作完全關閉,但會使管理畫面變得斷續, 但這部份我就沒有深究了。

沒有留言:

張貼留言