Linuxがついに「TSC必須」へ。Windowsに続く大きな転換点を迎える

Wait 5 sec.

Linuxカーネルにx86環境でTime Stamp Counter(TSC)を必須要件にするという大きな変更が加えられたことがわかりました。一見コードのクリーンアップのための小規模な変更に思えますが、実際には「超古いCPUへの長年の互換性維持をついに終了した」という象徴的な出来事で、Windowsが10年以上前から進めていた流れに、Linuxもようやく追いついた形になります。TSCとは何か: 高精度な時間計測を担うCPUレジスタTSCは、Intel Pentium時代から存在する64bitのCPU内蔵カウンタで、経過時間を非常に細かく測定することができます。HPETやACPI PM Timerのようなマザーボード側のタイマーより高速にアクセスできるため、パフォーマンス計測や同期処理で重宝されてきました。現代のIntel/AMD CPUはすべてTSCを搭載しており、RDTSCやRDTSCP命令で読み取れます。Linuxは長年、TSCを持たない古いCPUやTSCが不安定なCPUに対応するために膨大な互換コードを維持してきましたが、近年は、不必要な互換コードは削除するという方針が明確化しています。Linux 7.0でIntel 486のサポートが終了し、続く開発サイクルで、TSCを前提にできないCPUのサポートも削除されます。この結果、現行のサポート対象CPUはすべてTSCを搭載していたものに限定できることとなり、互換コードを残す必要となくなったことから、今回の「TSC必須化」につながりました。WindowsはTSC中心Windowsは2000/XPの時代からQueryPerformanceCounter(QPC)を導入し、TSCが使える環境では積極的に活用してきました。QueryPerformanceCounter(QPC)はTSCを安全に使うためのWindowsの抽象レイヤーです。Windows 7以降は同期されたTSCがあればそれを使うという方針が強まり、Windows 8/8.1ではさらに改善された同期機構が導入されています。ただし、Windowsは今でも、TSCが不適切な場合はHPETなどにフォールバックする仕組みを残しており、開発者には直接TSCを読むのではなくQPCを使うよう推奨しています。まとめ今回の変更は、Linuxが古いx86 CPUへの歴史的な互換性をついに手放したという象徴的な意味を持ちます。現代のPCでは当然のように使われているTSCを前提にすることで、カーネルの保守性が向上し、不要な分岐や調整コードが消えることでわずかながら性能面のメリットも期待できます。Windowsと比べると古いハードウェアをサポートしている印象のあるLinuxですが、実際は少しずつ古いハードウェアのサポートが削除されていることがわかります。[via Neowin]