GNU/Linux >> Belajar Linux >  >> Linux

Cara yang tepat untuk menginterpretasikan beban sistem pada prosesor 4 inti 8 utas

Solusi 1:

Tidak pasti, tapi kebanyakan di 1.00*n_cpu .

Muatan berarti sebagai berikut:jika ada banyak proses pada sistem cpu tunggal, proses tersebut tampaknya berjalan paralel. Tapi itu tidak benar. Apa yang praktis terjadi:kernel memberikan 1/100 detik untuk suatu proses, dan kemudian menghentikan prosesnya dengan interupsi. Dan berikan 1/100 detik berikutnya untuk proses lain.

Secara praktis pertanyaan, "proses mana yang harus mendapatkan interval 1/100 detik berikutnya?", Akan diputuskan oleh heuristik yang kompleks. Namanya adalah tugas penjadwalan .

Tentu saja, proses yang diblokir, misalnya menunggu data yang sedang dibaca dari disk, dikecualikan dari penjadwalan tugas ini.

What load says:berapa banyak proses yang saat ini menunggu kerangka waktu 1/100 detik berikutnya. Tentu saja, itu adalah nilai rata-rata. Ini karena Anda dapat melihat banyak angka dalam cat /proc/loadavg .

Situasi dalam sistem multi-cpu sedikit lebih kompleks. Ada banyak cpu, yang kerangka waktunya dapat diberikan ke banyak proses. Itu membuat penjadwalan tugas sedikit - tetapi tidak terlalu banyak - lebih kompleks. Tapi situasinya sama.

Kernel itu cerdas, ia mencoba untuk berbagi sumber daya sistem untuk efisiensi yang optimal, dan di dekat itu (ada hal-hal pengoptimalan kecil, misalnya lebih baik jika suatu proses akan dijalankan dalam waktu yang paling lama pada waktu yang sama. cpu karena pertimbangan caching, tetapi tidak masalah di sana). Ini karena jika kita memuat 8, itu artinya:sebenarnya ada 8 proses yang menunggu time slice berikutnya. Jika kita memiliki 8 cpu, kita dapat memberikan potongan waktu ini ke cpus satu-ke-satu, dan dengan demikian sistem kita akan digunakan secara optimal.

Jika Anda melihat top , Anda dapat melihat bahwa jumlah proses yang berjalan sebenarnya sangat rendah:proses tersebut ditandai dengan R di sana. Bahkan pada sistem yang tidak benar-benar hardcore sering kali di bawah 5. Ini sebagian karena proses yang menunggu datanya dari disk atau dari jaringan juga ditangguhkan (ditandai dengan S di atas). Beban hanya menunjukkan penggunaan cpu.

Ada alat untuk mengukur beban disk juga, sepertinya mereka setidaknya penting sebagai pemantauan penggunaan cpu, tapi entah bagaimana itu tidak begitu dikenal di dunia sysadmin profesional kami.

Alat Windows sering membagi beban dengan jumlah cpu yang sebenarnya. Hal ini menyebabkan beberapa administrator sistem windows profesional menggunakan beban sistem dalam pengertian CPU yang dibagi-bagi ini. Mereka tidak benar dan mungkin akan lebih bahagia setelah Anda menjelaskan hal ini kepada mereka.

CPU multicore praktis adalah beberapa CPU pada chip silikon yang sama. Tidak ada perbedaan.

Dalam kasus CPU hyperthreaded ada efek samping yang menarik:memuat cpu membuat pasangan hyperthreaded lebih lambat. Namun hal ini terjadi pada lapisan yang lebih dalam yang ditangani oleh penjadwalan tugas normal, meskipun ini dapat (dan seharusnya) memengaruhi keputusan pemindahan proses dari penjadwal.

Namun dari sudut pandang kami saat ini - apa yang menentukan beban sistem - tidak masalah juga.

Solusi 2:

Memuat rata-rata tidak berarti apa yang Anda pikirkan. Ini bukan tentang penggunaan CPU instan, melainkan berapa banyak proses yang menunggu untuk dijalankan. Biasanya itu karena banyak hal yang menginginkan CPU, tetapi tidak selalu. Penyebab umum adalah proses menunggu IO - disk atau jaringan.

Coba jalankan ps -e v dan mencari bendera status proses.

