专栏首页皮振伟的专栏[x86][linux]AVX512指令引起的进程crash

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

问题背景: 在开发机上编译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支持的指令。

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

文章分享自微信公众号:
AlwaysGeek

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

作者:AlwaysGeek
原始发表时间:2018-09-14
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • [x86][kvm]avx512指令相关

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

    皮振伟
  • 程序员大神Linus转投AMD:我希望英特尔的AVX 512指令集「去死」

    Linux 首席架构师,当今全球最著名程序员之一 Linus Torvalds 最近在邮件列表中的言论再次引起一片哗然。

    机器之心
  • 解决Linux内核问题实用技巧之 - Crash工具结合/dev/mem任意修改内存

    解决每一类问题都需要消耗大量的时间,特别是重新编译内核这种事情。于是,每一个Linux内核程序员或多或少都会掌握一些Hack技巧,以节省时间提高工作效率。

    Linux阅码场
  • 桃李春风一杯酒,江湖夜雨十年灯 - 老兵夜话DPDK

    作者Liam,海外老码农,对应用密码学、CPU微架构、高速网络通信等领域都有所涉猎。

    Linux阅码场
  • 中断机制和中断描述符表、中断和异常的处理

    注:本分类下文章大多整理自《深入分析linux内核源代码》一书,另有参考其他一些资料如《linux内核完全剖析》、《linux c 编程一站式学习》等,只是为了...

    s1mba
  • Android native crash解析

    当某个进程发生crash时会出现下面的错误日志,它可能出现在logcat日志或者/data/tombstones目录下的tombstone文件中

    灰度五十
  • Alder Lake会是英特尔的救世主吗?

    目前半导体行业的发展可以用冰火两重天来形容,传统的桌面及移动SOC市场已经基本停止增长了,而云计算成了各大巨头的兵家必争之地,这点笔者在前文《英特尔火线换帅、苹...

    beyondma
  • 高性能深度学习推理引擎 OpenPPL 正式开源!

    OpenPPL 是商汤基于自研高性能算子库的开源深度学习推理平台,能够让人工智能应用高效可靠地运行在现有的 CPU、GPU 等计算平台上,为云端场景提供人工智能...

    Aceyclee
  • 使用OpenCV中的universal intrinsics为算法提速 (2)

    前言:因为新型冠状病毒导致疫情,最近几日各种新闻和消息满天飞。疫情之下不易出行、不宜聚会;宜宅在家、宜阅读、宜学习、宜写代码。鉴于此,本系列第2篇提前发布。希望...

    OpenCV学堂
  • Android之64位和32位区分

    在Android编码时候 ,我们经常会看到ABI 。ABI的意思是 Application Binary Interface 的缩写。

    李小白是一只喵
  • Android 平台 Native 代码的崩溃捕获机制及实现

    一、背景 在Android平台,native crash一直是crash里的大头。native crash具有上下文不全、出错信息模糊、难以捕捉等特点,比jav...

    腾讯Bugly
  • 解决Linux内核问题实用技巧之-dev/mem的新玩法

    简单来讲,/dev/mem是系统物理内存的映像文件,这里的 “物理内存” 需要进一步解释。

    Linux阅码场
  • Tencent Kona:OpenJDK贡献全国四连冠,赋能数据科学计算加速

    [ 导语 ] 2022年3月22日,JDK18正式对外发布。据Oracle官方公告[1],腾讯Kona 蝉联JDK18中国企业贡献排名第一,连续四次对OpenJ...

    腾讯大数据
  • retq指令异常引发的系统重启

    PID: 31918 TASK: ffff8820117a8240 CPU: 10 COMMAND: "test_gifconf"

    chudihuang
  • 信号量、互斥锁、自旋锁、原子操作

    linux内核中有多种内核锁,内核锁的作用是: 多核处理器下,会存在多个进程处于内核态的情况,而在内核态下,进程是可以访问所有内核数据的,因此要对共享数据进行保...

    233333
  • ncnn发布20220420版本,让Vulkan神经网络推理得更快

    ncnn是腾讯开源的手机端极致优化的高性能神经网络前向计算框架。 https://github.com/Tencent/ncnn Vulkan是一个低开销、跨平...

    腾讯开源
  • Android NDK开发完全剖析

    之前的两篇文章主要介绍了音视频SDK中的线程设计和消息队列,其实对那些想从Android转向音视频开发的同学来说,NDK方面的知识是不得不提的“前置条件”,因为...

    马上就说
  • kvm环境下分析虚拟机crash

    云上环境运行虚拟机有qemu crash,qemu进程本身代码异常或者被host OOM了,gdb看qemu core或者看host上log,但更多的是wind...

    惠伟

扫码关注腾讯云开发者

领取腾讯云代金券