1. 概要

このチュートリアルでは、システムのマザーボードにインストールされているCPUでサポートされている機能について説明します。 その前に、仮想ファイルの概念を簡単に見ていきます。

その後、Intel、AMD、ARMなどのさまざまなCPUメーカーの / proc /cpuinfo仮想ファイルから取得したフラグについて説明します。

2. 仮想ファイル

仮想ファイルは、Linuxベースのオペレーティングシステムで使用できる特殊なタイプのファイルです。 仮想ファイルを読み取ることで、Linuxカーネルが現在何をしているかを確認できます。 つまり、これらは、実行中のLinuxカーネルを覗くことができる一種のレンズです。 通常のファイルとは異なり、仮想ファイルはディスク上にスペースをとらず、読み取ったときにのみ作成されます。

ほとんどのLinuxディストリビューションでは、仮想ファイルは/procディレクトリにあります。 一部の仮想ファイルを読み取るには、ルートアクセスが必要になる場合があります。 /procディレクトリの内容を見てみましょう。

# ls -halF /proc
total 4.0K
-r--r--r--   1 root             root              56K Jul 13 00:18 config.gz
-r--r--r--   1 root             root                0 Jul 13 00:18 consoles
-r--r--r--   1 root             root                0 Jul 13 00:14 cpuinfo
-r--r--r--   1 root             root                0 Jul 13 00:14 devices
-r--r--r--   1 root             root                0 Jul 13 00:18 diskstats
-r--r--r--   1 root             root                0 Jul 13 00:18 filesystems
dr-xr-xr-x   5 root             root                0 Jul 13 00:18 fs/
-r--r--r--   1 root             root                0 Jul 13 00:18 vmstat
-r--r--r--   1 root             root                0 Jul 13 00:18 zoneinfo

このコマンドは多くのファイルを一覧表示しますが、関心があるのはcpuinfoファイルだけです。このファイルはたまたまベースディレクトリ内にあります。

3. / proc /cpuinfo仮想ファイル

/ proc / cpuinfo 仮想ファイルには、システムのマザーボードで現在使用可能なCPUに関する情報が含まれています。 catコマンドを使用してファイルを読み取ります。

# cat /proc/cpuinfo
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 94
model name	: Intel(R) Celeron(R) CPU G3900 @ 2.80GHz
stepping	: 3
microcode	: 0xea
cpu MHz		: 899.999
cache size	: 2048 KB
physical id	: 0
siblings	: 2
core id		: 0
cpu cores	: 2
apicid		: 0
initial apicid	: 0
fpu		: yes
fpu_exception	: yes
cpuid level	: 22
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb invpcid_single pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust erms invpcid rdseed smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm arat pln pts hwp hwp_notify hwp_act_window hwp_epp md_clear flush_l1d
vmx flags	: vnmi preemption_timer invvpid ept_x_only ept_ad ept_1gb flexpriority tsc_offset vtpr mtf vapic ept vpid unrestricted_guest ple pml
bugs		: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit srbds
bogomips	: 5599.85
clflush size	: 64
cache_alignment	: 64
address sizes	: 39 bits physical, 48 bits virtual

ご覧のとおり、フラグフィールドを含むCPUの仕様を出力します。 次のセクションでは、CPUで何ができるかを理解するのに役立つ重要なフラグのいくつかを見ていきます。

4. 一般的なIntel定義のフラグ

4.1. lm

lmフラグはロングモードを表します。 CPUが64ビットアーキテクチャをサポートしていることを示します。 そのため、32ビットCPUとは異なり、x86-64CPUにはこのフラグがあります。

4.2. vmxおよびsvm

vmx (仮想マシン拡張)フラグは、IntelCPUが仮想マシンをハードウェアでサポートしていることを示します。 VirtualBoxのような仮想マシンソフトウェアは、この拡張機能を利用してパフォーマンスを向上させ、その他の機能を強化します。

一方、 svmフラグは同じ目的を果たしますが、AMDCPUでのみ使用できます。

4.3. smx

smx (Safer Mode Extensions)フラグは、64ビットプロセッサで使用できます。 これは、保護メカニズムの実施を提供するチップセットであるIntelTXTプラットフォームで使用可能なプログラミングインターフェイスです。

4.4. ハイパーバイザー

ハイパーバイザーフラグは、CPUが仮想マシンを実行するためのハードウェアサポートを備えていることを示します。 仮想マシンは、仮想オペレーティングシステムを実行および管理するソフトウェアです。 そこにあるいくつかの人気のある仮想マシンには、VirtualBoxとVMwareが含まれます。

CPUにこのフラグがない場合、vmxまたはsvmフラグもない可能性が高くなります。

4.5. pae

PAE(Physical Address Extension)は、x86ベースのプロセッサのメモリ管理機能です。 この機能により、CPUは4GBを超える物理メモリサイズにアクセスできます。 2003年以降に製造されたほとんどのプロセッサで利用できます。 したがって、最新のオペレーティングシステムのほとんどはこの機能をサポートしています。

4.6. pn

Intelのプロセッサには、 pn と呼ばれる一意のシリアル番号があります。これは、プロセッサシリアル番号(PSN)の略です。 このシリアル番号はすべてのプロセッサに固有であり、個々のプロセッサを識別するためにプログラムによって使用されます。

4.7. acpi

頭字語ACPIは、Advanced Configuration andPowerInterfaceの略です。 もともとはIntel、Microsoft、Toshibaによって開発されたもので、オペレーティングシステムがハードウェアコンポーネントを検出して構成できるように設計された標準仕様です。 たとえば、は、コンピュータシステムに接続された周辺機器の電力管理を実行するためにオペレーティングシステムによって使用されます。

