超线程 Smt 究竟可以快多少?

商务办公
刚才我们关闭SMT是把CPU10-CPU19全关了,只留下每对里面的1个CPU,也就是留下了CPU0-CPU9。

[[429527]]

默认情况下是Intel I9,10核,每个核2个threads,共20个CPUs:

下面编译内核:

需要2分钟30秒左右。

再来一遍:

这说明make clean, drop_caches后时间也差不多。

现在我们关闭smt,只保留10个CPU:

具体的关闭方法就是:

  1. sudo sh -c 'echo off > /sys/devices/system/cpu/smt/control' 

这样只剩下10个CPU,下面来编译:

时间2分51秒,相对于2分30秒,速度下降仅仅14%。

这说明超线程SMT对性能的提升绝对没有达到100%,甚至都没有达到20%。

我们现在重新开启超线程:

  1. sudo sh -c 'echo on > /sys/devices/system/cpu/smt/control' 

看一下哪个CPU和哪个CPU是thread sibling:

看起来CPU0和CPU10是一对,CPU1和CPU11是一对,依次类推。

刚才我们关闭SMT是把CPU10-CPU19全关了,只留下每对里面的1个CPU,也就是留下了CPU0-CPU9。

在开启SMT的时候(假设蓝色和红色是一个CORE里面的两个CPU):

在关闭SMT的时候,等于每对里面只留1个CPU:

现在我们换一种关法,一对对关,只留下五对:

指令如下:

实现效果如下:

再重新编译内核:

现在耗时是3分10秒,想对于所有CPU全开,下降27%。相对于每个core里面只关一个线程,下降12%。

这就比较神奇了?为什么我关了5个core,性能没有下降100%呢?这至少说明一个问题,从5core到10core,Intel I9编译内核性能并没有线性地scale。只是从3分10秒,提升到2分30秒。

这到底是为什么?「元芳,你怎么看?」

本文转载自微信公众号「Linux阅码场」,可以通过以下二维码关注。转载本文请联系Linux阅码场公众号。

 

责任编辑:武晓燕 来源: Linux阅码场
相关推荐

2021-10-22 08:22:37

线程Smt内核

2017-07-10 16:23:29

线程CPU单核

2017-03-06 14:45:27

超线程技术处理器技术服务器

2009-04-27 12:26:45

AMD单核Nehalem

2009-06-17 17:43:16

英特尔nehalem超线程

2011-08-25 12:51:02

2009-05-22 08:50:19

2009-10-26 09:26:42

Windows7多核评Windows 7多核

2022-11-22 14:39:40

CPU单核多核

2018-04-24 15:19:52

聚类分析数据方法

2019-12-10 14:09:09

Zen3架构SMT4

2023-09-04 08:08:59

2019-11-11 09:30:46

区块链比特币物联网

2020-10-14 18:16:08

Python[]list()

2014-07-29 15:20:15

2009-05-17 10:25:32

微软Windows 7操作系统

2015-12-18 10:51:52

2024-02-26 08:28:24

Java线程CPU

2020-09-08 10:56:55

Java多线程存储器

2022-03-21 12:45:28

Java线程代码
点赞
收藏

51CTO技术栈公众号