首页 > 代码库 > sql server是否超线程?

sql server是否超线程?

使用sys.dm_sys_info 这个视图的时候经常对hyperthread_ratio这个列感觉迷惑。这个列的含义到底是什么?

翻译的外国大神的一篇文章, http://sqlblog.com/blogs/kalen_delaney/archive/2007/12/08/hyperthreaded-or-not.aspx

在我的课堂上或者每次我做性能顾问的时候,我经常会遇到一个问题“我怎么确定我们的SQL SERVER是否是超线程的”?

当我发现DMV--sys.dm_sys_info有一个列叫做hyperthread_ratio(超线程比)的时候,我感觉很高兴极了。不久后,我读到我最爱的一个SQL SERVER

博主Buck Woody 的一篇博文。他指出下面的查询告诉了我们CPU核心的数量,而并不是告诉你是否开启了超线程。

SELECT cpu_count/hyperthread_ratio AS sockets
FROM sys.dm_os_sys_info

虽然Buck 说这条语句告诉了我们核的数量,但这并不正确。因为一个插槽可以包含一个多核的CPU。一个拥有单插槽双核CPU 并且未做超线程的cpu_count 是2,hyperthread_ratio 是2 ;同时单插槽单核心并且超线程的计算机 hyperthread_ratio 同样也是2。在2种情况下,cpu_count/hyperthread_ratio 都是1--插槽的数量。如果我们有一台一个插槽,双核CPU,并且超线程的计算机,CPU_COUNT会变成4.hyperthread_ratio 同样是4,使用这个比率同样是1,总结如下:

 

Number of Sockets

Number of Cores

Hyperthreaded?

sys.dm_os_info.
  cpu_count

sys.dm_os_info.
  hyperthread_ratio

cpu_count /   hyperthread_ratio

1

2

NO

2

2

1

1

1

YES

2

2

1

1

2

YES

4

4

1

 

所以即使Buck说这个公式能够告诉我们核心的数量,但是这个查询本身告诉我们,结果是“插槽数”。cpu_count/hyperthread_ratio会得到插槽数,而不是核心数。并且没有办法区分双核和超线程.

 

 

 

sql server是否超线程?