glxgearsの垂直同期を無効にする


87

Linux 3Dアクセラレーションが実際に機能しているかどうかを確認する必要がある場合があります(glxinfo出力以外)。これは、glxgearsツールによってすばやく実行できます。ただし、FPSは多くの場合、ディスプレイの垂直リフレッシュレート(つまり60 fps)に制限されます。そのため、ソフトウェアレンダリングでも最新のCPUで60FPS glxgearを簡単に生成できるため、ツールは多かれ少なかれ役に立たなくなります。

これに対する迅速で簡単な解決策を得るのはかなり難しいと思いました。私は自分の質問に答えます。うまくいけば、それはあなたの時間を節約します。

回答:


120

vblank_mode環境変数は、トリックを行います。その後、最新のハードウェアで数百FPSを取得する必要があります。そして、結果を他の人と比較できるようになりました。

$>   vblank_mode=0 glxgears

3
まさに私が探していたもの。リフレッシュレートである59.984FPSを取得していました。設定vblank_mode=0OpenBSD5.6を実行している古いInteli965ビデオドライバーで1375.257FPSを取得しています。
Clint Pachl 2015年

34
これはMesaオープンソースビデオドライバーでのみ機能することを言及する価値があるでしょう
ali_m 2015

1
MesaでRadeon / Intelハイブリッドを使用して私のために動作します
Mark K Cowan 2016

この種の動作は動作しますが、コンピューター全体がフリーズし、マシンに
個別の

75

NVIDIAクローズドソースドライバーを使用して__GL_SYNC_TO_VBLANKいる場合は、環境変数を使用して、垂直同期モードをオンザフライで変更できます。

~$ __GL_SYNC_TO_VBLANK=1 glxgears
Running synchronized to the vertical refresh.  The framerate should be
approximately the same as the monitor refresh rate.
299 frames in 5.0 seconds = 59.631 FPS

~$ __GL_SYNC_TO_VBLANK=0 glxgears
123259 frames in 5.0 seconds = 24651.678 FPS

これは、346.46NVIDIAドライバーを使用するUbuntu14.04で機能します。


また、Ubuntu 16.04、387.26NVIDIAドライバーでも動作します。
AlejoBernardin18年

すべてのマシンで同様の結果が得られるようです。それらはすべて2万FPSを少し上回っています。これはNvidiaカードの制限ですか?
アーロンフランケ2018年

私はGTX1050に47000 FPSを得た
drescherjm

Ubuntu18.04のGTX1050Tiでは13kFPSで動作しました。
fegemo

JetsonNanoでも動作します。約2650FPSを取得します。
robotrovsky

29

IntelグラフィックスおよびAMD / ATIオープンソースグラフィックスドライバーの場合

/etc/X11/xorg.conf次のいずれかのディレクティブが含まれている「デバイス」セクションを見つけます。

  • Driver "intel"
  • Driver "radeon"
  • Driver "fglrx"

そして、そのセクションに次の行を追加します。

Option     "SwapbuffersWait"       "false"

そして、vblank_mode環境変数を次のように設定してアプリケーションを実行します0

$ vblank_mode=0 glxgears

独自のNvidiaドライバーを使用したNvidiaグラフィックスの場合

$ echo "0/SyncToVBlank=0" >> ~/.nvidia-settings-rc

nvidia-settingsオプションをオフにすることで、GUIで同じ変更を行うことができますX Screen 0 / OpenGL Settings / Sync to VBlank。または、~/.nvidia-settings-rcファイルを変更せずに設定をテストしたい場合は、次のようにすることができます。

$ nvidia-settings --load-config-only --assign="SyncToVBlank=0"  # disable vertical sync
$ glxgears  # test it out
$ nvidia-settings --load-config-only  # restore your original vertical sync setting

1
Nvidiaの場合はnvidia-settings --load-config-only --assign="SyncToVBlank=0"、Xディスプレイの設定を変更するだけで実行できます(構成ファイルの変更やGUIの実行は避けてください)。実行後、実行しglxgearsて構成nvidia-settings --load-config-only設定を復元できます。これは、実行中のXディスプレイ(つまり、シェルだけでなく)の永続的な設定であるため、おそらく実行する必要があります。
マイケルクレブス2014

13

他の答えをすべてまとめると、次のコマンドラインが機能します。

env vblank_mode=0 __GL_SYNC_TO_VBLANK=0 glxgears

これには、MesaドライバーとNVidiaドライバーの両方で機能し、構成ファイルを変更する必要がないという利点があります。


6

nvidia-settings([OpenGL設定]タブ)の[VBlankに同期]チェックボックスを無効にすると、うまくいきます。


5

バンブルビーを使用して、Intelカードとnvidiaカードで機能するソリューションを見つけました。

> export vblank_mode = 0
glxgears
...
optirun glxgears
...
export vblank_mode = 1


2

Intelドライバーの場合、この方法もあります

垂直同期を無効にする(VSYNC)

Intelドライバーは、垂直同期にトリプルバッファリングを使用します。これにより、完全なパフォーマンスが可能になり、ティアリングが回避されます。垂直同期をオフにするには(ベンチマークなど)、ホームディレクトリで次の.drircを使用します。

<device screen="0" driver="dri2">
    <application name="Default">
        <option name="vblank_mode" value="0"/>
    </application>
</device>

3
これはリンクのみの回答です。いくつかのドキュメントへのリンクはすべてうまくいっていますが、それ自体で答えを構成するには十分ではありません(リンクが死ぬ、外部でホストされているページが変更されるなど)。回答の要点をまとめていただけますか?
ali_m 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.