Nice ve renice Komutlarını Kullanarak Linux İşlem Önceliğini Ayarlama


Bu makalede, konunun ötesinde yer alan çekirdek planlayıcı'yı (işlem planlayıcı olarak da bilinir) ve işlem önceliğini kısaca açıklayacağız. Bu kılavuzun kapsamı. Daha sonra Linux süreç yönetimine biraz dalacağız: bir programın veya komutun değiştirilmiş öncelik ile nasıl çalıştırılacağını görün ve ayrıca Linux süreçlerini çalıştırma önceliğini nasıl değiştireceğinizi görün.

Ayrıca Okuyun: Linux Süreçleri Nasıl İzlenir ve Kullanıcı Bazında Süreç Sınırları Nasıl Ayarlanır?

Linux Çekirdek Zamanlayıcısını Anlamak

Çekirdek zamanlayıcı, bir sonraki yürütülecek tüm çalıştırılabilir işlemler arasında en uygun işlemi belirleyen çekirdeğin bir birimidir; bir sistemdeki çalıştırılabilir işlemler arasında işlemci süresini ayırır. Çalıştırılabilir bir işlem yalnızca CPU zamanını bekleyen, yürütülmeye hazır olan bir işlemdir.

Zamanlayıcı, sistemdeki çalıştırılabilir işlemler arasında seçim yapmak için önceliğe dayalı bir zamanlama algoritması kullanarak Linux'ta çoklu görevin çekirdeğini oluşturur. Süreçleri en çok hak edenlerin yanı sıra CPU zamanı ihtiyacına göre sıralar.

Süreç Önceliğini ve Güzel Değeri Anlamak

Çekirdek, bir işleme eklenen planlama önceliği olan işlem önceliği de dahil olmak üzere, işlemler hakkında büyük miktarda bilgi depolar. Daha yüksek önceliğe sahip işlemler, daha düşük önceliğe sahip olanlardan önce yürütülürken, aynı önceliğe sahip işlemler ardı ardına tekrar tekrar programlanır.

Linux'ta uygulanan toplam 140 öncelik ve iki farklı öncelik aralığı vardır. Bunlardan ilki, -20 (en yüksek öncelik değeri) ile 19 (en düşük öncelik değeri) arasında değişen hoş bir değerdir (niceness) ve varsayılan 0'dır, bu kılavuzda bunu açığa çıkaracağız. Diğeri ise varsayılan olarak 1 ile 99, ardından 100 ile 139 arasında değişen gerçek zamanlı önceliktir. kullanıcı alanı içindir.

Linux'un önemli bir özelliği, daha sonra göreceğimiz gibi, süreçlerin güzel değerinin ihtiyaçlarınıza göre değiştirilmesine (arttırılmasına veya azaltılmasına) olanak tanıyan dinamik öncelik tabanlı planlamadır.

Linux Süreçlerinin Güzel Değeri Nasıl Kontrol Edilir

Süreçlerin güzel değerlerini görmek için ps, top veya htop gibi yardımcı programları kullanabiliriz.

İşlemlerin güzel değerini ps komutuyla kullanıcı tanımlı formatta görüntülemek için (burada NI sütunu işlemlerin güzelliğini gösterir).

ps -eo pid,ppid,ni,comm

Alternatif olarak, gösterildiği gibi Linux işlemlerinin güzel değerlerini görüntülemek için top veya htop yardımcı programlarını kullanabilirsiniz.

top
htop

PR veya PRI ve NI Arasındaki Fark

Yukarıdaki top ve htop çıktılarından, alıcı olarak PR ve PRI adında bir sütunun bulunduğunu fark edeceksiniz. bu da bir sürecin önceliğini gösterir.

Dolayısıyla bu şu anlama gelir:

  • NI – bir kullanıcı alanı kavramı olan nice değeridir.
  • PR veya PRI – Linux çekirdeği tarafından görüldüğü gibi, sürecin gerçek önceliğidir.
PR veya PRI Değerleri Nasıl Hesaplanır?
Total number of priorities = 140
Real time priority range(PR or PRI):  0 to 99 
User space priority range: 100 to 139

Güzel değer aralığı (NI): -20 ila 19

PR = 20 + NI
PR = 20 + (-20 to + 19)
PR = 20 + -20  to 20 + 19
PR = 0 to 39 which is same as 100 to 139.

Ancak aşağıdaki ekran görüntüsünde gösterildiği gibi bir sayı yerine rt görürseniz bu, temel olarak işlemin gerçek zamanlı planlama önceliği altında çalıştığı anlamına gelir.

Linux'ta Verilen Güzel Değere Sahip Bir Komut Nasıl Çalıştırılır

Burada bir programın veya komutun CPU kullanımının nasıl önceliklendirileceğine bakacağız. CPU'yu çok yoğun kullanan bir programınız veya göreviniz varsa ancak aynı zamanda tamamlanmasının uzun zaman alabileceğini de anlıyorsanız, nice komutunu kullanarak buna yüksek veya uygun bir öncelik ayarlayabilirsiniz.

