2012-12-19 21 views
12

Trong các bộ xử lý hỗ trợ bộ đếm thời gian đóng dấu (TSC) Linux cung cấp tùy chọn hẹn giờ có độ phân giải cao bằng TSC. Từ những gì tôi hiểu TSC là một đăng ký có thể được đọc nhưng không cung cấp tùy chọn để ngắt CPU ở tốc độ được cấu hình. Vì vậy, đối với thế hệ ngắt hẹn giờ trong Linux vẫn phải dựa vào I/O APIC (trên x86) với giá trị HZ thường được đặt là 1000 hoặc 250.Việc sử dụng TSC làm nguồn đồng hồ có cải thiện tính năng định thời và lên lịch chi tiết không?

Mặc dù TSC cung cấp tem thời gian ở mức độ chi tiết nhỏ thứ hai sẽ vẫn ở 4ms hoặc 1ms tùy thuộc vào giá trị HZ. Sự hiểu biết này có đúng không? Hoặc có tùy chọn để cải thiện độ chi tiết của bộ tính giờ bằng TSC không?

+0

Nếu bạn muốn nhận được một số sự kiện timer rất thường xuyên với độ chính xác cao, đó là một nhiệm vụ cho các hệ thống thời gian thực. Hành vi tương tự có thể đạt được bằng cách sử dụng các cơ chế thời gian thực của nhân hoặc chơi với ái lực của các quy trình trên các hệ thống đa lõi (vì vậy quá trình bạn cần là thời gian thực được lên kế hoạch chỉ một lõi và các quy trình khác không thể chạy trên lõi đó). –

Trả lời

9

Trong hạt nhân Linux 2.6 mặc định, Bộ điều khiển ngắt lập trình (PIT) (có sẵn trên tất cả máy tính) được sử dụng làm bộ đếm giờ hệ thống [1]. PIT, như tên cho thấy, có thể được lập trình (thông thường, khi khởi động hạt nhân) để làm gián đoạn CPU với tốc độ được xác định trước. Tỷ lệ được xác định trước này là giá trị HZ mà bạn tham chiếu, là giá trị được biên dịch tĩnh bằng tham số biên dịch hạt nhân CONFIG_HZ. [2] Vì vậy, bạn có thể sửa đổi CONFIG_HZ tại thời gian biên dịch và PIT sẽ bắt đầu ngắt CPU ở tần số nói trên. Tuy nhiên, hãy nhớ rằng PIT được điều khiển bên trong bởi một đồng hồ có khoảng 1.193 MHZ, do đó, thiết lập CONFIG_HZ lớn hơn giá trị này sẽ không phải là một ý tưởng tuyệt vời. Và như đã chỉ ra trong [3]

bộ đếm thời gian của APIC địa phương (Advanded Programmable Interrupt Controller) trong các hệ thống đa xử được sử dụng cho interprocessor đồng bộ

và đi bằng cách giải thích tại [1] , Tôi tin rằng PIT của nó (và không phải là APIC địa phương) được gắn với giá trị HZ (ít nhất là cho đến hạt nhân 2.6).

Bây giờ, đến với câu hỏi của bạn, theo lý thuyết, ý tưởng của bạn có vẻ chính xác. Bộ đếm dấu thời gian như APIC và PIT cục bộ, là một nguồn thời gian khác [1]. Trong [4], bạn tìm thấy một xác nhận về điều này.

Linux có thể tận dụng lợi thế của thanh ghi này để có được số đo thời gian chính xác hơn được phân phối theo Thời gian lập trình Bộ hẹn giờ. Để làm điều này, Linux phải xác định tần số tín hiệu đồng hồ trong khi khởi tạo hệ thống. Thực tế, vì tần số này không phải là được khai báo khi biên dịch hạt nhân, cùng một hình ảnh hạt nhân có thể chạy trên CPU có đồng hồ có thể đánh dấu ở bất kỳ tần số nào.

Tuy nhiên, hãy nhớ rằng Bộ đếm thời gian được tăng lên ở mọi chu kỳ xung nhịp CPU. Và điều này đưa chúng ta đến những cạm bẫy phức tạp liên quan đến một bộ đếm liên quan đến chu kỳ xung nhịp CPU [5]. Một ví dụ là các CPU hiện đại có thể thay đổi tốc độ xung nhịp CPU của chúng để tiết kiệm điện và điều này sẽ ảnh hưởng đến giá trị được lưu trong bộ đếm thời gian. Nếu điều đó xảy ra, bạn có thể ước tính hiệu quả mà nó có thể có trên các phép đo thời gian của bạn. Ngoài ra, một hạt nhân hoàn toàn nhàn rỗi có thể gọi lệnh HALT dừng hoàn toàn bộ xử lý cho đến khi nhận được ngắt bên ngoài. Tất cả thời gian này, TSC sẽ không bao giờ được tăng lên và bạn sẽ mất một số 'gia tăng' quý giá, mà nếu không sẽ làm cho các phép đo của bạn chính xác hơn. Tóm lại, việc xử lý TSC là một vấn đề khó, đặc biệt là không thể sử dụng như một ngắt có thể lập trình được.

  1. Robert Love, LKD --3rd Edition.(Chương 11)
  2. http://lxr.linux.no/linux+v2.6.31/arch/x86/include/asm/param.h#L5
  3. http://www.6test.edu.cn/~lujx/linux_networking/0131777203_ch02lev1sec7.html
  4. http://www.makelinux.net/books/ulk3/understandlk-CHP-6-SECT-1
  5. http://lwn.net/Articles/209101/
+2

Câu trả lời hay. Có một biến chứng thêm: trên một hệ thống đa CPU, các lõi riêng lẻ có các mã riêng của chúng, có thể có hoặc không đồng bộ, tùy thuộc vào kiến ​​trúc, BIOS và giai đoạn của mặt trăng. Trong các kiến ​​trúc mà ** làm ** có đồng bộ đồng bộ, hàm RDTSC là một điểm * *, có hiệu quả là một trình thu thập thông tin. Rất không được khuyến khích. – wildplasser

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