Mengapa apt-get TIDAK menggunakan 100% (cpu ATAU disk ATAU bersih)?

21

Mengapa apt-get tidak menggunakan 100% dari cpu, disk, atau jaringan - atau bahkan dekat dengannya? Bahkan pada sistem yang lambat (Raspberry Pi 2+) saya mendapatkan paling banyak beban CPU 30%. Saya hanya berpikir bahwa itu sedang dibatasi secara artifisial, atau harus memaksimalkan sesuatu saat bekerja ... atau harus dapat melakukan hal itu lebih cepat daripada yang dilakukannya.

Sunting: Saya hanya mengukur secara kasar melalui monitor cpu / disk / net di panel saya, dan aplikasi System Monitor dari Ubuntu MATE.

Tolong jelaskan mengapa saya salah. :-)

Pembaruan: Saya mengerti bahwa apt-getperlu mengambil pembaruannya (dan mungkin dibatasi oleh bandwidth upstream / penyedia). Tapi begitu "membongkar" dan seterusnya, penggunaan CPU setidaknya harus naik (jika tidak maksimal). Di workstation rumahan saya yang cukup baik, yang menggunakan SSD untuk drive utamanya, dan ramdisk untuk / tmp, ini bukan masalahnya.

Atau mungkin saya perlu melihat lebih dekat.

KlaymenDK
sumber
Bagaimana Anda mengukur beban disk dan jaringan?
JigglyNaga
1
Disk IO sama seperti IO jaringan. Itu masih akan memblokir aplikasi, mencegahnya menggunakan CPU. Sayangnya, apt-gettidak terlalu pandai mengoptimalkan ini. Saya membayangkan itu bisa diinstal saat unduhan sehingga pada saat unduhan Anda selesai sebagian besar muatan Anda sudah bisa diinstal, tetapi, sayangnya, tidak. Bagaimanapun, instalasi mandiri kebanyakan hanya mengekstraksi data ke disk. Operasi-operasi itu secara inheren terikat IO, dan tidak banyak yang bisa dilakukan selain menunggu pada drive disk untuk selesai membaca atau menulis.
PSkocik
Bagaimana Anda mendapatkan nomor beban CPU 30% ?
AL
1
@PSkocik "Saya bayangkan itu bisa diinstal saat unduhan" apt-get just unduhan, dpkg instal. Dan dpkg lebih pintar daripada apt-get agar sekelompok paket harus diinstal, yang mungkin tidak sama dengan apt-get yang mengunduhnya.
Braiam
Perhatikan bahwa aplikasi yang 100% terikat CPU untuk setengah tanda centang, dan kemudian 100% terikat IO untuk setengah lainnya tidak akan muncul yang terikat CPU atau terikat IO ,.
MSalters

Jawaban:

28

Aplikasi hanya akan memaksimalkan CPU jika aplikasi terikat dengan CPU . Sebuah aplikasi terikat CPU jika dapat dengan cepat mendapatkan semua datanya dan yang ditunggu adalah prosesor untuk memproses data.

apt-get, di sisi lain, terikat IO . Itu berarti dapat memproses datanya agak cepat, tetapi memuat data (dari disk atau dari jaringan) membutuhkan waktu, di mana prosesor dapat melakukan hal-hal lain atau duduk diam jika tidak ada proses lain yang membutuhkannya.

Biasanya, semua permintaan IO (disk, jaringan) lambat, dan kapan pun utas aplikasi membuat satu, kernel akan menghapusnya dari prosesor sampai data dimuat ke dalam kernel (= permintaan IO ini disebut permintaan pemblokiran ).

PSkocik
sumber
6
Dengan aptperintah, ini diperparah oleh fakta bahwa banyak file terbuka dalam mode sinkronisasi, atau dengan flushes yang sering diminta untuk menjamin data pada disk tetap dalam keadaan yang konsisten karena sistem crash dapat memiliki konsekuensi serius jika tidak. Menjalankan aptperintah dengan eatmydatasering dapat secara dramatis meningkatkan kinerja dengan mengorbankan keandalan yang berkurang (belum lagi bahwa layanan yang dimulai sebagai bagian dari instalasi paket akan mewarisi pengaturan eatmydata)
Stéphane Chazelas
Lol pada titik terakhir :). Apakah ada yang punya angka untuk eatmydata sejak komit 2010 di bugs.debian.org/cgi-bin/bugreport.cgi?bug=578635 ? Saya tidak tahu apakah "secara dramatis" masih kata yang tepat.
sourcejedi
Ah, mungkin itu (setidaknya pada beberapa penyedia cloud) bugs.launchpad.net/cloud-init/+bug/1236531/comments/6
sourcejedi
1
@ sourcejedi Pada Raspberry Pi2 dengan kartu SD yang relatif high-end (tapi masih kartu SD, bukan SSD high-end), saya menganggap "secara dramatis" sedikit meremehkan. Performa dpkg pada media flash benar-benar menyebalkan.
Gilles 'SANGAT berhenti menjadi jahat'
1
Jika disk-IO-terikat maka mengapa tidak menggunakan bandwidth disk 100%?
user253751
15

Bahkan pada sistem yang lambat (Raspberry Pi 2+) saya mendapatkan paling banyak beban CPU 30%.