Sözdizimi aşağıdaki gibidir:

nice -n niceness-value [command args] 
OR
nice -niceness-value [command args] 	#it’s confusing for negative values
OR
nice --adjustment=niceness-value [command args]

Önemli:

  • Hiçbir değer sağlanmazsa nice, varsayılan olarak önceliği 10 olarak ayarlar.
  • Nice olmadan çalıştırılan bir komut veya programın önceliği sıfırdır.
  • Yalnızca kök, bir komutu veya programı artırılmış veya yüksek önceliğe sahip çalıştırabilir.
  • Normal kullanıcılar yalnızca düşük öncelikli bir komutu veya programı çalıştırabilir.

Örneğin, bir programı veya komutu varsayılan öncelikle başlatmak yerine, aşağıdaki nice komutunu kullanarak onu belirli bir öncelikle başlatabilirsiniz.

sudo nice -n 5 tar -czf backup.tar.gz ./Documents/*
OR
sudo nice --adjustment=5 tar -czf backup.tar.gz ./Documents/*

Özellikle negatif nicelik değerleri için biraz kafa karıştırıcı olan üçüncü yöntemi de kullanabilirsiniz.

sudo nice -5 tar -czf backup.tar.gz  ./Documents/*

Linux'ta Bir Sürecin Zamanlama Önceliğini Değiştirme

Daha önce de belirttiğimiz gibi, Linux dinamik öncelik tabanlı planlamaya izin verir. Bu nedenle, bir program zaten çalışıyorsa, bu formdaki renice komutunu kullanarak önceliğini değiştirebilirsiniz:

renice -n  -12  -p 1055
renice -n -2  -u apache

Aşağıdaki örnek en iyi çıktıya göre, 1055 PID'li teamspe+'nin kalitesi artık -12'dir ve herkes için apache kullanıcısının sahip olduğu işlemler -2'dir.

Hala bu çıktıyı kullanarak PR=20 + NI formülünün karşılık geldiğini görebilirsiniz,

PR for ts3server = 20 + -12 = 8
PR for apache processes = 20 + -2 = 18

Renice komutuyla bir kullanıcının süreç nicelik değerlerinde yaptığınız tüm değişiklikler yalnızca bir sonraki yeniden başlatmaya kadar geçerli olur. Kalıcı varsayılan değerleri ayarlamak için sonraki bölümü okuyun.

Belirli Bir Kullanıcının İşlemlerinin Varsayılan Güzel Değeri Nasıl Ayarlanır

Belirli bir kullanıcı veya grubun varsayılan nice değerini /etc/security/limits.conf dosyasında ayarlayabilirsiniz. Birincil işlevi, PAM aracılığıyla oturum açan kullanıcılar için kaynak sınırlarını tanımlamaktır.

Bir kullanıcı için limit tanımlamaya yönelik sözdizimi aşağıdaki gibidir (ve çeşitli sütunların olası değerleri dosyada açıklanmıştır):

#<domain>   <type>  <item>  <value>

Şimdi aşağıdaki sözdizimini kullanın; burada sert - sert bağlantıları zorlamak, yumuşak ise yumuşak sınırları zorlamak anlamına gelir.

<username>  <hard|soft>  priority  <nice value>

Alternatif olarak, /etc/security/limits.d/ altında yukarıdaki ana dosyadaki ayarları geçersiz kılan bir dosya oluşturun ve bu dosyalar alfabetik sırayla okunur.

tecmint kullanıcısı için /etc/security/limits.d/tecmint-priority.conf dosyasını oluşturarak başlayın:

vi /etc/security/limits.d/tecmint-priority.conf

Ardından bu yapılandırmayı içine ekleyin:

tecmint  hard  priority  10

Dosyayı kaydedip kapatın. Şu andan itibaren, tecmint'e ait herhangi bir sürecin iyi değeri 10 ve PR değeri 30 olacak.

Daha fazla bilgi için nice ve renice'nin kılavuz sayfalarını okuyun:

man nice
man renice 

Linux süreç yönetimi ile ilgili aşağıdaki makaleleri de okumak isteyebilirsiniz.

  1. Linux'ta Çalışan Süreçler Nasıl Bulunur ve Öldürülür
  2. Linux'ta Bir Süreci Sonlandırmak için Öldürme, Pkill ve Killall Komutları Kılavuzu
  3. Sistem Kullanımı, Kesintiler Nasıl İzlenir ve Linux Sunucularında Sorun Giderilir
  4. CPUTool – Linux'ta Herhangi Bir İşlemin CPU Kullanımını Sınırlayın ve Kontrol Edin

Bu yazımızda kısaca çekirdek zamanlayıcıyı, işlem önceliğini anlattık, bir program veya komutun değiştirilmiş öncelik ile nasıl çalıştırılacağına baktık ve ayrıca aktif Linux işlemlerinin önceliğini nasıl değiştireceğimize baktık. Bu konuyla ilgili düşüncelerinizi aşağıdaki geri bildirim formunu kullanarak paylaşabilirsiniz.