Apt-get neden% 100 kullanmıyor (cpu VEYA disk VEYA net)?


21

Neden yok apt-get değil hatta kendisine yakın ya - ya cpu, disk veya ağ% 100'ünü kullanmak? Yavaş bir sistemde bile (Raspberry Pi 2+) En fazla% 30 CPU yükü alıyorum. Sadece yapay olarak boğulduğunu ya da çalışırken bir şeyi maksimuma çıkarması gerektiğini düşünüyorum ... ya da işini ondan daha hızlı yapabilmesi gerekiyor.

Düzenleme: Sadece panelimdeki cpu / disk / net monitörleri ve Ubuntu MATE'in Sistem Monitörü uygulamasıyla kabaca ölçüm yapıyorum.

Lütfen neden yanlış olduğumu açıkla. :-)

Güncelleme: Güncellemelerini alması apt-getgerektiğini biliyorum (ve yukarı akış / sağlayıcı bant genişliği ile sınırlı olabilir). Ancak bir kez "ambalajın açılması" ve böyle bir şey olursa, CPU kullanımı en azından yukarı çıkarılmalıdır (en fazla değilse). Ana sürücüsü için bir SSD ve / tmp için bir ramdisk kullanan oldukça iyi ev iş istasyonumda, durum böyle değil.

Ya da daha yakından bakmak gerekiyor.


Disk ve ağ yükünü nasıl ölçüyorsunuz?
JigglyNaga

1
Disk GÇ olsa da, ağ GÇ gibi. Hala uygulamayı engeller ve CPU'yu kullanmasını engeller. Ne yazık ki, apt-getbunu optimize etmede özellikle iyi değil. İndirme sırasında yüklenebileceğini hayal ediyorum, böylece indirme işleminiz bittiğinde yükünüzün çoğu yüklenebilir, ancak ne yazık ki kurulmaz. Her durumda, bağımsız kurulumlar çoğunlukla yalnızca diske veri ayıklamaktır. Bu işlemler doğal olarak IO'ya bağlıdır ve yapılacak veya yapacak başka bir şey yoktur, ancak okuma veya yazma işlemini bitirmek için disk sürücüsünde bekleyin.
PSkocik

% 30 CPU yük numarasını nasıl aldınız ?
AL

1
@PSkocik "İndirirken görebileceğini hayal ediyorum" apt-get sadece indirme, dpkg yükler. Ve dpkg, apt-get'in indirdikleri ile aynı olmayabilir, bir demet paketin kurulması gerektiği sırayla apt-get'den daha akıllıdır.
Braiam

% 100 CPU olan bir uygulamanın yarım tik için ve ardından diğer yarısı için% 100 G / Ç'ye bağlı uygulamanın ne CPU'ya ne de IO'ya bağlı görünmeyeceğini unutmayın.
MSalters

Yanıtlar:


28

Uygulamalarda uygulama ise CPU tek çıkış maksimum olacak CPU bağlı . Bir uygulama olan CPU bağımlı hızla verilerini ve ne bekler tüm sağlayabilirseniz verileri işlemek işlemcisi.

apt-getÖte yandan, IO sınırlıdır . Bu, verilerini oldukça hızlı bir şekilde işleyebileceği anlamına gelir, ancak verilerin yüklenmesi (diskten veya ağdan) zaman alır, bu sırada işlemcinin başka şeyler yapması veya başka bir işlem gerekmediğinde boşta durması gerekir.

Genellikle, tüm GÇ istekleri (disk, ağ) yavaştır ve bir uygulama iş parçacığı ne zaman bir tane yaparsa, çekirdek çekirdeğe veri yükleninceye kadar çekirdekten işlemciden kaldırılır (= bu GÇ istekleri engelleme istekleri olarak adlandırılır ).


6
İle aptkomutlar, birçok dosya bir sistem çökmesi aksi ciddi sonuçlara yol açabileceği olarak tutarlı bir durumda, disk kalır üzerinde teminat verilerine istenen senkronizasyon modunda açık ya da diske sık açık basması ile gerçeğiyle ağırlaştırılmış oluyor. aptKomutları çalıştırma eatmydata, güvenilirliği azaltarak (genellikle paket kurulumlarının bir parçası olarak başlatılan servislerin eatmydata ayarlarını devralacak olduğunu söyleyerek değil) performansı önemli ölçüde artırabilir
Stéphane Chazelas

Son noktada Lol :). 2010'da taahhüt beri herkes eatmydata için numara var mı bugs.debian.org/cgi-bin/bugreport.cgi?bug=578635 ? "Dramatik" hala doğru kelime olup olmadığını bilmiyorum.
sourcejedi

Ah, belki de (en azından bazı bulut sağlayıcılarda) bugs.launchpad.net/cloud-init/+bug/1236531/comments/6
sourcejedi

1
@sourcejedi Nispeten üst seviye bir SD kartlı (ancak yine de bir SD kart, üst düzey bir SSD olmayan) bir Raspberry Pi2'de, biraz dramatik olduğunu düşünüyorum. Dpkg'ın flash ortamdaki performansı gerçekten berbat.
Gilles 'SO- kötülük'

1
Disk-IO bağlıysa neden% 100 disk bant genişliği kullanmıyor?
user253751

15

Yavaş bir sistemde bile (Raspberry Pi 2+) En fazla% 30 CPU yükü alıyorum.

