Memahami output dari sar pada AIX

11

Saya mencoba memahami beberapa data yang telah ditarik dari SAR. Saya punya tiga pertanyaan utama tentang ini. Pada akhirnya, saya ingin menentukan berapa banyak CPU yang menganggur pada setiap interval pengambilan sampel di sekelompok server.

  1. Banyak CPU tidak muncul di setiap entri. Apakah ini yang diharapkan dan Apa artinya sebenarnya? Apakah ini terkait dengan # 2?
  2. Ada garis yang tidak digunakan (CPU = U). The dokumentasi mengatakan "U menunjukkan seluruh sistem kapasitas yang tidak digunakan". Saya tidak dapat menemukan definisi yang tepat dari "kapasitas Tidak Terpakai di seluruh sistem" atau definisi apa pun, sungguh. Saya tidak yakin bagaimana menafsirkan garis yang mengatakan sesuatu seperti "kapasitas yang tidak digunakan adalah 70% menganggur."
  3. Terakhir, saya tidak yakin tentang bagaimana garis -atau alldihitung. Saya akan berpikir itu adalah rata-rata dari semua CPU tetapi ketika saya melakukan matematika di semua CPU, saya mendapatkan jawaban yang sangat berbeda dari apa yang ada di baris itu. Adakah yang bisa memberi tahu saya apa yang masuk ke dalam perhitungan itu? Mencermati pertanyaan terkait tentang SAR ini, tampak bahwa system-widepersentase idle adalah jumlah produk dari setiap persentase idle CPU dan nilai 'physc'. Sayangnya, saya tidak memiliki physcatau entc% (dengan asumsi ada satu) jadi saya tidak bisa memverifikasi ini dengan data saya sendiri. Jika itu benar, apakah itu berarti saya perlu physcnilai untuk benar-benar memahami persentase menganggur?

Berikut adalah beberapa contoh dari apa yang saya lihat. Ini semua dari hari yang sama.

CPU | Idle    CPU | Idle    CPU | Idle
----------    ----------    ----------
0   | 8       0   | 15      0   | 17
1   | 25      1   | 94      1   | 32
2   | 79      2   | 100     2   | 97
3   | 62      3   | 99      3   | 71
4   | 5       4   | 13      4   | 5
5   | 7       5   | 13      5   | 23
6   | 6       6   | 99      6   | 71
7   | 7       7   | 44      7   | 98
8   | 11      8   | 12      8   | 48
9   | 17      12  | 0       12  | 38
10  | 33      16  | 12      16  | 37
11  | 64      20  | 3       20  | 42
12  | 6        U  | 95       U  | 97
13  | 6        -  | 15       -  | 85
14  | 6       
15  | 6       
16  | 12      
17  | 15      
18  | 62      
19  | 69      
20  | 7       
21  | 7       
22  | 6       
23  | 7       
 U  | 80       
 -  | 15       

case 1: avg(24): 22
case 2: avg(12): 42
case 3: avg(12): 48

Data ini dihasilkan oleh skrip yang menjalankan: sar -P ALL 1 1Ini kemudian menjalankan perintah awk. Saya tidak pandai awk tetapi ini jelas bagian penting:

Saring: /System|AIX|^$|%/ {next}

Parse: {k=0;if(NR==7) k=1} {sub("^-", "all", $1); cpu=$(1+k); user=$(2+k); sys=$(3+k); io=$(4+k); idle=$(5+k)}

Ini tampaknya benar berdasarkan pada apa yang saya sedikit mengerti tentang awk dan apa yang saya lihat dari contoh output.

Jika saya berasumsi bahwa nilai yang hilang semuanya nol untuk kasus 2, rata-rata adalah 21 yang tampaknya agak konsisten dengan kasus 1. Namun, jika saya membuat asumsi untuk kasus 3, saya mendapatkan 24% yang benar-benar bertentangan dengan 85% nilai persen yang diberikan oleh sar untuk keseluruhan CPU idle.

Berikut grafik tangkapan sehari penuh (setiap 30 detik):

masukkan deskripsi gambar di sini

