前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[x86][kvm]avx512指令相关

[x86][kvm]avx512指令相关

作者头像
皮振伟
发布2018-10-23 10:03:01
5K0
发布2018-10-23 10:03:01
举报
文章被收录于专栏:皮振伟的专栏皮振伟的专栏

前言:

前文《[x86][linux]AVX512指令引起的进程crash》中,介绍了一次因为avx512指令导致的进程crash。

本文记录一下avx指令导致的计算的性能差异,以及内核、虚拟化对avx512的支持。

分析:

1,linux-4.14 avx512

lscpu | grep Flags

可以看到kernel对avx的支持情况。

avx,avx2,avx512bw,avx512c,avx512dq,avx512f,avx512vl

2,linux-4.4 avx512

在linux-4.4上同样执行lscpu | grep Flags,发现只有avx,avx2,avx512cd,avx512f。

在https://www.kernel.org上查看最新的4.4 longterm的changelog,并没有支持。

3, KVM支持情况

目前linux-4.14上,已经支持了avx,avx2,avx512bw,avx512c,avx512dq,avx512f,avx512vl。Guest里面是否支持取决于Guest的kernel版本。

4,glibc对avx的支持

在ubuntu1604的版本中,使用glibc2-23,不支持v5的avx指令。

在ubuntu1804的版本中,使用glibc2-27,支持来v5的avx指令。

5,cpuid命令

目前cpuid的upstream(https://github.com/tycho/cpuid)支持了v5的avx指令。

编译upstream的cpuid,执行

也可以看到对应的支持。

在linux-4.4上执行cpuid,也可以看到,那么原因是什么呢?

avx512指令集是CPU指令,不同的cpu以及cpu版本支持情况不同。如果不支持,运行到对应的指令就会让cpu没办法解码,dmesg就会提示“invalid opcode”。

cpu提供了cpuid这条指令,根据返回值的flag判断,当前cpu是否支持。

lscpu(或者cat /proc/cpuinfo),是kernel实现的对指令支持的检查,然后输出字符串。4.4上并没有对应的代码实现,所以看不到avx512vl这样的输出。

cpuid命令,在用户态直接执行cpuid指令,获取cpu的flag。并不依赖内核实现。

所以,在v5的cpu上,4.4的内核上,会看到lscpu和cpuid的不同结果。

6,影响

作者是在测试CPU性能的时候,发觉的性能测试异常。测试代码的逻辑是:复制一段字符串到buffer中,然后执行md5计算。执行n多遍,看执行时间。

后来发现是copy字符串的地方产生的影响,即avx指令加速了memcpy的执行速度。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-10-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AlwaysGeek 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档