web-dev-qa-db-ja.com

スワップ中にLinuxのデスクトップの応答性を向上させる

これまでにテストしたすべてのGNU/Linuxディストリビューションには、RAMがいっぱいになり、システムがスワッピングを開始するたびに、デスクトップとグラフィカルユーザーインターフェイス全体が地獄のように応答しなくなり、その後約5〜10秒待たなければならないという問題があります。マウスポインタが実際に移動するまで、物理マウスを移動しました。

これは、特にRAMが少ないシステムでは、一種の厄介な動作です。

デスクトップ環境などの一部のアプリケーション/ジョブに、他のアプリケーションよりもRAMに留まる優先度を高くして、実際にすべてのメモリを占有しているアプリケーションがデスクトップ環境などの前にスワップされるようにする方法はありますか?

EDIT:RAM全体が使用されているため、スワップが開始されると常にスワップが開始される場合について話します。が無効になっていない(プロセスがランダムに強制終了されないようにする)この問題は、RAMが少ない環境だけでなく、デスクトップマシンのRAMが8GiBの場合にも発生しました。これは、一部にはメモリリークが原因で多くのVMが原因です。 。ZRAMは、問題を遅らせるだけなので、解決策ではありません。この問題について私が考えることができる唯一の解決策は、特定のジョブがまったくスワップされないようにするか、少なくともそれを非常に起こりにくくすることを可能にするユーザースペースユーティリティまたはカーネルAPIです。 。誰かが別の解決策を知っているか、存在するか計画されているそのようなツールまたはAPIについて何か知っていますか?

2番目の編集:ulatencydは、新しいバージョンのsystemdでは機能しないようです-によると https://aur.archlinux.org/packages/ulatencyd-git/ および https://wiki.archlinux.org/index.php/Ulatencyd 。これは、私が正しく理解していれば、systemdがユーザースペースの観点からcgroupの完全な制御を引き継いだためである可能性があります。

15
FSMaxB

私の知る限り、これはLinuxに固有の問題ではなく、SWAP(または仮想メモリ)の動作方法です。 OSがRAMではなくハードドライブ内のデータを検索する必要がある場合、速度が低下します。それについてあなたができることは何もありません。ディスクへのアクセスはRAMへのアクセスよりもはるかに遅いです。

プロセスがスワップされる優先順位を設定することはできません。これは、効率を最大化しようとするカーネルによって決定されます。それを上手く行うことはできません。あなたができることは、プロセスのCPU優先度を設定することであり、それが役立つかもしれません。 SWAPとの間の読み取りに時間がかかるため、システムのローダウンが発生しています。これは、CPUが続行する前に、データを要求するプロセスによって関連データが取得されるのを待つ必要があることを意味します。 DEのCPUアクセスの優先度を高く設定すると、その操作が最上位にプッシュされ、処理速度が少し向上します。

したがって、CPUの優先度はNiceおよびreniceコマンドで設定されます。

 Renice alters the scheduling priority of one or more running processes.
 The following who parameters are interpreted as process ID's, process
 group ID's, or user names.  Renice'ing a process group causes all pro‐
 cesses in the process group to have their scheduling priority altered.
 Renice'ing a user causes all processes owned by the user to have their
 scheduling priority altered.  By default, the processes to be affected
 are specified by their process ID's.

優先度は-20(最高の優先度)から20(最低の優先度)になります。実行中のプロセスの優先度を変更するには、次のようにします。

renice -15 $PID

ここで、$PIDは、優先度を上げたいプロセスの [〜#〜] pid [〜#〜] です。 pgrepを使用して、それがどれであるかを確認できます。例えば:

renice -15 $(pgrep gnome-session)

もう1つのオプションは、システムの 'swappiness' を設定することです。これにより、いつスワップを開始するかが決まります。スワップピネス値1は、メモリ不足エラーを回避するためにのみスワップすることを意味します。値が大きいほど、使用可能な物理メモリがまだある場合でもスワップが開始されます。これを比較的低い値に設定して、システムのスワップをできるだけ少なくすることができます。この行を/etc/sysctl.confに追加します。

vm.swappiness=1

注意:RAMがあまりない場合、これは良い考えではありません。スワップは一般的に良いことです。システムに適切なバランスを見つけるために、値を少し試してみる必要があります。

1
terdon