Linuxのプロセッサー/コア数を取得するために以下のコマンドを実行しています。
cat /proc/cpuinfo | grep processor | wc -l
動作はしますが、エレガントには見えません。どのように改善すればよいのでしょうか?
nproc`は、あなたが探しているものです。
詳しくはこちら : http://www.cyberciti.biz/faq/linux-get-number-of-cpus-core-command/
最も単純なツールにはglibcが付属しており、「getconf」と呼ばれます。
$ getconf _NPROCESSORS_ONLN 4
あなたがあげた方法が、Linuxでは最も移植性が高いと思います。 不必要な cat と wc プロセスを生成する代わりに、少し短縮することができます。
cat
wc
$ grep --count ^processor /proc/cpuinfo 2
LinuxとOS Xで動作するようにしたい場合は、次のことができます。
CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)
新しいカーネルでは、sys/devices/system/cpu/インターフェイスを使用して、もう少し多くの情報を得ることも可能です。
sys/devices/system/cpu/
$ ls /sys/devices/system/cpu/ cpu0 cpufreq kernel_max offline possible present release cpu1 cpuidle modalias online power probe uevent $ cat /sys/devices/system/cpu/kernel_max 255 $ cat /sys/devices/system/cpu/offline 2-63 $ cat /sys/devices/system/cpu/possible 0-63 $ cat /sys/devices/system/cpu/present 0-1 $ cat /sys/devices/system/cpu/online 0-1
これらの意味については、公式ドキュメントを参照してください。
誰かが「プロセッサ/コアの数」を要求すると、2つの回答が要求されます。 「プロセッサ」の数は、マシンのソケットにインストールされている物理数です。
「コア」の数は物理的なコアになります。 (少なくとも私の心には)ハイパースレッド(仮想)コアは含まれません。 スレッドプールで多くのプログラムを書く人として、あなたは本当に物理的なコア対コア/ハイパースレッドの数を知る必要があります。 とはいえ、次のスクリプトを変更して、必要な回答を得ることができます。
#!/bin/bash MODEL=`cat /cpu/procinfo | grep "model name" | sort | uniq` ALL=`cat /proc/cpuinfo | grep "bogo" | wc -l` PHYSICAL=`cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l` CORES=`cat /proc/cpuinfo | grep "cpu cores" | sort | uniq | cut -d':' -f2` PHY_CORES=$(($PHYSICAL * $CORES)) echo "Type $MODEL" echo "Processors $PHYSICAL" echo "Physical cores $PHY_CORES" echo "Including hyperthreading cores $ALL"
2つのモデルXeon X5650物理プロセッサを搭載したマシンの結果。それぞれ6つの物理コアがあり、ハイパースレッドもサポートしています。
Type model name : Intel(R) Xeon(R) CPU X5650 @ 2.67GHz Processors 2 Physical cores 12 Including hyperthreading cores 24
2 mdeol Xeon E5472プロセッサを搭載したマシンで、ハイパースレッディングをサポートしない4つの物理コアを備えています。
Type model name : Intel(R) Xeon(R) CPU E5472 @ 3.00GHz Processors 2 Physical cores 8 Including hyperthreading cores 8
lscpu(1)
$ lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 4 On-line CPU(s) list: 0-3 Thread(s) per core: 2 Core(s) per socket: 2 Socket(s): 1 NUMA node(s): 1 Vendor ID: GenuineIntel CPU family: 6 Model: 58 Model name: Intel(R) Core(TM) i7-3520M CPU @ 2.90GHz Stepping: 9 CPU MHz: 3406.253 CPU max MHz: 3600.0000 CPU min MHz: 1200.0000 BogoMIPS: 5787.10 Virtualization: VT-x L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 4096K NUMA node0 CPU(s): 0-3
これは、 bsd、 nix、またはsolarisでCPUコアをカウントするポータブルな方法が必要な人向けです(aixおよびhp-uxではテストされていませんが、動作するはずです)。 それはいつも私のために働いてきました。
dmesg | \ egrep 'cpu[. ]?[0-9]+' | \ sed 's/^.*\(cpu[. ]*[0-9]*\).*$/\1/g' | \ sort -u | \ wc -l | \ tr -d ' '
solaris grep& egrepには -oオプションがないため、代わりに sedが使用されます。
grep
egrep
-o
sed
別のワンライナー、なしカウント超ねじ込みコア:
lscpu | awk -F ":" '/Core/ { c=$2; }; /Socket/ { print c*$2 }'
osに依存しないメソッドが必要な場合は、WindowsおよびLinux全体で機能します。 pythonを使用します。
$ python -c 'import multiprocessing as m; print m.cpu_count()' 16
nproc`は、あなたが探しているものです。
詳しくはこちら : http://www.cyberciti.biz/faq/linux-get-number-of-cpus-core-command/
最も単純なツールにはglibcが付属しており、「getconf」と呼ばれます。
あなたがあげた方法が、Linuxでは最も移植性が高いと思います。 不必要な
cat
とwc
プロセスを生成する代わりに、少し短縮することができます。LinuxとOS Xで動作するようにしたい場合は、次のことができます。
新しいカーネルでは、
sys/devices/system/cpu/
インターフェイスを使用して、もう少し多くの情報を得ることも可能です。これらの意味については、公式ドキュメントを参照してください。
誰かが「プロセッサ/コアの数」を要求すると、2つの回答が要求されます。 「プロセッサ」の数は、マシンのソケットにインストールされている物理数です。
「コア」の数は物理的なコアになります。 (少なくとも私の心には)ハイパースレッド(仮想)コアは含まれません。 スレッドプールで多くのプログラムを書く人として、あなたは本当に物理的なコア対コア/ハイパースレッドの数を知る必要があります。 とはいえ、次のスクリプトを変更して、必要な回答を得ることができます。
2つのモデルXeon X5650物理プロセッサを搭載したマシンの結果。それぞれ6つの物理コアがあり、ハイパースレッドもサポートしています。
2 mdeol Xeon E5472プロセッサを搭載したマシンで、ハイパースレッディングをサポートしない4つの物理コアを備えています。
lscpu(1)
コマンドも役立つ場合があります。これは、 bsd、 nix、またはsolarisでCPUコアをカウントするポータブルな方法が必要な人向けです(aixおよびhp-uxではテストされていませんが、動作するはずです)。 それはいつも私のために働いてきました。
solaris
grep
&egrep
には-o
オプションがないため、代わりにsed
が使用されます。別のワンライナー、なしカウント超ねじ込みコア:
osに依存しないメソッドが必要な場合は、WindowsおよびLinux全体で機能します。 pythonを使用します。