2013-06-28 41 views
0

我正在尋找一種方法來控制在Linux上使用X.Org時哪些應用程序可以使用GPU和視頻內存。控制對X.Org中圖形卡的訪問

的設置:

我正在開發一個嵌入式Linux系統中的幾個3D遊戲都在引導啓動。我開始了所有的比賽,以便他們能夠在他們之間快速切換。

想法是一次只能看到1個遊戲。這是通過映射活動遊戲的窗口和取消映射不活動窗口的窗口來完成的。即「最小化」不活動遊戲的窗口。

問題:

活動性遊戲的性能是不是最佳的,所以它似乎不活動的遊戲仍然佔用資源的顯卡,即使窗戶未映射從X.Org 。

我迄今爲止嘗試:

我目前的解決辦法是暫停不活動的遊戲,只有具備積極的一個被收回。然而,這並不是最佳的,因爲我想與非活動遊戲進行IPC通信。

問題:

我怎麼能禁止一個Linux應用程序訪問的顯卡,使得它們的繪製調用顯卡被簡單地忽略。

回答

2

如果您的遊戲開始緩慢,現在是時候優化它。

如果一個遊戲處於非活動狀態並且沒有使用GPU資源,驅動程序最終會將所有OpenGL資源從GPU內存中交換出來,因此當遊戲恢復時,它會經歷一些明顯的延遲,當OpenGL驅動程序將資源交換回GPU時。

只需解開一個窗口是不夠的,你還必須停止主遊戲循環,以便它們不佔用CPU內存。

我怎麼能禁止的顯卡的Linux X11應用程序的訪問,使得它們的繪製調用顯卡被簡單地忽略。

使用當代X11和驅動程序:切換到另一個VT,而不是運行它的X11服務器。您可以啓動任意數量的X11服務器,但在任何給定時間,只有一個服務器可以在顯示器VT上處於活動狀態。

請注意,如果正確的驅動程序體系結構和驅動程序也不活動的VT可能訪問GPU,但現在情況並非如此。

+0

選擇遊戲後必須在1秒內顯示遊戲,所以我們不能依靠從磁盤加載遊戲數據。從我們迄今爲止的實驗中,將資源交換回GPU內存足以滿足這一要求。 – uldall

+0

使用[cpulimit](https://github.com/opsengine/cpulimit)處理CPU週期的消耗。 – uldall

+0

擁有多個X服務器可能是一個解決方案,但這對於窗口管理員來說,在覆蓋窗口,彈出窗口等方面處理起來很亂。 – uldall