CPUのソケットを特定する方法

僕らのおうちのPCはマルチコアCPUを1ソケットのみ搭載でそんなに厄介ではないが、マルチコア・マルチプロセッサのリッチな環境を使用するにはそのソケットの番号をしりたい。ついでに、HTをあまり信用していない俺からすれば、何番と何番がHTで別コアに見えているのかも知りたい。
ここで、まずは/proc/cpuinfoを見る。ちなみに、CPUはXeon E5530(4コア・8スレッド)が2個刺さっている。

 % grep "physical id" /proc/cpuinfo
physical id	: 1
physical id	: 0
physical id	: 1
physical id	: 0
physical id	: 1
physical id	: 0
physical id	: 1
physical id	: 0
physical id	: 1
physical id	: 0
physical id	: 1
physical id	: 0
physical id	: 1
physical id	: 0
physical id	: 1
physical id	: 0
 % grep "core id" /proc/cpuinfo    
core id		: 0
core id		: 0
core id		: 1
core id		: 1
core id		: 2
core id		: 2
core id		: 3
core id		: 3
core id		: 0
core id		: 0
core id		: 1
core id		: 1
core id		: 2
core id		: 2
core id		: 3
core id		: 3

これで大体0,2,4,8が1番のCPUで1,3,5,7が0番のCPUであり、8-15はHTで見えているだけと予想される。
ちなみにこの予想は /sys/devices/system/node/ 以下を読むと当たっていたことがわかる。

 % for i in /sys/devices/system/node/node0/cpu*/topology/core_id; do echo "==$i=="; cat $i; done
==/sys/devices/system/node/node0/cpu0/topology/core_id==
0
==/sys/devices/system/node/node0/cpu10/topology/core_id==
1
==/sys/devices/system/node/node0/cpu12/topology/core_id==
2
==/sys/devices/system/node/node0/cpu14/topology/core_id==
3
==/sys/devices/system/node/node0/cpu2/topology/core_id==
1
==/sys/devices/system/node/node0/cpu4/topology/core_id==
2
==/sys/devices/system/node/node0/cpu6/topology/core_id==
3
==/sys/devices/system/node/node0/cpu8/topology/core_id==
0