2015-07-04 20 views
8

Tôi đang thực hiện các thử nghiệm khác nhau với một hộp Ubuntu chạy hạt nhân 3.5.7. Tôi hâm nóng mã điểm chuẩn của mình lên 10 triệu lần lặp và sau đó tiến hành đến 90 triệu lần lặp. Tuy nhiên, tôi thấy người jitter sau:Có thể loại bỏ jitter ra khỏi máy Linux khi chạy chương trình C++ đơn luồng không?

Average: 242 nanos | Min Time: 230 nanos | Max Time: 4717 nanos 
0.75 = avg: 240, max: 246 
0.9 = avg: 241, max: 247 
0.99 = avg: 242, max: 250 
0.999 = avg: 242, max: 251 
0.9999 = avg: 242, max: 517 
0.99999 = avg: 242, max: **2109** <=== 
0.999999 = avg: 242, max: **3724** <=== 
0.9999999 = avg: 242, max: **4424** <=== 

Tôi thấy thời gian xấu trên 0,01% số lần lặp lại của mình. Có thể tạo hạt nhân Linux thực sự theo thời gian thực không? Có cái gì khác xảy ra trong hạt nhân mà tôi không thể kiểm soát?

for(int i = 0; i < iterations; i++) { 

    long start = get_nano_ts(&ts); 

    for(int j = 0; j < load; j++) { 
     long p = (i % 8) * (i % 16); 
     if (i % 2 == 0) { 
      x += p; 
     } else { 
      x -= p; 
     } 
    } 

    long end = get_nano_ts(&ts); 

    int res = end - start; 

    // store the results, calculate the percentiles, averages, min, max, etc. 
} 

Trả lời

6

Câu trả lời ngắn gọn là không. Bạn sẽ phải xóa bỏ mọi thứ khác mà hạt nhân cung cấp để đảm bảo mã của bạn nhận được chu kỳ nhiệm vụ 100%.

Nếu bạn muốn bảo đảm độc quyền trên CPU, bạn cần sử dụng Hệ điều hành thời gian thực cho phép bạn tắt tất cả các ngắt. Một cái gì đó như FreeRTOS hoặc VXWorks.

Hạt nhân tickless được thiết kế để tiết kiệm điện khi không hoạt động. Nó không được thiết kế để vô hiệu hóa ngắt hoàn toàn. Tất cả các thiết bị IO đều liên tục yêu cầu ngắt. Nếu bạn vô hiệu hóa tất cả các trình điều khiển IO và chạy tickless và vô hiệu hóa tất cả các dịch vụ mà có thể theo định kỳ thức dậy, sau đó bạn có thể nhận được gần jitter hoạt động miễn phí. Nhưng sau đó bạn sẽ có một viên gạch.

Các vấn đề liên quan