Xin lỗi, không có danh tiếng để thêm điều này như là một bình luận. Vì vậy, nó đi như một câu trả lời bổ sung.
Tùy thuộc vào tần suất bạn sẽ gọi clock_gettime()
, bạn nên nhớ rằng chỉ một số "đồng hồ" được Linux cung cấp trong VDSO (nghĩa là không yêu cầu một tòa nhà với tất cả chi phí của một - điều này chỉ trở nên tồi tệ hơn khi thêm Linux phòng thủ để bảo vệ chống lại các cuộc tấn công giống như Spectre).
Mặc dù clock_gettime(CLOCK_MONOTONIC,...)
, clock_gettime(CLOCK_REALTIME,...)
và gettimeofday()
luôn luôn cực kỳ nhanh (được tăng tốc bởi VDSO), nhưng điều này không phải là đúng với, ví dụ CLOCK_MONOTONIC_RAW hoặc bất kỳ đồng hồ POSIX nào khác.
Điều này có thể thay đổi với phiên bản kernel và kiến trúc.
Mặc dù hầu hết các chương trình không cần chú ý đến điều này, nhưng có thể có sự tăng vọt về độ trễ trong đồng hồ được tăng tốc bởi VDSO: nếu bạn nhấn chúng ngay khi kernel đang cập nhật vùng nhớ chung với bộ đếm đồng hồ, thì phải chờ nhân để hoàn thành.
Đây là "bằng chứng" (GitHub, để tránh bot khỏi kernel.org):
https://github.com/torvalds/linux/commit/2aae950b21e4bc789d1fc6668faf67e8748300b7