Linux işlemini çok düşük bir öncelikte mi çalıştırıyorsunuz?


12

Çok önemli olmayan ama çok fazla CPU gücü tüketecek düzenli bir sürecim var ve gerçekten önemli olan başka bir süreç var, ancak çoğu zaman boşta geçiriyor, ancak bir iş aldığında gerçekten yüksek bilgi işlem gücüne ihtiyaç duyuyor

Çalışmayı denedim nice -20 ./low_priority_processve nice --20 ./high_priority_processancak düşük öncelikli, yüksek öncelikli işlem gerektiğinde önemli miktarda CPU tüketiyor, CPU gücünü kullanan başka bir işlem olduğunda gerçekten verebilecek veya hatta otomatik olarak askıya alınacak bir işlemi nasıl çalıştırabilirim


Yüksek öncelikli sürecin gerçekten ihtiyaçta olduğunu nasıl belirliyorsunuz?
muru

çok fazla iş parçacığı ortaya
çıkarır

RRYüksek öncelikli işlem için zamanlamayı kullanın .
Ramesh

@Ramesh Bu hangi olası farkı yaratacak?
Ken Sharp

Yanıtlar:


10

Cgroups'a bir göz atın , tam olarak ihtiyacınız olanı sağlamalıdır - CPU rezervasyonları (ve daha fazlası). Grupları kullanarak uygulamaların kontrol önceliğini okumayı öneririm .

Bununla birlikte, CPU'nun% 95'ini ve diğer uygulamalarınızı% 5'ini tahsis edilen bir diğerine önemli ama çoğu zaman boşta kalan süreçleri gruplandırın - gerektiğinde işleriniz için tüm gücü (neredeyse) alırsınız. güce aç süreç o zamanlar en fazla% 5 alacak. Hesaplamalı dalgalanmalar ortadan kalktığında, kalan CPU'lara tüm CPU performansı atılır. Bir avantaj olarak, gibi işlemler için özel bir grup oluşturursanız (minimum performans gereksinimleriyle) sshd, yapabileceği tüm CPU'yu almaya çalıştığınız ne olursa olsun giriş yapabilirsiniz - biraz CPU zamanı ayrılır sshd.


1
işlem grubunu değiştirmek cpulimitveya nicedeğiştirmek için bir komut var mı? çünkü eğer cgroup bir API çağrısı ise, ben pozisyonda cgroup kullanmak için bu uygulamanın herhangi bir derleme olamaz
uray

Hayır, yalnızca grup hiyerarşisini bir yere bağlar, grup başına dizinler oluşturur ve işlemlerin PID'lerini bazı dosyalara yazarsınız. Bütün bunlar kök (veya daha doğrusu uygun ayrıcalıklarla) olarak yapılmalıdır. Bazı init sistemleri ( systemden azından bazı durumlarda), init sistem arayüzünü (genellikle özel bir komut) kullanmak zorunda olan kullanıcılardan cgroups arayüzünü "çalar". Bağlantılı cevap ve wikipedia makalesini okuyun. Gerçekten mi. :)
peterph

Oh, ve ayrıca bazı koşullara bağlı olarak süreçleri gruplara ayırabilen libcgroupbir daemon ( cgrulesengd) da dahil olmak üzere gruplarla çalışmak için yardımcı programlarla birlikte gelen paket de var .
peterph

7

İşlem önceliği (iyi değer) düşükse, daha yüksek öncelikli bir işlemi kesintiye uğratmaz. Düşük öncelikli işlemi, yüksek öncelikli işlem çalışırken hala önemli miktarda CPU tükettiğinizi görmenizin nedeni, yüksek öncelikli işlemin o kadar meşgul olmamasıdır . Muhtemelen IO'yu bekliyorum. chrt -p -i 0 $PIDİşlemi daha düşük bir öncelikte çalıştırmak için kullanın nice 19 -p $PID(burada Linux hakkında konuştuğumuzu varsayarak).

