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-get
perlu 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.
apt-get
tidak 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.Jawaban:
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 ).
sumber
apt
perintah, 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. Menjalankanapt
perintah denganeatmydata
sering 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)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:
Karena
apt-get
tidak 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/null
perintah untuk membuat proses tak terbatas yang menggunakan satu inti sepenuhnya.Sekarang jika kita melihat grafik dari
htop
, kita dapat melihat bahwa beban rata-rata (Avg
bar) adalah12.7%
, yang sesuai dengan satu inti yang digunakan pada 100%, yang juga 1/8 dari semua sumber daya CPU:Dapat juga dicatat bahwa perintah memiliki nilai
100%
dalamCPU%
kolom, ini karena itu relatif terhadap satu inti dan bukan untuk semua inti.sumber
/dev/zero > /dev/null
contoh yang lebih baik, karena urandom akan menghabiskan kumpulan entropi?cat /dev/zero > /dev/null
memberikan 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?Saya pikir Anda sebenarnya tidak mengukur IO%. Saya belum melihat widget Linux IO%. (Saya sangat iri dengan task manager Windows 10 :). Periksa menggunakan
iotop
perintah dan Anda akan melihat 100% IO.top
harus menunjukkan 100% di seluruhuser
+system
+iowait
, untuk nilai-nilai 100% dibagi dengan jumlah inti Anda seperti yang dijelaskan oleh AL. Saya tidak mengatakantop
itu 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 ).
sumber
iotop --only
, yang--only
pilihan hanya menunjukkan proses atau thread benar-benar melakukan I / O .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.
sumber