CPUID命令の結果を視覚化する簡単な例

Intelプロセッサの識別とCPUID命令から、新しいプロセッサに関する多くの有用な情報を引き出すことができた時代がありました。 このマニュアルは定期的に更新されており、文字通りIntelを圧倒した技術革新の説明でいっぱいでした。 残念ながら、2012年5月以降、CPUID命令の説明はマルチボリュームIntel 64およびIA-32アーキテクチャソフトウェア開発者マニュアルに移行し、指定されたドキュメントへのリンクはyarbukhのボリュームの1つ(特にVol。2A)に転送されます。



これから、イノベーションを追跡することはより難しくなりました。 CPUIDの結果を視覚化して、新製品の導入を監視し、知識を得るための簡単なユーティリティの助けを借りて、アイデアが生まれました。 (ソフトウェア開発プロセスはここで説明されています。最新バージョンはここで利用可能です )。



エントリSupermicro X11SSL-Fに基づくエントリキューブサーバー



実際、このような開発には革新的な革新性は定義上あり得ませんが、プロセッサパークの開発を観察する利便性は否定できません。 最近登場したSkyLakeファミリのプロセッサの機能を調べて、この仮定を検証します。 テストプラットフォームとして、Supermicro X11SSL-Fボードに基づくキューブサーバーを使用しました(Entryのおかげです)。 プロセッサについては説明しません。自分ですべてを話させてください...



CPUID=80000002h








このユーティリティを使用すると、SkyLakeプロセッサに備わっている多くの機能をすぐに発見できます。 新しいファミリの出現に関連するCPUID命令のアーキテクチャへの追加-私たちの発見についてコメントしてみましょう。



CPUID = 0000000Eh



関数0000000Ehは予約されており、レジスタの結果はゼロです。



CPUID = 0000000Fh



CPUID=0000000Fh








機能0000000Fhプラットフォームサービス品質監視列挙は、アプリケーションによるプロセッサリソースの使用を監視できる機能を宣言します。 ドキュメントによると、現在、このような監視はL3キャッシュに対してのみ実装されていますが、分析されたリソースのリストに他のリソースを追加することは可能です。 この関数はプロセッサがサポートする関数の範囲内にあるという事実にもかかわらず、レジスターの結果はゼロです。 つまり、このプロセッサはこの機能をサポートしていません。 また、多数の新しい機能を追加するために範囲が拡大されました。



CPUID = 00000010h



CPUID=00000010h








機能00000010h プラットフォームQuality of Service Enforcement Enumerationは 、共有リソースの使用時にオペレーティングシステムがアプリケーション(スレッド)に優先順位を付けることができる機能を宣言します。 上記の機能に関しては、これまでのところ、L3キャッシュについてのみ説明しています。 この関数はプロセッサがサポートする関数の範囲内にあるという事実にもかかわらず、レジスターの結果はゼロです。 つまり、このプロセッサはこの機能をサポートしていません。



CPUID = 00000011h



関数00000011hは予約されており、レジスタの結果はゼロです。



CPUID = 00000012h



CPUID=00000012h








00000012h Intel SGX Resource Enumeration関数は、アプリケーション内に囲まれた領域を作成できるセキュリティテクノロジーであるSoftware Guard Extensionテクノロジーの機能を宣言します。 理論的には、このような保護は非常に効果的です。攻撃する悪意のあるコードがRing0スーパーバイザーの特権を持っている場合(特権攻撃)、およびメモリトラフィックのハードウェアインターセプト(スヌーピング攻撃)を含みます。



命令セットSGX1、SGX2はサポートされていないとしてマークされ、保護領域のサイズの最大値(エンクレーブサイズ= 1バイト)は無効です。 一方、CPUID#7関数の結果によると、サポートフラグSGX = 1です。 ドキュメントによると、プロセッサはSGXをサポートしています。 この矛盾の考えられる理由:たとえば、このテクノロジーがCMOSセットアップに含まれていない場合、またはファームウェアの古いバージョンのためにサポートされていない場合、ファームウェアはSGXリソースを初期化しませんでした。 これらのフィールドの値の形成におけるUEFI初期化手順の役割は、別の資料のトピックになります。



CPUID = 00000013h



関数00000013hは予約されており、レジスタの結果はゼロです。



CPUID = 00000014h



CPUID=00000014h








00000014h Intelプロセッサトレース列挙関数は、条件付きジャンプや無条件ジャンプ、サブルーチン呼び出しなどの発生イベントに関するログ情報を使用してプログラム実行のトレースを提供する機能を宣言します。 プロトコルはリアルタイムで保持されます。 このプロセッサでは、MTC(ミニタイムカウンタ)タイマーを使用したRTIT(リアルタイム命令トレース)トレーステクノロジがサポートされています。 頭字語COFIは、Change of Flow Instructionの略であり、制御の条件付きおよび無条件の転送に関連する多くのイベントを定義し、その監視を制御できます。 この機能の詳細な説明は、別の記事の主題になります。



CPUID = 00000015h



CPUID=00000015h








00000015h タイムスタンプカウンター/コアクリスタルクロック情報列挙関数は、TSCと「コアクリスタルクロック」と呼ばれる内部基準周波数ソースとの関係を宣言します。



示されている基準周波数源の周波数は、TSC周波数の150倍です。 Intelの資料によると、そのようなソースの1つは、ローカルAPIC割り込みコントローラーの一部としてプロセッサーに実装されたタイマーです。 この関数は、Always Running APIC Timerビットによって宣言されます。このビットは、プロセッサのさまざまな電源管理状態でこのようなタイマーの機能を強調します。



CPUID = 00000016h



CPUID=00000016h








関数00000016h プロセッサー周波数情報により、プロセッサーのメインクロック周波数の値を読み取ることができます。 返される定数はプロセッサモデルに対応します。周波数を測定する代わりにこの関数を使用しないでください。そうしないと、「オーバークロック」の場合に誤った読み取りが可能になります。





まとめ



ご覧のように、CPUIDアーキテクチャの多くの変更は、プロセッサジャイアントが少し後で使用する予定の機能のみを予約しています。 一方、まだ実装されていないが事前に説明されている命令は、オデッサで実装されていると見なされます。



All Articles