Saat ini saya ingin memindahkan sistem kami dari RHEL 5 ke RHEL 6, tetapi saya mengalami kesulitan dengan penggunaan CPU yang sangat tinggi pada mesin RHEL 6. Tampaknya ini mungkin disebabkan setidaknya sebagian karena penggunaan select
untuk melakukan tidur yang terputus. Berikut adalah contoh sederhana yang menunjukkan perilaku:
#include <sys/select.h>
int main()
{
timeval ts;
for (unsigned int ii=0; ii<10000; ++ii) {
ts.tv_sec = 0;
ts.tv_usec = 1000;
select(0, 0, 0, 0, &ts);
}
return 0;
}
Pada mesin RHEL 5 itu akan tetap pada penggunaan CPU 0%, tetapi pada perangkat keras yang sama dengan RHEL 6 diinstal akan menggunakan sekitar 0,5% dari CPU, jadi ketika 30 hingga 50 program berjalan menggunakan select
untuk melakukan tidur itu memakan CPU dalam jumlah besar tidak perlu.
Saya membuka Bugzilla dan saya mencoba menjalankan OProfile dan itu hanya menunjukkan 100% di utama untuk aplikasi dan lebih dari 99% di poll_idle ketika melihat kernel (saya punya idle = jajak pendapat diatur dalam opsi grub saya sehingga semuanya dapat ditangkap).
Adakah ide lain yang bisa saya lakukan untuk mencoba dan mengisolasi apa penyebab penggunaan CPU yang lebih tinggi?
UPDATE: Saya menemukan alat perf dan mendapat output berikut:
# Events: 23K cycles
#
# Overhead Command Shared Object Symbol
# ........ ....... ................... ....................................
#
13.11% test_select_sma [kernel.kallsyms] [k] find_busiest_group
5.88% test_select_sma [kernel.kallsyms] [k] schedule
5.00% test_select_sma [kernel.kallsyms] [k] system_call
3.77% test_select_sma [kernel.kallsyms] [k] copy_to_user
3.39% test_select_sma [kernel.kallsyms] [k] update_curr
3.22% test_select_sma ld-2.12.so [.] _dl_sysinfo_int80
2.83% test_select_sma [kernel.kallsyms] [k] native_sched_clock
2.72% test_select_sma [kernel.kallsyms] [k] find_next_bit
2.69% test_select_sma [kernel.kallsyms] [k] cpumask_next_and
2.58% test_select_sma [kernel.kallsyms] [k] native_write_msr_safe
2.47% test_select_sma [kernel.kallsyms] [k] sched_clock_local
2.39% test_select_sma [kernel.kallsyms] [k] read_tsc
2.26% test_select_sma [kernel.kallsyms] [k] do_select
2.13% test_select_sma [kernel.kallsyms] [k] restore_nocheck
Tampaknya penggunaan CPU lebih tinggi dari penjadwal. Saya juga menggunakan skrip bash berikut untuk memulai 100 skrip secara bersamaan:
#!/bin/bash
for i in {1..100}
do
./test_select_small &
done
Pada RHEL 5 penggunaan CPU tetap mendekati 0%, tetapi pada RHEL 6 ada jumlah non-sepele penggunaan CPU di kedua pengguna dan sistem. Ada ide tentang cara melacak sumber sebenarnya dari ini dan mudah-mudahan memperbaikinya?
Saya juga mencoba tes ini pada Arch Linux build saat ini dan Ubuntu 11.10 dan melihat perilaku yang serupa, jadi ini tampaknya merupakan beberapa jenis masalah kernel dan bukan hanya masalah RHEL.
UPDATE2: Saya agak ragu untuk membahas hal ini karena saya tahu ini adalah perdebatan besar, tapi saya mencoba kernel dengan patch BFS di Ubuntu 11.10 dan tidak menunjukkan penggunaan CPU sistem tinggi yang sama (penggunaan cpu pengguna tampak seperti sama).
Apakah ada beberapa tes yang dapat saya jalankan dengan masing-masing untuk menguji apakah penggunaan CPU yang tinggi ini hanya perbedaan dalam akuntansi penggunaan CPU yang membuatnya tampak sangat tinggi? Atau jika siklus CPU aktual dicuri oleh CFS?
UPDATE3: Analisis yang dilakukan melibatkan pertanyaan ini tampaknya menunjukkan bahwa itu adalah sesuatu yang berkaitan dengan penjadwal, jadi saya membuat pertanyaan baru untuk membahas hasilnya.
UPDATE4: Saya menambahkan beberapa informasi lagi ke pertanyaan lain .
UPDATE5: Saya menambahkan beberapa hasil ke pertanyaan lain dari tes sederhana yang masih menunjukkan masalah.
select
sana?