Raspberry Pi 2+ memiliki 4 core. Untuk beberapa alat pemantauan, penggunaan 100% sesuai dengan semua inti telah digunakan pada 100%. Jika hanya satu inti dalam prosesor kode quad yang digunakan, beban CPU adalah 25%. 30% beban CPU yang Anda sebutkan kira-kira satu inti digunakan pada 100% sementara beberapa proses berjalan pada core lainnya:

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

Karena apt-gettidak multi-threaded, itu tidak akan pernah menggunakan lebih dari satu prosesor, yang merupakan 25% dari semua sumber daya CPU.


Berikut adalah contoh pada mesin 8 core (4 core dengan Hyper-Threading ) saya menjalankan Ubuntu, saya meluncurkan satu utas dengan cat /dev/zero > /dev/nullperintah untuk membuat proses tak terbatas yang menggunakan satu inti sepenuhnya.

Sekarang jika kita melihat grafik dari htop, kita dapat melihat bahwa beban rata-rata ( Avgbar) adalah 12.7%, yang sesuai dengan satu inti yang digunakan pada 100%, yang juga 1/8 dari semua sumber daya CPU:

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

htop

Dapat juga dicatat bahwa perintah memiliki nilai 100%dalam CPU%kolom, ini karena itu relatif terhadap satu inti dan bukan untuk semua inti.

AL
sumber
+1,% penggunaan yang dekat dengan kelipatan (100 / nCores) harus selalu memicu pemeriksaan lebih lanjut. Ini dapat diperiksa - dan memang dihalangi - dengan menggunakan monitor yang dapat menunjukkan penggunaan per inti, di mana 0 <= the% <= 100 * nCores
underscore_d
Bukan /dev/zero > /dev/nullcontoh yang lebih baik, karena urandom akan menghabiskan kumpulan entropi?
Filip Haglund
@FilipHaglund cat /dev/zero > /dev/nullmemberikan hasil yang sama, saya tidak tahu perangkat itu, terima kasih. urandom akan menghabiskan kumpulan entropi. Saya tidak tahu kumpulan entropi, bagaimana itu bisa menjadi masalah?
AL
1
Ketika program menggunakan crypto, mereka membutuhkan data acak untuk menghasilkan kunci enkripsi yang aman. Komputer menghasilkan entropi dengan menonton mouse bergerak di antara hal-hal lain. Ada generator nomor acak perangkat keras, tetapi kebanyakan komputer tidak memilikinya. Jika semua entropi habis, kode yang memerlukan entropi aman harus menunggu lebih banyak untuk dihasilkan. Urandom akan menggunakan bit yang benar-benar acak jika tersedia, atau mengembalikan bit acak yang kurang aman.
Filip Haglund
Ketika program menggunakan crypto Bahkan jika saya pikir tidak ada yang akan melakukan benchmark CPU sambil menghasilkan kunci acak, saya telah memperbarui jawaban saya sebagai tindakan pencegahan.
AL
2

Saya pikir Anda sebenarnya tidak mengukur IO%. Saya belum melihat widget Linux IO%. (Saya sangat iri dengan task manager Windows 10 :). Periksa menggunakan iotopperintah dan Anda akan melihat 100% IO.

topharus menunjukkan 100% di seluruh user+ system+ iowait, untuk nilai-nilai 100% dibagi dengan jumlah inti Anda seperti yang dijelaskan oleh AL. Saya tidak mengatakan topitu 100% bermanfaat, tetapi ini bisa menjadi alat all-around yang sangat berguna untuk dipelajari.

Throughput akan lebih rendah dari maksimum, karena Anda membongkar banyak file kecil, alias "IO acak". Ada juga beberapa sinkronisasi disk / cache flushes, meskipun sejak 2010 di Linux hanya ada beberapa dari mereka untuk setiap paket yang diinstal. ( Dulu satu per file ).

sourcejedi
sumber
Gunakan iotop --only, yang --onlypilihan hanya menunjukkan proses atau thread benar-benar melakukan I / O .
AL
4
iostat, dstat, di atas ... akan menampilkan penggunaan per disk drive tanpa memerlukan hak istimewa. Ini untuk pemanfaatan per tugas yang Anda butuhkan hak istimewa
Stéphane Chazelas
@ StéphaneChazelas benar sekali. Poin yang saya coba buat (ninja sunting) adalah OP menyebutkan beberapa alat GUI. Dan alat GUI tertentu yang pernah saya lihat, seperti Gnome System Monitor, menunjukkan throughput tetapi tidak ada IO%.
sourcejedi
2

Sebenarnya, permintaan IO / Jaringan sangat lambat dibandingkan dengan operasi CPU. Ini berarti bahwa ketika kartu jaringan Anda mengambil data, atau disk Anda menulis data ini, CPU Anda tidak melakukan apa-apa (untuk proses ini).

Jika hard drive Anda lebih cepat dari koneksi jaringan Anda (yang mungkin benar), itu tidak akan menulis lebih banyak daripada yang diterima.

Akhirnya, persentase jaringan sesuai dengan maksimum penggunaan kartu jaringan , bukan koneksi. Jadi Anda mungkin memiliki adapter jaringan 1Gb / s, Anda benar-benar tidak mungkin memiliki koneksi internet yang mencapai bandwidth ini.

Aymeric R.
sumber