Linuxサーバーや開発マシンを使っているとき、
「このマシンって何コア?」
「ハイパースレッディングは有効?」
とCPUの詳細が気になることはありませんか?
実際に多くの場面でCPU情報の確認が必要になります:
「並列処理のスレッド数を最適化したい」
「仮想マシンにどれくらいのCPUを割り当てるべき?」
「サーバーのパフォーマンス調査で詳細なCPU情報が必要」
「コンパイル時のmake -j
で最適な並列数を知りたい」
「Dockerコンテナのリソース制限を設定したい」
この記事では、LinuxでCPUのコア数・スレッド数を確認するコマンドから、物理コア数と論理コア数の違い、実用的な活用方法まで、初心者の方にもわかりやすく解説します。
CPUアーキテクチャの基本知識
物理コアと論理コアの概念
物理コア(Physical Core)
CPUチップ内に実際に搭載されている独立した演算処理ユニットです。
各物理コアは完全に独立してプログラムを実行できます。
論理コア(Logical Core / Thread)
OSから認識される仮想的なプロセッサーユニットです。
物理コアにハイパースレッディング技術が適用されると、1つの物理コアが2つの論理コアとして認識されます。
ハイパースレッディング技術
Intel Hyper-Threading Technology (HTT)
- 1つの物理コアで2つのスレッドを同時に処理
- 実行ユニットを効率的に共有
- 理論的には最大50%のパフォーマンス向上
- CPU使用率の向上とレスポンス改善
AMD Simultaneous Multithreading (SMT)
- Intelのハイパースレッディングと同様の技術
- Ryzenシリーズで2つのスレッド/コア
- より洗練されたリソース管理
CPU構成要素の階層
典型的なCPU構成
ソケット (Socket)
├── CPU パッケージ
├── 物理コア 1
│ ├── 論理コア 1
│ └── 論理コア 2 (HTT有効時)
├── 物理コア 2
│ ├── 論理コア 3
│ └── 論理コア 4 (HTT有効時)
└── ...
用語の整理
用語 | 説明 | 例 |
---|---|---|
ソケット | CPUが物理的に接続される場所 | デュアルソケット = CPU×2 |
物理コア | 実際の演算ユニット | 4コアCPU = 4つの物理コア |
論理コア | OSが認識するプロセッサー | 4コア8スレッド = 8論理コア |
スレッド | 論理コアと同義 | 並列実行可能なタスク数 |
LinuxでCPUコア数を確認する基本コマンド
lscpuコマンド(推奨)
基本的な使用方法
lscpu
出力例の詳細解説
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 16
On-line CPU(s) list: 0-15
Thread(s) per core: 2
Core(s) per socket: 8
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 158
Model name: Intel(R) Core(TM) i7-9700K CPU @ 3.60GHz
Stepping: 12
CPU MHz: 3600.000
CPU max MHz: 4900.0000
CPU min MHz: 800.0000
BogoMIPS: 7200.00
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 12288K
重要な項目の説明
項目 | 意味 | 活用方法 |
---|---|---|
CPU(s) | 論理CPU総数 | 並列処理の最大スレッド数 |
Thread(s) per core | コアあたりスレッド数 | HT/SMTの有効確認 |
Core(s) per socket | ソケットあたり物理コア数 | 真のマルチコア性能 |
Socket(s) | CPUソケット数 | マルチプロセッサー構成 |
NUMA node(s) | NUMAノード数 | メモリアクセス最適化 |
/proc/cpuinfoファイルの活用
基本的な確認方法
cat /proc/cpuinfo
論理CPU数の確認
grep -c "^processor" /proc/cpuinfo
物理コア数の確認
grep "^core id" /proc/cpuinfo | sort -u | wc -l
CPUソケット数の確認
grep "^physical id" /proc/cpuinfo | sort -u | wc -l
より詳細な分析
# 物理CPU IDごとのコア数を確認
grep -E "^(processor|physical id|core id)" /proc/cpuinfo |
awk '
/^processor/ { proc = $3 }
/^physical id/ { phys = $4 }
/^core id/ { core = $4; print proc, phys, core }
' | sort -k2,3 -n
nprocコマンド(シンプル)
基本的な使用方法
nproc
利用可能CPU数の確認
nproc --all
オンラインCPU数の確認
nproc --online
高度なCPU情報確認方法
dmidecodeを使用したハードウェア詳細情報
プロセッサー情報の詳細確認
sudo dmidecode -t processor
出力例
Handle 0x0001, DMI type 4, 48 bytes
Processor Information
Socket Designation: LGA1151
Type: Central Processor
Family: Core i7
Manufacturer: Intel(R) Corporation
ID: EC 06 09 00 FF FB EB BF
Signature: Type 0, Family 6, Model 158, Stepping 12
Flags:
FPU (Floating-point unit on-chip)
VME (Virtual mode extension)
...
Version: Intel(R) Core(TM) i7-9700K CPU @ 3.60GHz
Voltage: 1.0 V
External Clock: 100 MHz
Max Speed: 4900 MHz
Current Speed: 3600 MHz
Status: Populated, Enabled
Upgrade: Socket LGA1151
L1 Cache Handle: 0x0005
L2 Cache Handle: 0x0006
L3 Cache Handle: 0x0007
Serial Number: Not Specified
Asset Tag: Not Specified
Part Number: Not Specified
Core Count: 8
Core Enabled: 8
Thread Count: 8
Characteristics:
64-bit capable
Multi-Core
Execute Protection
Enhanced Virtualization
Power/Performance Control
topとhtopでのリアルタイム確認
topコマンドでの確認
top
# 1キーを押すとCPUコアごとの使用率を表示
htopでの視覚的確認
htop
# より視覚的にCPUコアの状況を確認可能
sstoolsパッケージの活用
lstopo(Hardware Locality)
# インストール(Ubuntu/Debian)
sudo apt install hwloc
# CPUトポロジーの視覚的表示
lstopo --of console
lstopo --of png --output cpu-topology.png
実用的な活用例
並列処理の最適化
makeコマンドでの並列ビルド
# 論理CPU数を取得してmakeで使用
NPROC=$(nproc)
make -j${NPROC}
# 物理コア数のみを使用(推奨)
CORES=$(lscpu | grep "Core(s) per socket" | awk '{print $4}')
make -j${CORES}
Dockerでのリソース制限
# 利用可能CPU数の確認
docker run --rm alpine nproc
# CPU制限の設定
docker run --cpus="2.5" myapp
# 特定CPUコアの指定
docker run --cpuset-cpus="0,1" myapp
プログラミングでの活用
Python での並列処理
import multiprocessing
import os
# 論理CPU数を取得
logical_cores = multiprocessing.cpu_count()
print(f"論理CPU数: {logical_cores}")
# 環境変数からCPU数を取得
nproc_count = int(os.popen('nproc').read().strip())
print(f"nproc結果: {nproc_count}")
# 物理コア数を取得(概算)
physical_cores = logical_cores // 2 # HTT有効の場合
print(f"物理コア数(推定): {physical_cores}")
Cプログラムでの取得
#include <unistd.h>
#include <stdio.h>
int main() {
long nprocs = sysconf(_SC_NPROCESSORS_ONLN);
printf("利用可能CPU数: %ld\n", nprocs);
long nprocs_conf = sysconf(_SC_NPROCESSORS_CONF);
printf("設定済みCPU数: %ld\n", nprocs_conf);
return 0;
}
仮想化環境での考慮事項
VMware環境での確認
# VMwareツールの情報
vmware-toolbox-cmd stat cpu
# ホストOSのCPU情報
dmidecode -t system
Docker環境での確認
# コンテナ内のCPU制限確認
cat /sys/fs/cgroup/cpu/cpu.cfs_quota_us
cat /sys/fs/cgroup/cpu/cpu.cfs_period_us
# 実際の制限値計算
quota=$(cat /sys/fs/cgroup/cpu/cpu.cfs_quota_us)
period=$(cat /sys/fs/cgroup/cpu/cpu.cfs_period_us)
if [ $quota -gt 0 ]; then
echo "CPU制限: $(echo "scale=2; $quota / $period" | bc)"
else
echo "CPU制限: なし"
fi
トラブルシューティング
よくある問題と対処法
コア数が期待値と異なる
原因と確認方法
# 1. CPU周波数スケーリングの確認
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
# 2. CPUホットプラグの状態確認
ls /sys/devices/system/cpu/cpu*/online
cat /sys/devices/system/cpu/cpu*/online
# 3. BIOSでのCPU設定確認
sudo dmidecode -t processor | grep -E "(Core Count|Thread Count)"
ハイパースレッディングの有効/無効確認
確認コマンド
# 方法1: lscpuで確認
lscpu | grep "Thread(s) per core"
# 方法2: /proc/cpuinfoで詳細確認
echo "物理コア数: $(grep "^core id" /proc/cpuinfo | sort -u | wc -l)"
echo "論理CPU数: $(grep -c "^processor" /proc/cpuinfo)"
# 方法3: CPUフラグの確認
grep -o "ht" /proc/cpuinfo | wc -l
仮想化環境での制限
確認方法
# KVM/QEMU環境
lscpu | grep Hypervisor
dmesg | grep -i hypervisor
# コンテナ環境
systemd-detect-virt
cat /proc/1/cgroup
パフォーマンス測定
CPU性能テスト
# sysbenchを使用したCPUベンチマーク
sudo apt install sysbench
sysbench cpu --threads=$(nproc) run
# 物理コア数のみでテスト
PHYSICAL_CORES=$(lscpu | grep "Core(s) per socket" | awk '{print $4}')
sysbench cpu --threads=${PHYSICAL_CORES} run
ストレステスト
# stress-ngを使用
sudo apt install stress-ng
# 全CPUコアでストレステスト
stress-ng --cpu $(nproc) --timeout 60s
# 物理コアのみでテスト
stress-ng --cpu ${PHYSICAL_CORES} --timeout 60s
セキュリティとCPU情報
脆弱性の確認
SpectreとMeltdown対策の確認
# カーネルの脆弱性対策状況
cat /sys/devices/system/cpu/vulnerabilities/*
# より詳細な確認
grep -r . /sys/devices/system/cpu/vulnerabilities/
CPUマイクロコードの確認
# マイクロコードのバージョン確認
grep microcode /proc/cpuinfo | head -1
# intel-microcodeパッケージの状態(Intel CPU)
dpkg -l | grep microcode
自動化スクリプトの例
CPU情報収集スクリプト
包括的なCPU情報スクリプト
#!/bin/bash
# cpu_info.sh - CPU情報の包括的な収集
echo "=== CPU基本情報 ==="
echo "論理CPU数: $(nproc)"
echo "物理CPU数: $(lscpu | grep 'CPU(s):' | head -1 | awk '{print $2}')"
echo "ソケット数: $(lscpu | grep 'Socket(s):' | awk '{print $2}')"
echo "物理コア数/ソケット: $(lscpu | grep 'Core(s) per socket:' | awk '{print $4}')"
echo "スレッド数/コア: $(lscpu | grep 'Thread(s) per core:' | awk '{print $4}')"
echo -e "\n=== CPU詳細 ==="
echo "アーキテクチャ: $(lscpu | grep 'Architecture:' | awk '{print $2}')"
echo "CPUモデル: $(lscpu | grep 'Model name:' | cut -d':' -f2 | sed 's/^ *//')"
echo "最大周波数: $(lscpu | grep 'CPU max MHz:' | awk '{print $4}') MHz"
echo "最小周波数: $(lscpu | grep 'CPU min MHz:' | awk '{print $4}') MHz"
echo -e "\n=== キャッシュ情報 ==="
lscpu | grep cache
echo -e "\n=== 仮想化サポート ==="
VIRT_SUPPORT=$(lscpu | grep 'Virtualization:' | cut -d':' -f2 | sed 's/^ *//')
if [ -n "$VIRT_SUPPORT" ]; then
echo "仮想化: $VIRT_SUPPORT"
else
echo "仮想化: サポートなし"
fi
echo -e "\n=== 脆弱性対策状況 ==="
if [ -d /sys/devices/system/cpu/vulnerabilities ]; then
for vuln in /sys/devices/system/cpu/vulnerabilities/*; do
echo "$(basename $vuln): $(cat $vuln)"
done
else
echo "脆弱性情報は利用できません"
fi
監視用スクリプト
CPU使用率監視スクリプト
#!/bin/bash
# cpu_monitor.sh - CPU使用率の継続監視
INTERVAL=5
LOGFILE="cpu_usage.log"
echo "CPU監視開始 ($(date))" >> $LOGFILE
while true; do
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | sed 's/%us,//')
LOAD_AVG=$(uptime | awk -F'load average:' '{print $2}')
echo "[$TIMESTAMP] CPU使用率: ${CPU_USAGE}%, 負荷平均:${LOAD_AVG}" >> $LOGFILE
# 高負荷時のアラート
if (( $(echo "$CPU_USAGE > 80" | bc -l) )); then
echo "警告: CPU使用率が80%を超えています (${CPU_USAGE}%)"
fi
sleep $INTERVAL
done
まとめ
LinuxでのCPU情報確認の要点
コマンド | 用途 | 取得情報 | 推奨度 |
---|---|---|---|
lscpu | 包括的な情報確認 | 全CPU情報 | ★★★ |
nproc | 論理CPU数のみ | 論理プロセッサー数 | ★★★ |
/proc/cpuinfo | 詳細分析 | プロセッサー詳細 | ★★ |
dmidecode | ハードウェア詳細 | BIOS/ハードウェア情報 | ★★ |
実用的な活用指針
- 並列処理最適化:物理コア数を基準にスレッド数を決定
- 仮想化設計:論理CPU数と物理リソースの関係を把握
- パフォーマンス調査:CPU構成とボトルネックの関係を分析
- セキュリティ対策:脆弱性対策の実装状況を定期確認
設定時の注意事項
- ハイパースレッディングの有効性は用途により判断
- 仮想化環境では実際のリソース制限を考慮
- セキュリティアップデートの適用状況を定期確認
- 監視ツールでのリアルタイム状況把握
コメント