Ketika waktu idle 'sistem-lebar' sangat sedikit, korelasi antara idle CPU rata-rata dan idle 'sistem-lebar' hampir sempurna. Tetapi karena waktu idle 'sistem-lebar' meningkat, korelasinya menjadi jauh lebih lemah. Bekerja dengan asumsi bahwa ini adalah mesin deterministik, yang memberitahu saya bahwa data yang saya miliki tidak memberikan gambaran lengkap. Tapi seberapa peduli saya?

Saya tidak sepenuhnya mengerti mengapa beberapa CPU tidak dilaporkan pada setiap titik tetapi yang hilang tidak terdistribusi secara merata seperti terlihat pada contoh di atas. Juga dari membaca ini Redbook , saya bawa bahwa ini harus CPU logis dan bahwa tanpa physcangka, saya pikir tidak banyak yang bisa saya lakukan dengan nilai-nilai ini. Saya sudah mencoba menggunakan Unilai dalam berbagai persamaan tetapi saya belum menemukan sesuatu yang masuk akal. Bahkan tidak jelas bagi saya bahwa persentase menganggur keseluruhan dapat diambil pada nilai nominal.

CATATAN : Ada yang salah dengan pengambilan data ini dari sar adalah jawaban yang benar-benar valid untuk # 1, jika itu kasusnya harus selalu kembali.

JimmyJames
sumber
Apa perintah yang Anda jalankan untuk mendapatkan hasil itu? Itu tidak terlihat seperti sar -P ALLoutput standar .
Swiss
@Swiss Ini berasal dari skrip yang tidak saya tulis. Itu panggilan sar -P ALL 1 1dan kemudian menggunakan awk untuk keluar nomor cpu dan kemudian pengguna, sistem, IO-tunggu, dan persentase idle. Saya akan menambahkan lebih banyak info ke jawaban Anda.
JimmyJames
@ Swiss Saya mengedit contoh untuk lebih mencerminkan bagaimana hasil dari skrip.
JimmyJames
dapatkah Anda memberikan output sar -P ALLsecara langsung, bukan output dari skrip ini? Ini adalah skrip non-standar dan tidak ada yang bisa memberi tahu Anda apa yang dilakukannya tanpa melihatnya.
Swiss
@ Sayang sayangnya saya tidak bisa. Saya bisa melihat skrip dan hasilnya. Adakah sesuatu yang hilang dari uraian tentang apa yang dilakukannya yang dapat saya perjelas?
JimmyJames

Jawaban:

4

Output yang Anda berikan terlihat berbeda dari standar sar -P ALLatau sar -uoutput. Saya tidak yakin apakah Anda memformatnya dengan tangan, atau jika Anda menjalankannya melalui alat lain, tapi saya pikir ada cukup informasi di sana untuk mencari tahu.

Inilah informasi penting, yang diperoleh dari halaman manual untuk sar

Catatan: Pada mesin SMP, prosesor yang tidak memiliki aktivitas sama sekali (0,00 untuk setiap bidang) adalah prosesor yang dinonaktifkan (offline).

Karena Anda menjalankan dalam sebuah cluster, tampaknya cukup aman untuk menganggap bahwa Anda menggunakan mesin SMP.

Perhatikan bahwa dalam contoh 2 dan 3, hanya 12 dari 24 core yang melaporkan statistik. Jika Anda menganggap bahwa inti ini dinonaktifkan, seperti yang disebutkan di halaman manual, maka statistiknya masuk akal.

Mari perbarui data Anda sebagai berikut, untuk menunjukkan inti yang dinonaktifkan dengan -

