Değiştirirken Linux'ta masaüstü yanıt hızını artırın


15

Şimdiye kadar test ettiğim tüm GNU / Linux dağıtımları, ram dolduğunda ve sistem değişmeye başladığında, tüm masaüstü ve grafik kullanıcı arayüzünün bazen 5-10 saniye sonra beklemek zorunda kaldığım ölçüde yanıt vermeme sorunu var. fare imleci gerçekte hareket edene kadar fiziksel fareyi hareket ettirmek.

Bu, özellikle düşük ram'lı sistemlerde can sıkıcı bir davranıştır.

Masaüstü ortamı vb.Gibi bazı uygulamalara / işlere, diğer uygulamalardan daha fazla ram'da kalmanın daha yüksek bir önceliği vermenin herhangi bir yolu var mı, böylece uygulama aslında tüm belleği tutan uygulamanın masaüstü ortamından önce değiştirilmesini sağlıyor mu?

DÜZENLEME: Tüm RAM kullanıldığında durumdan bahsediyorum, böylece devre dışı değilse her zaman değiştirmeye başlayacaktır (işlemlerin rastgele öldürülmesini istemiyorum). Bu sorunu sadece düşük ram ortamlarında değil, kısmen bellek sızıntısı nedeniyle birçok VM'den dolayı masaüstü bilgisayarımdaki 8GiB ram ile de yaşadım. ZRAM, sadece sorunu geciktirdiği için bir çözüm değildir. Bu sorun için düşünebildiğim tek çözüm, bazı işlerin değiştirilmesini veya en azından çok olası olmamasını sağlayan bazı kullanıcı alanı yardımcı programı veya çekirdek API'sidir. Var olan veya planlanan böyle bir araç veya API hakkında başka bir çözüm bilen veya bilen var mı?

2. DÜZENLEME: https://aur.archlinux.org/packages/ulatencyd-git/ ve https://wiki.archlinux.org/index.php/Ulatencyd uyarınca ulatencyd yeni systemd sürümleriyle çalışmıyor gibi görünüyor . Bunun nedeni, systemd 'nin doğru anladıysam kullanıcı gruplarından tam anlamıyla kontrolleri devralması olabilir.


3
bellek gruplarını etkinleştirdiyseniz ve muhasebeyi etkinleştirdiyseniz ( cgroup_enable=memory swapaccount=1çekirdek komut satırında; bunun küçük bir performans maliyeti olduğunu unutmayın). Örnek uygulama: ulatencyd .
derobert

@derobert Harika bu tam olarak aradığım şey gibi görünüyor. Zamanım olur olmaz bunu denemeye başlayacağım.
FSMaxB

Harika, ulatencyd'in bir AUR paketi bile var, sanırım Archlinux kullanıcısı olduğum için şanslıyım.
FSMaxB

Bir wiki makalesi bile var wiki.archlinux.org/index.php/Ulatencyd
FSMaxB

Bu Q'nun daha fazla oy verebilseydim yapardım GUI'yi ve RAM'de kalması için birkaç önemli programın yanıt vermesini sağlamanın doğrudan bir yolu yok mu? Yani, linux kullanıcılarına bu seçeneği vermenin en kötü senaryosu nedir? Bilgisayar çöküyor mu? ÖNCE KİM YAPMADI? :) Bazen, yanlışlıkla çok fazla VM başlatıyorum çünkü doğru (RAM numaraları) ekleyemedim ve sonra işleri kontrol altına almak FOREVER gerektirir. GUI'ye ve belki de terminale RAM'de kalmasını söylemek doğru mudur ?! Lütfen biri cevap versin!
Damon

Yanıtlar:


1

Bildiğim kadarıyla bu Linux'a özgü bir sorun değil, SWAP (veya sanal bellek) çalışma şekli. İşletim sisteminin RAM'in aksine sabit sürücüdeki verileri araması gerekiyorsa, yavaşlar. Bu konuda yapabileceğiniz hiçbir şey yok, diske erişmek RAM'e erişmekten çok daha yavaş.

İşlemlerin değiştirilme önceliğini ayarlayamazsınız, yani verimliliği en üst düzeye çıkarmaya çalışacak olan çekirdek tarafından belirlenir, daha iyi yapamazsınız. Ne yapabilirsiniz yapmak seti bir sürecin işlemci önceliği ve bu kudreti yardımcısıdır. Sisteminiz SWAP'tan / SWAP'a okuma süresi nedeniyle alçaltılıyor, bu da CPU'nun devam etmeden önce talep eden işlem tarafından ilgili verilerin alınmasını beklemesi gerektiği anlamına geliyor. DE'nizi CPU erişimi için daha yüksek bir önceliğe sahip olacak şekilde ayarlarsanız, bu işlemlerini en üste çıkarmalı ve işleri biraz hızlandırmalıdır.

Böylece, CPU önceliği niceve renicekomutlarıyla ayarlanır :

 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.

Öncelikler -20 (en yüksek öncelik) ile 20 (en düşük öncelik) arasındadır. Çalışan bir işlemin önceliğini değiştirmek için şunları yapabilirsiniz:

renice -15 $PID

nerede $PIDolduğunu PID önceliği artırmak isteyen sürecin. Bunun pgrephangisi olduğunu bulmak için kullanabilirsiniz . Örneğin:

renice -15 $(pgrep gnome-session)

Diğer seçenek, sistemin ne zaman değiştirmeye başlayacağını belirleyen 'değişebilirliğini' ayarlamak olacaktır. 1 değerinde bir swappiness değeri, sadece bellek hatalarından kaçınmak için değiştirileceği anlamına gelir. Daha yüksek değerler, hala kullanılabilir fiziksel bellek olsa bile değişmeye başlayacağı anlamına gelir. Sisteminizin olabildiğince az değiştirilmesini sağlamak için bunu nispeten düşük bir değere ayarlayabilirsiniz. Bu satırı şuraya ekle /etc/sysctl.conf:

vm.swappiness=1

DİKKAT: Çok fazla RAM'iniz yoksa iyi bir fikir değildir, takas genellikle İyi Bir Şeydir, sisteminiz için doğru dengeyi bulmak için değerlerle biraz oynamanız gerekecektir.


Belirttiğiniz gibi, çekirdek alanında çözülebilir, bu da linux'a çok iyi olacağı anlamına gelir. Swappiness'i değiştirmek hiçbir şeyi değiştirmez, çünkü tüm RAM kullanıldığında sistem yine de değiştirir. Ve bir işlemin önceliği, bellek yönetimi hakkında hiçbir şeyi değiştirmez, ancak sadece cpu zamanlayıcısının ve cpu zamanının davranışı disk erişimini hızlandırmak için gerçekten yararlı değildir.
FSMaxB

@ FSMaxB CPU önceliği DE'ye öncelik vereceğinden yardımcı olabilir, DE'nin kendisi değiş tokuş ederse yardımcı olmaz, ancak CPU'yu tutan ve bu nedenle makineyi yavaşlatan başka bir şey varsa yardımcı olacaktır.
terdon

DE bir süre boşta kaldığında, tecrübelerime göre, bellek bittiğinde DE her zaman değiştirilir.
FSMaxB

@FSMaxB evet, DE'ler bellek domuzları olduğu için bu mantıklı. Yine de, önceliğini artırmak yardımcı olabilir, en azından programlayıcı onu geri tutmayacaktır.
terdon
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.