2008-11-20 37 views
5

Khi đo độ trễ của mạng (thời gian nhận được - thời gian nhận được tin nhắn) trong bất kỳ giao thức nào trên TCP, bạn sẽ đề xuất bộ hẹn giờ nào và tại sao? Nó có độ phân giải gì? Ưu điểm/nhược điểm khác là gì?Bộ tính giờ để đo độ trễ

Tùy chọn: cách hoạt động?

Tùy chọn: bạn sẽ KHÔNG sử dụng bộ hẹn giờ nào và tại sao?

Tôi đang tìm chủ yếu cho các giải pháp Windows/C++, nhưng nếu bạn muốn nhận xét về các hệ thống khác, vui lòng làm như vậy.

(Hiện nay chúng tôi sử dụng GetTickCount(), nhưng nó không phải là một bộ đếm thời gian rất chính xác.)

Trả lời

6

Đây là một bản sao của câu trả lời của tôi từ: C++ Timer function to provide time in nano seconds

Đối với Linux (và BSD) bạn muốn sử dụng clock_gettime().

#include <sys/time.h> 

int main() 
{ 
    timespec ts; 
    // clock_gettime(CLOCK_MONOTONIC, &ts); // Works on FreeBSD 
    clock_gettime(CLOCK_REALTIME, &ts); // Works on Linux 
} 

Đối với cửa sổ bạn muốn sử dụng QueryPerformanceCounter. Và đây là nhiều hơn trên QPC

Dường như có issue được biết với QPC trên một số chipset, vì vậy bạn có thể muốn đảm bảo rằng bạn không có chipset đó. Ngoài ra một số AMD lõi kép cũng có thể gây ra một problem. Xem bài thứ hai bởi sebbbi, nơi ông khẳng định:

QueryPerformanceCounter() và QueryPerformanceFrequency() cung cấp một độ phân giải chút tốt hơn, nhưng có vấn đề khác nhau. Ví dụ: Windows XP, tất cả CPU AMD Athlon X2 kép đều trả về máy tính của một trong số lõi "ngẫu nhiên" (PC đôi khi nhảy lùi lại một chút), trừ khi bạn cài đặt đặc biệt bộ điều khiển lõi kép AMD khắc phục sự cố. Chúng tôi không có nhận thấy bất kỳ CPU lõi kép nào khác có vấn đề tương tự (p4 kép, p4 ht, lõi kép kép, lõi 2, tứ giác).

2

Bạn nói rằng bạn sử dụng GetTickCount(), vì vậy tôi sẽ khuyên bạn hãy nhìn vào QueryPerformanceCounter() .

0

Có thực sự không thay thế cho lệnh rdtsc. Bạn không thể chắc chắn về độ phân giải mà QueryPerformanceCounter sẽ hỗ trợ. Một số có độ chi tiết rất lớn (tốc độ tăng/tần số thấp), một số không trả lại gì cả.

Thay vào đó, tôi khuyên bạn nên sử dụng lệnh rdtsc. Nó không yêu cầu bất kỳ triển khai hệ điều hành nào và trả về số chu kỳ xung nhịp nội bộ CPU đã trôi qua kể từ khi máy tính/bộ xử lý/lõi được cấp nguồn. Đối với một bộ xử lý 3 GHz là 3 tỷ gia số mỗi giây - nó không chính xác hơn thế, bây giờ phải không? Hướng dẫn này có sẵn cho x86-32 và -64 bắt đầu bằng Pentium hoặc Pentium MMX. Do đó, nó có thể truy cập được từ x86 Linux.

Có rất nhiều bài đăng về nó ở đây trên stackoverflow.com. Tôi đã tự viết một vài ...

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