スワップ中のLinuxでのデスクトップの応答性を向上


15

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

これは、特に低RAMのシステムでは厄介な動作です。

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

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

第二編集: ulatencydにsystemdの新しいバージョンで動作するようには思えない、に従ってhttps://aur.archlinux.org/packages/ulatencyd-git/https://wiki.archlinux.org/index.php/Ulatencyd。これは、私が正しく理解していれば、systemdがユーザー空間の観点からcgroupの完全な制御を引き継いだためかもしれません。


3
メモリcgroupを有効にし、スワップアカウンティングを有効にしている場合、cgroups(cgroup_enable=memory swapaccount=1カーネルコマンドラインで。これにはわずかなパフォーマンスコストがあることに注意してください)。実装例:ulatencyd
デロバート

@derobertこれはまさに私が探していたもののようです。時間があればすぐにこれを試し始めます。
FSMaxB

素晴らしい、ulatencydにはAURパッケージもあります。Archlinuxユーザーであることは幸運だと思います。
FSMaxB


このQの質問にさらに賛成票を投じることができれば、私はそうします!GUIといくつかの主要なプログラムにRAMに留まるように指示する直接的な方法は本当にないので、応答性を維持しますか?つまり、Linuxユーザーにこのオプションを与える最悪のシナリオは何ですか?コンピューターがクラッシュしますか?誰が前にそれをしなかったのですか?:)時々、私は(RAM番号)を正しく追加できなかったために誤って多くのVMを起動し、その後、制御下に戻すには永遠に時間がかかることを意味します。GUIと多分端末にRAMにとどまるように言ったら、それは正しいでしょうか?!誰か、これに答えてください!
デイモン

回答:


1

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

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

そのため、CPUの優先順位はniceand 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があまりない場合、これは良い考えではありません。スワップは一般的に良いことです。システムに適切なバランスを見つけるには、値を少し試してみる必要があります。


あなたが述べているように、これはカーネル空間で解決されるかもしれません。それは、それが非常にうまくLinux特有であることを意味します。RAM全体が使用されるとシステムはとにかくスワップされるため、swappinessを変更しても何も変わりません。また、プロセスの優先順位を設定しても、メモリ管理については何も変わりませんが、CPUスケジューラとCPU時間の動作のみがディスクアクセスの高速化にはあまり役立ちません。
FSMaxB

@FSMaxB CPU優先度はDEに優先順位を付けるので役立つ場合があります。DE自体がスワップしている場合は役に立ちませんが、CPUを保持しているためマシンを遅くしている他の場合は役立ちます。
テルドン

DEがしばらくアイドル状態になっていると、私の経験では、メモリが不足するとDEは常にスワップされます。
FSMaxB

@FSMaxBええ、これはDEがメモリを大量に消費するので理にかなっています。それでも、その優先順位を上げることは助けになるかもしれません、少なくともスケジューラーはそれを控えません。
テルドン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.