chrt -p -i 0 $PID süreci "gerçek" boşta zamanlayıcı içine koyar.

http://linux.die.net/man/1/chrt


2
chrt -p -i 0 $ PID
Robert Foss

chrt hala yeterli değil. Yapmaya çalıştığım şey arka planda diğer videoları yeniden kodlarken video izlemek. Chrt kullanmak youtube videolarına yardımcı oldu, ancak çok kaliteli mkvs hala atlıyor. İstediğim, videomu normal olarak oynatmak ama yeniden kodlama için kalan her CPU gücünü kullanmak çünkü çok büyük bir toplu işim var.
Ocakta

0

Bir işlemi düşük bir işlem olarak çalıştırmak için bu örneği deneyin.

Eğer işiniz güzel ise tar xvf asets.zip

kullanım

güzel tar xvf asset.zip

Bundan sonra, sayı

süreci izlemek için üst ile unzip

ps aux | grep "katran"

Cpulimit ile belirli bir şey deneyin

wget -O cpulimit.zip https://github.com/opsengine/cpulimit/archive/master.zip
unzip cpulimit.zip
cd cpulimit-master
make
sudo cp src/cpulimit /usr/bin

cpulimit -l 50 python 0 9999999999> / dev / null ve


evet -20"düşük öncelikli" ve --20"yüksek öncelikli" nicekomut için çift tireye bak . ve evet ben güzel değeri tamamen anlıyorum, ama sorum şu, zamanlayıcı güzel değer kullanmak dışında anlatmanın bir yolu var
uray

2
@ user77710 emin misiniz? Ne Ubuntu el kitabı ne de POSIX el kitabı bu sözdizimini belirtmez. Hem kullanım -n -20, -n 20vb.
muru

evet ne olursa olsun, sözdizimi önemli değil, benim açımdan çok düşük ve çok yüksek güzel değeri
yerleşmek

2
@ user77710 NEDİR? "sözdizimi önemli değil"? O halde, nezaket değerlerini ayarladığınızdan nasıl emin olabilirsiniz?
muru

çünkü süreci htopya topda psya da her neyse güzel bir değer görebiliyorum
uray

-1

Gelecekteki gelenler için buraya tam bir örnektir niceile stres .

  1. Test makinesinde 2 CPU bulunur
$ lscpu
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              2 
On-line CPU(s) list: 0,1
Thread(s) per core:  2
...
  1. Kurulum stress:apt-get install stress
  2. 2 CPU'yu düşük öncelikli bir stres çağrısı ile meşgul edin: nice -20 stress --cpu 2
  3. CPU kullanımını aşağıdakilerle kontrol edin top:
                                                 v
                                                 v
                                                 v
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                   
15894 ubuntu    39  19    8240     96      0 R  99.7  0.0   0:06.43 stress                                                                                    
15895 ubuntu    39  19    8240     96      0 R  99.7  0.0   0:06.42 stress                                                                                    

Bu, her iki CPU'nun da dolu olduğunu gösterir.

  1. Yüksek öncelikli tek bir işlemci stres süreci başlatın: nice --20 stress --cpu 1
  2. İle cpu kullanımını tekrar kontrol edin top
                                                 v
                                                 v
                                                 v
                                                 v
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                   
15928 ubuntu    20   0    8240    100      0 R  99.7  0.0   0:24.02 stress                                                                                    
15894 ubuntu    39  19    8240     96      0 R  51.2  0.0   1:12.46 stress                                                                                    
15895 ubuntu    39  19    8240     96      0 R  48.8  0.0   1:12.35 stress                                                                                    

Bu, tek çekirdekli stres işleminin tam CPU'sunu aldığını gösterirken, düşük öncelikli işlemlerin her ikisi de kalan 1 cpu'yu paylaşıyor

  1. Öte yandan, yukarıdaki tüm stressçağrıları öldürmek ve sadece tek bir 3 süreci tetiklemek stress --cpu 3her birine% 66 CPU verecektir
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.