web-dev-qa-db-ja.com

libkwinnvidiahack4パッケージは何をしますか?

私はちょうどパッケージに出くわしました libkwinnvidiahack4 Install libkwinnvidiahack4 (そして libkwinactivenvidiahack4 Install libkwinactivenvidiahack4 )。説明から、Nvidiaバイナリグラフィックスドライバーと組み合わせてKDEウィンドウマネージャーにいくつかの「ハック」を提供することがわかります。

このパッケージには、KDEウィンドウマネージャー用のnvidiaカードで使用されるライブラリが含まれています。

このパッケージはKDEワークスペースモジュールの一部です。

ただし、この説明には実際の機能が欠けています。 KDE/Kubuntuを使用しており、Nvidiaグラフィックスドライバーをインストールしています。これらのパッケージをインストールする利点は何ですか?彼らは何をしますか?

(おそらく自動的に)libkwinnvidiahack4パッケージをインストールしましたが、何が原因なのかわかりません。

変更ログ(apt-get changelog libkwinnvidiahack4)を実行すると、kde-workspace変更ログにエントリが追加されます(そこからいくつかのスニペットを取得):

  • Libkwinnvidiahack4を独自のパッケージに移動します
  • パッケージを追加する

    • kde-window-manager-active
    • kde-window-manager-active-gles
    • libkwinactiveglutils1
    • libkwinactiveglesutils1
    • libkwinactiveeffects1abi3
    • libkwinactivenvidiahack4
  • kde-window-manager/-glesはlibkwinnvidiahack4に依存します

  • /usr/lib/libkwinnvidiahack.soをインストールしないでください。 libkwinnvidiahackに対してリンクすることは想定されていません。 kde-window-managerにはリンクできるものが何も含まれていないため、kdebase-workspace-devをkde-window-managerではなくlibkdecorations4とlibkwineffects1に依存させます。

また、これらのパッケージが追加される理由とその機能についても説明していません。

4
gertvdijk

グーグルの深刻なビットの後に私は出くわしました この投稿

このファイルの唯一の目的は、(nvidiaの)libGLよりもリンク順が遅いため、その前にダイナミックリンカーによって初期化され、libGLが気付くのに十分な時間で__GL_YIELD = NOTHINGを設定できるようにすることです。

引用が特定のM-Graesslinからのものであることを考えると、Martinはこの分野の主任メンテナーであり、確実な情報源でもあります。

確かに、ソースコードを見る

apt-get source libkwinnvidiahack4

これは実際にはkdeワークスペースモジュールです。

kwin/nvidiahack.cppは問題のソースモジュールです-それ自体が小さなモジュールです

このhackはまだ13.04にあり、コアビルドの一部であるため、はい、まだ必要であり、その目的はOpenGLコンポーネントのライブラリリンクを保証することです。 KDEの実行は、正しい機能順で行われます。

モジュールの機能に関しては、ランタイム環境変数__GL_YIELDを定義しているように見えます。

freedesktop spec から

OpenGLの歩留まり動作

NVIDIA OpenGLドライバーが続行する前に、外部状態が変化するのを待つ必要がある場合がいくつかあります。このような場合にCPU時間を過度に消費することを避けるために、ドライバーは時々譲歩し、ドライバーが待機している間にカーネルが他のプロセスを実行するようにスケジュールできるようにします。たとえば、コマンドバッファーで空き領域を待機しているときに、特定の回数の反復後に空き領域が使用可能にならない場合、ドライバーはループを続行する前に解放します。

デフォルトでは、ドライバーはこれを行うためにsched_yield()を呼び出します。ただし、これにより、CPUで時間の競合をする他の同じ優先度のプロセスがある場合、呼び出しプロセスが比較的長期間スケジュールされる可能性があります。この一例は、OpenGLベースの複合マネージャーがウィンドウを移動して再描画していて、Xサーバーがウィンドウの移動中にウィンドウを更新しようとしている場合です。これはどちらもCPUを集中的に使用する操作です。

__GL_YIELD環境変数を使用して、これらのスケジューリング問題を回避できます。この変数を使用すると、ユーザーは、ドライバーが譲歩したいときに何をすべきかを指定できます。

したがって、ハックは決して待つことはなく、常にOpenGL複合サーフェスにペイントすることです。おそらくグラフィックアーティファクトが表示されないようにするためです。

5
fossfreedom