Nguyên nhân cô lập của việc sử dụng CPU cao hơn trên RHEL 6 so với RHEL 5


9

Hiện tại tôi đang tìm cách chuyển hệ thống của chúng tôi từ RHEL 5 sang RHEL 6, nhưng tôi đã gặp phải một trở ngại với việc sử dụng CPU cao bất ngờ trên các máy của RHEL 6. Dường như điều này có thể là do ít nhất là một phần do việc sử dụng selectđể thực hiện một giấc ngủ gián đoạn. Đây là một ví dụ đơn giản cho thấy hành vi:

#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;
}

Trên máy RHEL 5, nó sẽ giữ mức sử dụng CPU 0%, nhưng trên cùng một phần cứng với cài đặt RHEL 6, nó sẽ sử dụng khoảng 0,5% CPU, do đó, khi 30 đến 50 chương trình đang chạy selectđể thực hiện chế độ ngủ, nó sẽ ngốn số lượng lớn CPU không cần thiết.

Tôi đã mở một Bugzilla và tôi đã thử chạy OProfile và nó chỉ hiển thị chính 100% cho ứng dụng và chỉ hơn 99% trong poll_idle khi nhìn vào kernel (tôi có idle = poll set trong các tùy chọn grub của tôi để mọi thứ có thể được chụp).

Bất kỳ ý tưởng nào khác về những gì tôi có thể làm để thử và cô lập nguyên nhân của việc sử dụng CPU cao hơn là gì?

CẬP NHẬT: Tôi tìm thấy công cụ hoàn hảo và có đầu ra sau:

# 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

Có vẻ như việc sử dụng CPU cao hơn là từ bộ lập lịch. Tôi cũng đã sử dụng tập lệnh bash sau đây để khởi động cùng lúc 100 tập lệnh này:

#!/bin/bash

for i in {1..100}
do
  ./test_select_small &
done

Trên RHEL 5, mức sử dụng CPU vẫn ở mức gần 0%, nhưng trên RHEL 6 có một lượng sử dụng CPU không hề nhỏ trong cả người dùng và hệ thống. Bất kỳ ý tưởng về làm thế nào để theo dõi nguồn gốc thực sự của điều này và hy vọng sửa chữa nó?

Tôi cũng đã thử nghiệm thử nghiệm này trên bản dựng Arch Linux hiện tại và Ubuntu 11.10 và thấy hành vi tương tự, vì vậy đây có vẻ là một số loại vấn đề hạt nhân và không chỉ là vấn đề của RHEL.

CẬP NHẬT2: Tôi ngần ngại một chút để đưa ra điều này vì tôi biết rằng đó là một cuộc tranh luận lớn, nhưng tôi đã thử một hạt nhân với các bản vá BFS trên Ubuntu 11.10 và nó không hiển thị cách sử dụng CPU hệ thống cao (dường như việc sử dụng cpu của người dùng giống nhau).

Có một số thử nghiệm tôi có thể chạy với từng người trong số họ để kiểm tra xem việc sử dụng CPU cao này chỉ là một sự khác biệt trong kế toán sử dụng CPU đang làm cho nó trông cao một cách giả tạo? Hoặc nếu chu kỳ CPU thực tế đang bị CFS đánh cắp?

CẬP NHẬT3: Phân tích được thực hiện liên quan đến câu hỏi này dường như chỉ ra rằng đó là một cái gì đó liên quan đến công cụ lên lịch, vì vậy tôi đã tạo một câu hỏi mới để thảo luận về kết quả.

CẬP NHẬT4: Tôi đã thêm một số thông tin cho câu hỏi khác .

CẬP NHẬT5: Tôi đã thêm một số kết quả cho câu hỏi khác từ một bài kiểm tra đơn giản hơn mà vẫn thể hiện vấn đề.


Có vẻ như RedHat đã xác định chính xác điều này với GLibC. Bạn đã tìm kiếm các thay đổi mã liên quan đến selectđó?
Nils

Việc phân loại glibc được thực hiện bởi tôi khi tôi gửi bugzilla ban đầu.
Dave Johansen

Nghe có vẻ hợp lý với tôi (chứ không phải là một vấn đề Kernel). Bạn có nhận được kết quả tương tự với nhiều giấc ngủ đồng thời? Các phiên bản glibc từ Ubuntu 11.10, Arch Linux và RHEL6 là gì?
Nils

Có, kết quả tương tự với cả cuộc thăm dò và ngủ trong 1 ms. Theo như glibc, RHEL 5 là 2,5, RHEL 6 là 2,12, Ubuntu 11.10 là 2,13 và tôi tin rằng vòm là 2,15 nhưng tôi phải kiểm tra.
Dave Johansen

Có vẻ như bạn đã tìm thấy câu trả lời cho câu hỏi ban đầu này. Gửi nó như câu trả lời ở đây và kiếm điểm của bạn cho nó!
Nils

Câu trả lời:


1

Bạn hỏi:

Có một số thử nghiệm tôi có thể chạy với từng người trong số họ để kiểm tra xem việc sử dụng CPU cao này chỉ là một sự khác biệt trong kế toán sử dụng CPU đang làm cho nó trông cao một cách giả tạo? Hoặc nếu chu kỳ CPU thực tế đang bị CFS đánh cắp?

Điều gì sẽ xảy ra nếu bạn chạy điểm chuẩn CPU trong khi bạn đang chạy test_select_smallchương trình của mình và xem hiệu suất của nó có thay đổi hay không tùy thuộc vào phiên bản HĐH máy chủ?

Có rất nhiều sự lựa chọn: lời khuyên cổ điển luôn là "sử dụng thứ gì đó đại diện cho loại tải bạn sẽ có". Nhưng những đứa trẻ tuyệt vời luôn chỉ sử dụng POVray


1
Tôi nghĩ đó là ý tưởng mà tôi đã đề cập. Bạn có đề xuất về một ứng dụng điểm chuẩn như vậy mang lại kết quả thời gian nhất quán mà tôi có thể sử dụng không?
Dave Johansen

@DaveJohansen - thêm ghi chú về
POVray

Thật không may, trừ khi nó đi kèm với RHEL, có thể mất ít nhất một hoặc hai tuần để có được bất kỳ phần mềm nào trên các hệ thống này. Tôi đã thực hiện chương trình thử nghiệm nhỏ của riêng mình và tạo một câu hỏi mới để thảo luận về kết quả.
Dave Johansen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.