0   | 8       0   | 15      0   | 17
1   | 25      1   | 94      1   | 32
2   | 79      2   | 100     2   | 97
3   | 62      3   | 99      3   | 71
4   | 5       4   | 13      4   | 5
5   | 7       5   | 13      5   | 23
6   | 6       6   | 99      6   | 71
7   | 7       7   | 44      7   | 98
8   | 11      8   | 12      8   | 48
9   | 17      9   | -       9   | -
10  | 33      10  | -       10  | -
11  | 64      11  | -       11  | -
12  | 6       12  | 0       12  | 38
13  | 6       13  | -       13  | -
14  | 6       14  | -       14  | -
15  | 6       15  | -       15  | -
16  | 12      16  | 12      16  | 37
17  | 15      17  | -       17  | -
18  | 62      18  | -       18  | -
19  | 69      19  | -       19  | -
20  | 7       20  | 3       20  | 42
21  | 7       21  | -       21  | -
22  | 6       22  | -       22  | -
23  | 7       23  | -       23  | -

Kemudian kita dapat menggunakan yang berikut ini untuk menghitung rata-rata (ini adalah oneliner cepat yang saya tulis, saya yakin sesuatu yang lebih baik dapat ditulis.)

$ awk '{idle = $3; output += idle; if (idle >= 0) {cores += 1} } END {printf "Ave idle%%: %f  Cores: %d\n", output / cores, cores }' input_file
Ave idle%: 22.208333  Cores: 24
$ awk '{idle = $6; output += idle; if (idle >= 0) {cores += 1} } END {printf "Ave idle%%: %f  Cores: %d\n", output / cores, cores }' input_file
Ave idle%: 42.000000  Cores: 12
$ awk '{idle = $9; output += idle; if (idle >= 0) {cores += 1} } END {printf "Ave idle%%: %f  Cores: %d\n", output / cores, cores }' input_file
Ave idle%: 48.250000  Cores: 12

Perhatikan bahwa jumlah inti dalam contoh 2 dan 3 adalah 12, dan rata-rata cocok dengan apa yang Anda lihat dalam output contoh Anda.

Sepertinya pada beberapa titik antara kasus pertama dan kedua Anda, setengah inti CPU Anda telah dinonaktifkan.

Ringkasan singkat tentang pertanyaan Anda:

  1. Data yang hilang mungkin berarti bahwa inti prosesor dinonaktifkan.
  2. Baris Urata-rata berbeda dari Upada halaman manual itu. Yang Udimaksud dalam halaman manual harus muncul di bawah kolom ID prosesor.
  3. Output yang Anda berikan berbeda dari saroutput standar dan tidak ada informasi yang cukup untuk menentukan apa yang mengacu pada Uatau allpada garis rata-rata. Namun angka pertama tampaknya adalah% idle pada core aktif.
Orang Swiss
sumber
"Perhatikan bahwa jumlah inti pada contoh 2 dan 3 adalah 12, dan rata-rata cocok dengan apa yang Anda lihat dalam output contoh Anda." Maaf, saya mungkin tidak jelas, saya menghitung rata-rata dari angka-angka. Itu tidak datang dari sar. Nilai Udan allberasal dari sar sebagai garis. Saya memecahkannya dalam jawaban saya karena mereka pada dasarnya berbeda dari nilai cpu, dari apa yang saya mengerti.
JimmyJames
Jika core dinonaktifkan, mengapa waktu idle 'seluruh sistem' jauh lebih sedikit dalam kasus 2 daripada dalam kasus 3? Saya berjuang untuk memahami bagaimana mereka dapat memiliki waktu idle rata-rata yang hampir sama di 12 CPU yang sama, namun waktu idle seluruh sistem menjadi sangat berbeda.
JimmyJames
Saya melihat bahwa ketika mesin berada di bawah beban konstan, saya melihat output dari setiap prosesor. Ini menyarankan kepada saya bahwa Anda benar bahwa ini dinonaktifkan. Saya hanya berjuang dengan bagaimana sistem idle terkait dengan idle dari CPU yang tidak dinonaktifkan.
JimmyJames
Saya memperbarui pertanyaan saya dengan beberapa perubahan untuk mengklarifikasi masalah. Jadi melihat kasus 2, jika 12 cpus dinonaktifkan, dan persentase sys-idle didasarkan pada semua 24,% menganggur tidak bisa pergi di bawah 50%. Jadi mengingat bahwa saya memiliki 15% itu berarti% sys idle harus mengabaikan CPU yang dinonaktifkan, kan?
JimmyJames