state    The state is given by a sequence of characters, for example, "RWNA". The      first character indicates the run state of the process:
D    Marks a process in disk (or other short term, uninterruptible) wait.
I    Marks a process that is idle (sleeping for longer than about 20 seconds).  
L    Marks a process that is waiting to acquire a lock.
R    Marks a runnable process.
S    Marks a process that is sleeping for less than about 20 seconds.
T    Marks a stopped process.
W    Marks an idle interrupt thread.
Z    Marks a dead process (a "zombie").

Ini dari ps halaman manual, sehingga Anda dapat menemukan detail lebih lanjut di sana - R dan D proses mungkin menarik.

Anda dapat berakhir dengan 'lonjakan' rata-rata beban karena berbagai alasan, jadi itu sebenarnya bukan ukuran yang baik untuk apa pun selain 'apakah sistem ini sibuk'. Terjebak dalam memetakan rata-rata beban ke inti CPU tidak akan ada gunanya bagi Anda.

Solusi 3:

Karena hyperthreading sebenarnya bukan inti ke-2, hyperthreading tidak akan pernah membutuhkan inti hingga 200%, tetapi akan membutuhkan lebih dari 100% untuk beban kerja tertentu.

Jadi beban maksimum Anda tidak diketahui antara kira-kira 4 dan 6

(tentu saja ini bisa naik lebih tinggi saat kelebihan beban karena sebenarnya menghitung proses yang dapat dijalankan, terutama saat menunggu IO)

Solusi 4:

Pada sistem Linux tidak hanya proses dalam antrian runnable yang dihitung untuk menghitung beban tetapi juga proses dalam kondisi tidur yang tidak dapat terputus, wikipedia, menyebabkan beban melonjak ketika Anda memiliki banyak proses menunggu disk.

Solusi 5:

Saya melakukan beberapa eksperimen pada sistem Xeon 24-core kami (2 soket x 12 core). Beban maksimum dalam hal ini adalah 48.0 karena cara Linux menyiapkan hyperthreading.

Namun, Anda tidak mendapatkan throughput yang setara dengan 48 core. Apa yang saya amati adalah Anda mendapatkan sekitar 90% dari throughput dalam 24 prosesor logis pertama, yaitu jika beban berjalan ke 24.0. Kemudian Anda mendapatkan throughput tambahan sekitar 10% untuk 24 prosesor logis yang tersisa (beban berjalan hingga 48.0). Cara lain untuk memikirkannya adalah jika Anda menjalankan 48 utas pada 24 inti, Anda akan mendapatkan peningkatan sekitar 10-20% jika Anda mengaktifkan hyperthreading versus tidak. Ini bukan peningkatan 100% seperti yang disiratkan oleh orang pemasaran.

Misalnya, salah satu cara menguji pengamatan ini adalah memiliki proses yang menjalankan 48 utas (katakanlah menggunakan model TBB atau handrolled threading), lalu jalankan

time numactl --physcpubind=0-23  ./myprocess

lalu jalankan

time numactl --physcpubind=0-47  ./myprocess

Yang terakhir harus berjalan dalam waktu sekitar 10-20% lebih sedikit. Jika proses Anda sangat diblokir I/O, maka hasilnya mungkin berbeda.

Yang pertama akan menonaktifkan hyperthreading dengan hanya mengizinkan utas berjalan pada satu prosesor logis (dari setiap inti), sedangkan yang terakhir akan mengaktifkan hyperthreading dengan mengizinkan utas berjalan pada 2 prosesor logis (dari setiap inti).

Muatan dalam kedua kasus harus dilaporkan sebagai 48.0 ... yang seperti yang Anda lihat sangat menyesatkan.


Linux
  1. per proses direktori dump inti yang dapat dikonfigurasi

  2. Apa cara yang tepat untuk menggunakan inotify?

  3. Apa cara yang tepat untuk memasukkan tab di sed?

  1. Apa yang terjadi ketika sebuah benang bercabang?

  2. Menafsirkan nama sensor

  3. Apakah ada cara untuk mendengarkan proses?

  1. Cara Portabel (posix) Untuk Mencapai Substitusi Proses?

  2. Periksa Beban Sistem di Linux

  3. Jumlah prosesor di /proc/cpuinfo