สาเหตุการแยกการใช้งาน CPU สูงขึ้นใน RHEL 6 กับ RHEL 5


9

ขณะนี้ฉันต้องการย้ายระบบของเราจาก 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: ฉันเพิ่มผลลัพธ์บางคำถามไปยังคำถามอื่นจากการทดสอบที่ง่ายขึ้น


ดูเหมือนว่า RedHat จะระบุสิ่งนี้กับ GLibC คุณมองหาการเปลี่ยนแปลงรหัสที่เกี่ยวข้องselectหรือไม่
นิลส์

การจัดหมวดหมู่ glibc ทำโดยฉันเมื่อฉันส่ง bugzilla
Dave Johansen

ฟังดูสมเหตุสมผลสำหรับฉัน (แทนที่จะเป็นปัญหาเคอร์เนล) คุณได้รับผลลัพธ์ที่คล้ายกันกับการนอนหลับพร้อมกันหลายครั้งหรือไม่? glibc-versions จาก Ubuntu 11.10, Arch Linux และ RHEL6 คืออะไร
นิลส์

ใช่ผลลัพธ์เดียวกันกับทั้งแบบสำรวจความคิดเห็นและการนอนหลับเป็นเวลา 1 มิลลิวินาที เท่าที่ glibc, RHEL 5 คือ 2.5, RHEL 6 คือ 2.12, Ubuntu 11.10 คือ 2.13, และฉันเชื่อว่าส่วนโค้งคือ 2.15 แต่ฉันต้องตรวจสอบ
Dave Johansen

ดูเหมือนว่าคุณจะพบคำตอบสำหรับคำถามต้นฉบับนี้ด้วยตัวเอง โพสต์เป็นคำตอบที่นี่และรับคะแนนของคุณ!
นิลส์

คำตอบ:


1

คุณถาม:

มีการทดสอบที่ฉันสามารถใช้กับแต่ละคนเพื่อทดสอบว่าการใช้งาน CPU สูงนี้เป็นเพียงความแตกต่างในการบัญชีการใช้งาน CPU ที่ทำให้มันดูสูงเกินจริงหรือไม่? หรือถ้าวงจร CPU จริงถูกขโมยโดย CFS?

จะเป็นอย่างไรถ้าคุณรันเกณฑ์มาตรฐานของ CPU ในขณะที่คุณกำลังเรียกใช้test_select_smallโปรแกรมของคุณและดูว่าประสิทธิภาพนั้นเปลี่ยนแปลงไปตามเวอร์ชันของโฮสต์ระบบปฏิบัติการหรือไม่

มีตัวเลือกมากมาย: คำแนะนำแบบคลาสสิกมักจะ "ใช้บางสิ่งที่แสดงถึงประเภทของการโหลดที่คุณมี" แต่เด็กที่เท่ห์ก็มักจะใช้povray


1
ฉันคิดว่านั่นเป็นความคิดที่ฉันพูดถึง คุณมีคำแนะนำเกี่ยวกับแอพเบนช์มาร์กที่ให้ผลการจับเวลาที่สอดคล้องกันซึ่งฉันสามารถใช้ได้หรือไม่?
Dave Johansen

@DaveJohansen - เพิ่มบันทึกใน povray
ckhan

โชคไม่ดีที่มันมาพร้อมกับ RHEL มันอาจใช้เวลาอย่างน้อยหนึ่งหรือสองสัปดาห์ในการรับซอฟต์แวร์ใด ๆ ในระบบเหล่านี้ ฉันทำโปรแกรมทดสอบเล็ก ๆ ของฉันและสร้างคำถามใหม่เพื่อหารือเกี่ยวกับผลลัพธ์
Dave Johansen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.