前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[x86][linux]AVX512指令引起的进程crash

[x86][linux]AVX512指令引起的进程crash

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

问题背景: 在开发机上编译ovs,在目标机器上运行,出现来ovs-vswitchd崩溃,dmesg得到如下信息: [ 2807.148361] traps: ovs-vswitchd[10511] trap invalid opcode ip:55d4eed2fb51 sp:7ffe19a29700 error:0 in ovs-vswitchd[55d4eecb2000+721000] [ 2807.401581] traps: [11296] trap invalid opcode ip:55d4eed2fb51 sp:7ffe19a29700 error:0 in ovs-vswitchd[55d4eecb2000+721000] [ 2817.557260] traps: [11324] trap invalid opcode ip:55d4eed2fb51 sp:7ffe19a29700 error:0 in ovs-vswitchd[55d4eecb2000+721000] [ 2822.415470] traps: ovs-vswitchd[11437] trap invalid opcode ip:55aed509cb51 sp:7fffbaf19260 error:0 in ovs-vswitchd[55aed501f000+721000] [ 2827.713594] traps: [11471] trap invalid opcode ip:55d4eed2fb51 sp:7ffe19a29700 error:0 in ovs-vswitchd[55d4eecb2000+721000] [ 2837.869480] traps: [11529] trap invalid opcode ip:55d4eed2fb51 sp:7ffe19a29700 error:0 in ovs-vswitchd[55d4eecb2000+721000] [ 2870.048788] traps: [11587] trap invalid opcode ip:55d4eed2fb51 sp:7ffe19a29700 error:0 in ovs-vswitchd (deleted)[55d4eecb2000+721000] [ 2870.199582] traps: [12442] trap invalid opcode ip:55d4eed2fb51 sp:7ffe19a29700 error:0 in ovs-vswitchd (deleted)[55d4eecb2000+721000] [ 2880.330830] traps: [12459] trap invalid opcode ip:55d4eed2fb51 sp:7ffe19a29700 error:0 in ovs-vswitchd (deleted)[55d4eecb2000+721000] [ 2890.462325] traps: [12484] trap invalid opcode ip:55d4eed2fb51 sp:7ffe19a29700 error:0 in ovs-vswitchd (deleted)[55d4eecb2000+721000] 问题分析: 1,指令错误分析 log的内容是一致的,随便截取一行来看: [ 2807.401581] traps: [11296] trap invalid opcode ip:55d4eed2fb51 sp:7ffe19a29700 error:0 in ovs-vswitchd[55d4eecb2000+721000] 可以看到,是因为执行了invalid opcode导致的。很可能是指令集的原因导致的。 2,定位 根据ip:55d4eed2fb51和map信息ovs-vswitchd[55d4eecb2000+721000],可以推算出来,出错的地址是0x55d4eed2fb51 - 0x55d4eecb2000 = 0x7db51 反汇编,执行命令objdump -D /root/openvswitch-dpdk/openvswitch-2.9.2/vswitchd/ovs-vswitchd > obj,截取0x7db51偏移的代码片段: 000000000007db50 <rte_vfio_enable>: 7db50: 55 push %rbp 7db51: 62 f1 fd 48 6f 15 25 vmovdqa64 0x4ab325(%rip),%zmm2 # 528e80 <__func__.8528+0x950> 7db58: b3 4a 00 7db5b: 48 8d 15 a4 b2 4a 00 lea 0x4ab2a4(%rip),%rdx # 528e06 <__func__.8528+0x8d6> 7db62: 62 f1 fd 48 6f 0d 54 vmovdqa64 0x4ab354(%rip),%zmm1 # 528ec0 <__func__.8528+0x990> 7db69: b3 4a 00 7db6c: 31 f6 xor %esi,%esi 7db6e: 31 c0 xor %eax,%eax 7db70: 62 f1 fd 48 6f 05 86 vmovdqa64 0x4ab386(%rip),%zmm0 # 528f00 <__func__.8528+0x9d0> 7db77: b3 4a 00 7db7a: 48 89 e5 mov %rsp,%rbp 7db7d: 41 52 push %r10 7db7f: 53 push %rbx 7db80: 48 89 fb mov %rdi,%rbx 7db83: bf 07 00 00 00 mov $0x7,%edi 那么,vmovdqa64就是凶手!! 3,定位指令集 查找Intel SDM文档,

可以发现,vmovdqa64指令是AVX512F支持的指令集。 使用lscpu命令,对比编译机和目标机的指令集发现,编译机是v5,开发机是v4。 而avx512f是v5支持的,v4并不支持。

4,结论

一些系统软件比较注重性能,如果可以统一机型的情况下,尽量发挥CPU的特性是一个更好的选择。

如果机型不统一,最好使用版本较低的型号上编译,防止出现高版本的CPU支持的指令。

当然也可以修改编译选项。。。

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

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

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

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

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