Linux 时钟源之 TSC:软硬件原理、使用场景、已知问题(2024)

💡 原文中文,约8800字,阅读约需21分钟。
📝

内容提要

本文介绍了Linux时钟源TSC的软硬件知识,包括计算机组件的运行频率、时钟源、CPU频率提升、x86架构的寄存器、TSC的作用和挑战、TSC的改进、查看和监控TSC相关信息等。文章指出TSC只是一个计数器,记录CPU启动以来的cycles次数,不稳定性因素较多,不推荐用作时间度量。文章还提到了BIOS设置、BIOS SMI handler、SMI中断风暴和虚拟机TSC不稳等问题。

🎯

关键要点

  • 介绍了Linux时钟源TSC的软硬件知识,适用于故障排查场景。
  • 计算机组件的运行频率由石英晶体谐振器产生,频率约为20MHz。
  • 时钟生成器用于将频率提升到不同组件所需的工作频率。
  • CPU频率从20MHz提升到3GHz的过程涉及多个组件和时钟信号传递。
  • x86架构的寄存器分为通用目的寄存器和特殊目的寄存器,后者包括模型特定寄存器(MSR)。
  • TSC是x86处理器中的一个特殊寄存器,用于记录CPU启动以来的周期数。
  • TSC常被用作高精度时钟,但其准确性受到多核处理器、超线程、频率变化等因素的影响。
  • 引入恒定速率TSC技术以提高TSC的稳定性,但并不保证实际工作中的TSC恒定。
  • TSC本质上是一个计数器,而非时钟,受多种因素影响其稳定性。
  • Linux系统需要时钟源,TSC是备选之一,具有高精度和低开销的优点。
  • turbostat工具可用于查看和监控TSC相关信息。
  • BIOS设置和SMI中断风暴可能导致TSC不稳定。
  • 虚拟机环境中TSC的稳定性也存在问题。
➡️

继续阅读