Raspberry Pi 2+, 4 çekirdeğe sahiptir. Bazı izleme araçları için% 100 kullanım,% 100 oranında kullanılan tüm çekirdeklere karşılık gelir. Bir dörtlü kod işlemcisinde yalnızca bir çekirdek kullanılırsa, CPU yükü% 25'tir. Bahsettiğiniz% 30 CPU yükü, bazı işlemler diğer çekirdeklerde çalışırken kabaca% 100'de kullanılan bir çekirdektir:

(100% on one core out of 4 = 100 / 4 = 25%) + some processes ≃ 30%

Yana apt-getçoklu iş parçacıklı değil, tüm CPU kaynaklarını% 25 olan birden fazla işlemci, kullanmaz.


İşte Ubuntu çalıştıran 8 çekirdeğimdeki ( Hyper-Threading'li 4 çekirdekli ) makineme bir örnek, cat /dev/zero > /dev/nullbir çekirdeği tamamen kullanan sonsuz bir süreç oluşturmak için komutla bir iş parçacığı başlattım .

Şimdi grafiğe htopbakarsak, % 100'de kullanılan bir çekirdeğe karşılık gelen ortalama yükün ( Avgbar) olduğunu görüyoruz 12.7%, bu da tüm CPU kaynaklarının 1 / 8'idir:

(100% = 100 / 8 = 12.5%) + some background processes ≃ 12.7%.

htop

Aynı zamanda, bir komut bir değere sahip olduğu not edilebilir 100%olarak CPU%bu olup çekirdek her bir çekirdek göre çünkü sütun, bu.


+1, katına yakın bir kullanım% (100 / nCores) her zaman daha fazla inceleme tetiklemelidir. Bu kontrol edilebilir - ve gerçekten de önlenir
underscore_d

/dev/zero > /dev/nullUrandom entropi havuzunu tüketeceğinden daha iyi bir örnek değil mi?
Filip Haglund

@FilipHaglund cat /dev/zero > /dev/nullaynı sonucu veriyor, bu cihazı bilmiyordum, teşekkürler. urandom entropi havuzunu tüketecek Entropi havuzunu bilmiyorum, bu nasıl bir sorun olabilir?
AL

1
Programlar kripto kullandığında, güvenli şifreleme anahtarları oluşturmak için rastgele verilere ihtiyaç duyarlar. Bilgisayar, farenin diğer şeyler arasında hareketini izleyerek entropi oluşturur. Donanım rasgele sayı üreteçleri var, ancak çoğu bilgisayarda bunlara sahip değil. Entropinin tamamı kullanılmışsa, güvenli bir entropi gerektiren kodun daha fazla üretilmesi için beklemesi gerekir. Urandom, mümkünse gerçekten rastgele bitler kullanacak veya daha az güvenli rastgele bitler döndürecektir.
Filip Haglund

Programlar kripto kullandığında Rastgele bir anahtar oluştururken kimsenin CPU kıyaslama gerçekleştirmeyeceğini düşünmeme rağmen, cevabımı önlem olarak güncelledim.
AL

2

Bence aslında% IO ölçmüyorsunuz. Bir Linux IO% widget'ı görmedim. (Windows 10 görev yöneticisini çok kıskanıyorum :). iotopKomutu kullanarak kontrol edin, % 100 G / Ç göreceksiniz.

topgenelinde% 100 göstermelidir user+ system+ iowait, demiyorum AL I tarafından tarif edildiği gibi çekirdek sayısı bölü% 100 değerleri için top% 100 yararlı, ancak öğrenmek için gerçekten yararlı bir çepeçevre bir araç olabilir.

Verimlilik maksimumdan daha düşük olacaktır, çünkü birçok küçük dosyayı açıyorsunuz, yani "random IO". Ayrıca bazı disk senkronizasyonu / önbellek boşalması da var, ancak Linux'ta 2010'dan beri kurulu her paket için bunlardan sadece birkaçı var. ( Dosya başına bir tane kullanılır ).


Kullanın iotop --only, --onlyseçenek yalnızca gerçekten G / Ç yapan işlemleri veya konuları gösterir .
AL

4
iostat, dstat, atop ... ayrıcalıklara ihtiyaç duymadan disk kullanımı başına gösterilecektir. Ayrıcalıklara ihtiyaç duyduğunuz görev başına kullanım içindir
Stéphane Chazelas

@ StéphaneChazelas kesinlikle doğru. Yapmaya çalıştığım nokta (ninja düzenleme), OP'nin birkaç tane GUI aracı olduğunu belirtmesidir. Gördüğüm özel GUI araçları, Gnome System Monitor gibi, verim gösteriyor ancak% IO göstermiyor.
sourcejedi

2

Aslında, IO / Ağ istekleri CPU operasyonlarına kıyasla çok yavaş. Bu, ağ kartınız veri alırken veya diskiniz bu verileri yazarken, CPU'nuz kesinlikle hiçbir şey yapmaz (bu işlem için).

Sabit sürücünüz ağ bağlantınızdan daha hızlıysa (muhtemelen doğrudur), aldığıdan fazlasını yazmaz.

Son olarak, ağ yüzdesi , bağlantıya değil, mümkün olan maksimum ağ kartı kullanımına karşılık gelir . Yani 1 Gb / s ağ bağdaştırıcınız olabilir, bu bant genişliğine ulaşan bir internet bağlantınız olması pek mümkün değildir.

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.