ขณะนี้ฉันต้องการย้ายระบบของเราจาก RHEL 5 ไปยัง RHEL 6 แต่ฉันได้พบกับอุปสรรคที่มีการใช้งาน CPU สูงอย่างไม่คาดคิดในเครื่อง RHEL 6 ดูเหมือนว่านี่อาจเป็นเพราะอย่างน้อยในบางส่วนของการใช้งานselect
เพื่อให้การนอนหลับขัดจังหวะ นี่คือตัวอย่างง่ายๆที่แสดงพฤติกรรม:
#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;
}
บนเครื่อง RHEL 5 จะอยู่ที่การใช้งาน CPU 0% แต่บนฮาร์ดแวร์เดียวกันกับ RHEL 6 ที่ติดตั้งจะใช้ CPU ประมาณ 0.5% ดังนั้นเมื่อโปรแกรม 30 ถึง 50 โปรแกรมทำงานโดยใช้select
โหมดสลีป CPU จำนวนมากโดยไม่จำเป็น
ฉันเปิดBugzillaและฉันพยายามเรียกใช้ OProfile และมันก็แสดงให้เห็นหลัก 100% สำหรับแอปพลิเคชันและเพียง 99% ใน poll_idle เมื่อดูเคอร์เนล
แนวคิดอื่น ๆ ของสิ่งที่ฉันสามารถทำได้เพื่อพยายามแยกสาเหตุของการใช้ CPU ที่สูงกว่าคืออะไร
UPDATE: ฉันพบเครื่องมือสมบูรณ์แบบและได้ผลลัพธ์ต่อไปนี้:
# 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
ดูเหมือนว่าการใช้งาน CPU ที่สูงกว่ามาจากตัวกำหนดตารางเวลา ฉันยังใช้สคริปต์ทุบตีต่อไปนี้เพื่อเริ่มต้น 100 รายการพร้อมกัน:
#!/bin/bash
for i in {1..100}
do
./test_select_small &
done
ใน RHEL 5 การใช้งาน CPU อยู่ใกล้กับ 0% แต่ใน RHEL 6 มีปริมาณการใช้งาน CPU ที่ไม่สำคัญทั้งผู้ใช้และระบบ ความคิดเห็นใด ๆ เกี่ยวกับวิธีติดตามแหล่งที่แท้จริงของสิ่งนี้และหวังว่าจะแก้ไขหรือไม่
ฉันยังลองทดสอบนี้กับ Arch Linux build และ Ubuntu 11.10 และเห็นพฤติกรรมที่คล้ายกันดังนั้นนี่จึงเป็นปัญหาเคอร์เนลบางประเภทและไม่ใช่แค่ RHEL
UPDATE2: ฉันลังเลเล็กน้อยที่จะนำเรื่องนี้ขึ้นมาเพราะฉันรู้ว่ามันเป็นเรื่องที่ถกเถียงกันมาก แต่ฉันลองใช้เคอร์เนลที่มี BFS patches บน Ubuntu 11.10 และมันก็ไม่ได้แสดงการใช้งาน CPU ของระบบที่สูงเหมือนกัน เหมือน).
มีการทดสอบที่ฉันสามารถใช้กับแต่ละคนเพื่อทดสอบว่าการใช้งาน CPU สูงนี้เป็นเพียงความแตกต่างในการบัญชีการใช้งาน CPU ที่ทำให้มันดูสูงเกินจริงหรือไม่? หรือถ้าวงจร CPU จริงถูกขโมยโดย CFS?
UPDATE3: การวิเคราะห์ที่ทำเกี่ยวกับคำถามนี้ดูเหมือนจะบ่งบอกว่าเป็นสิ่งที่เกี่ยวข้องกับตัวกำหนดตารางเวลาดังนั้นฉันจึงสร้างคำถามใหม่เพื่อหารือเกี่ยวกับผลลัพธ์
UPDATE4: ผมเพิ่มข้อมูลบางอย่างมากขึ้นในคำถามอื่น ๆ
UPDATE5: ฉันเพิ่มผลลัพธ์บางคำถามไปยังคำถามอื่นจากการทดสอบที่ง่ายขึ้น
select
หรือไม่