ขออภัยไม่มีชื่อเสียงในการเพิ่มความคิดเห็น ดังนั้นมันจึงเป็นคำตอบที่สมบูรณ์
ขึ้นอยู่กับว่าคุณมักจะเรียกclock_gettime()
คุณควรเก็บไว้ในใจว่ามีเพียงบางส่วนของ "นาฬิกา" ที่ให้บริการโดยลินุกซ์ใน VDSO (คือไม่จำเป็นต้อง syscall ที่มีค่าใช้จ่ายทั้งหมดของหนึ่ง - ซึ่งมีเพียงเลวร้ายยิ่งเมื่อลินุกซ์เพิ่ม การป้องกันเพื่อป้องกันการโจมตีเหมือนปีศาจ)
ในขณะที่clock_gettime(CLOCK_MONOTONIC,...)
, clock_gettime(CLOCK_REALTIME,...)
และgettimeofday()
มักจะไปได้อย่างรวดเร็ว (เร่งโดย VDSO) นี้เป็นไม่จริงสำหรับเช่น CLOCK_MONOTONIC_RAW หรือใด ๆ ของนาฬิกา POSIX อื่น ๆ
สิ่งนี้สามารถเปลี่ยนแปลงได้ด้วยเวอร์ชันเคอร์เนลและสถาปัตยกรรม
แม้ว่าโปรแกรมส่วนใหญ่ไม่จำเป็นต้องให้ความสนใจกับสิ่งนี้ แต่อาจมีหนามแหลมในเวลาที่นาฬิกาเร่งโดย VDSO: หากคุณกดได้ถูกต้องเมื่อเคอร์เนลกำลังปรับปรุงพื้นที่หน่วยความจำที่ใช้ร่วมกันด้วยตัวนับสัญญาณนาฬิกาก็ต้องรอ เคอร์เนลให้เสร็จ
นี่คือ "หลักฐาน" (GitHub เพื่อป้องกันบอทจาก kernel.org):
https://github.com/torvalds/linux/commit/2aae950b21e4bc789d1fc6668faf67e8748300b7