オペレーティングシステムは、これを使用してプラグアンドプレイデバイスの自動構成を実行し、温度情報などのステータス監視を実行します。

4.8. sse

SSE(ストリーミングSIMD拡張命令)は、Intelベースのプロセッサの拡張機能です。 SIMDの頭字語は、Single InstructionMultipleDataの略です。 SSEを使用すると、CPUで複数のデータ要素を処理できるため、並列処理によってパフォーマンスが向上します。 これは主に、3Dグラフィックス、コンピュータービジョン、デジタル信号処理などのプロセス集約型アプリケーションで使用されます。

4.9. sse2

SSE2は、SSEの拡張バージョンです。 SSEとは異なり、SSE2は64ビット値を処理できます。 さらに144の命令があり、複数の情報に対して1つのタスクを同時に実行できます。

4.10. sse3

SSE3はSSEの3番目のバージョンであり、Prescott New Instructions(PNI)としても知られています。 13の新しい命令があり、デジタル信号処理と3D操作のパフォーマンスが向上しています。

4.11. sse4_1およびsse4_2

SSE4はSSEの最新バージョンであり、 HDBoostという用語でも知られています。 フラグsse4_1およびsse4_2は、それぞれSSE4.1およびSSE4.2を示します。 どちらのバージョンにも、54個の新しい命令のサブセットが含まれています。

4.12. ht

htはハイパースレッディングの略です。 ハイパースレッディングを使用すると、CPUのコアで複数のスレッドを並列に実行できます。 その結果、効率が向上し、複数のプログラムを同時に実行できるようになります。 でも、 htフラグは、CPUでハイパースレッディングが有効になっていることを示していません。 これは、CPUがハイパースレッディング対応であることを示しているにすぎません。

4.13. tm

サーマルモニターはIntelCPUの機能であり、クロック速度を下げることでサーマル出力を減らします。 したがって、CPUは、プロセッサの温度が特定の制限を超えたときに熱管理を実行できます。 確かに、CPUのパフォーマンスを低下させる可能性はありますが、損傷を防ぐことができます。

さらに、この機能はBIOS設定で有効にできます。

4.14. pdcm

IntelCPUのpdcmフラグは、Performance and DebuggingCapabilityMSRの略語です。 次に、MSRはModel-SpecificRegisterの略です。 名前が示すように、特殊レジスタを使用して、デバッグ、プログラム実行トレース、ベンチマーク、およびパフォーマンス監視を実行できます。

5. 一般的なAMD定義のフラグ

5.1. mp

AMDCPUのmpフラグは、マルチプロセッシングの略です。 マルチプロセッシングにより、システムは複数のプロセスを同時に実行できます。これは、システムが複数のプロセッサをサポートし、それらの間でタスクを割り当てることができるためです。 その結果、プロセッサの1つに障害が発生してもシステムが停止しないため、スループットが向上し、システムの信頼性が向上します。

5.2. lm

Intel CPUと同様に、lmフラグはロングモードを表します。 AMD CPUがロングモードをサポートしている場合、64ビット対応です。

5.3. abm

abmはAdvancedBitManipulationの略です。 これは、IntelプロセッサとAMDプロセッサの両方の拡張機能であり、はビット操作の速度を向上させます

5.4. sse4a

SSE4Aは、AMDプロセッサに4つのSIMD命令を含むストリーミングSIMD拡張命令です。

6. 一般的なARM定義のフラグ

6.1. 26ビット

26ビットフラグは、プロセッサが26ビット幅のデータをサポートしていることを示します。 このフラグは新しいARMプロセッサでは使用できません。

6.2. java

ARMプロセッサのjavaフラグは、JazelleDBX拡張機能を示します。 Java仮想マシン(JVM)は、この拡張機能を利用してハードウェアアクセラレーションによるバイトコード実行を実行し、プログラムの実行速度を向上させます。

6.3. ネオン

このフラグは、AdvancedSIMDExtensionとも呼ばれます。 この拡張機能は、ビデオゲームやカメラアプリなどのメディアおよびデジタル信号処理プログラムにアクセラレーションを提供します。 32ビットARMプロセッサでは、 neon として示されますが、64ビットARMプロセッサは、asimdフラグを介して信号を送ります。

さらに、古いLinuxカーネルは、プロセッサアーキテクチャに関係なく、asimdフラグを介してそれを示すことに注意してください。

6.4. lpae

lpae フラグは、プロセッサがラージ物理アドレス拡張をサポートしていることを示しています。これにより、は32ビットプロセッサに4GBを超える物理メモリを搭載できます。

6.5. 親指

Thumbは、一部のARMプロセッサでサポートされている命令セットです。 サム命令は16ビット幅であり、物理メモリが遅い場合にコードをより小さく、より速くすることができます。

7. Linuxで定義されたフラグ

7.1. tsc_reliable

TSCはタイムスタンプカウンターの略で、リセットされてからのCPUサイクル数をカウントします。 このフラグは、TSCレジスタが信頼できることがわかっていることを示します。 このフラグが存在するのは、システムにマルチコアCPUがある場合、複数のCPUのカウンターが同期される見込みがないため、TSCが信頼できないためです。

7.3. acc_power

AMDCPUのacc_powerフラグは、CPUがプロセッサの平均消費電力を計算できることを示しています。 AMD Accumulated Power ReportingMechanismの略語です。

8. 結論

この記事では、仮想ファイルの概念と、 / proc /cpuinfo仮想ファイルとは何かについて理解しました。 その後、 / proc /cpuinfo仮想ファイルから取得できるCPUの重要なフラグのいくつかを確認しました。

AMDおよびARM定義のフラグと一緒にIntel定義のフラグを調べました。 最後に、Linux自体が定義するいくつかのフラグについて説明しました。