首页 > 系统相关 >Linux !ko/5.17-BBRplus AMD64(X86_64)内核致命的 futex_wait 函数死锁问题。

Linux !ko/5.17-BBRplus AMD64(X86_64)内核致命的 futex_wait 函数死锁问题。

时间:2024-10-10 23:48:21浏览次数:11  
标签:X86 ko futex 问题 死锁 内核 Linux CPU wait

!ko 表示系统内核(system-kernel)

致命:

在 CentOS(RedHat)、Ubuntu、Debian 等多个发行版本 Linux 操作系统上,若人们升级 5.17-BBRplus 版本内核,那么在应用程式频繁的 futex_wait(syscall)等待唤醒时,或会存在 futex_wait 函数发生死锁的疑难问题。

LMP:

futex(2) - Linux manual page (man7.org)

注意:

该问题发生时,应用程序将无法被 KILL -9、系统无法回收进程资源,且若运行在 screen 之中,则 screen 无法被关闭,产生僵尸进程,持续耗费设备硬件及内存资源,直到设备系统被重启。

即为:

该问题常见于,基于 EPOLL、IO-URING 结构,且多线程驱动的应用程序(基于事件/消息驱动模型)。

或应用程式多线程时,大量使用,例如: pthread_mutex_lock,其底层实现通过 syscall 系统调用 futex(内核同步)。

额外补充一点,产生致命问题还有一个附加条件:

A:设备须为多个CPU核,而非一个CPU核,单个CPU核上,并未发现存在该问题。

解决办法:

采用发行版默认的内核版本,例如:5.4、6.1.4 ... 

后记:

该问题在本人一个开源项目工具之中被发现,我本人持续追踪了该问题且尝试进行应用层修复,大约耗费两个月左右把。

起初以为是应用程序本身的问题,把可能会导致该问题发生(deadlock)的地方,全部重新编写,但仍旧没有解决它。

所以,耗费了大量的精力去分析代码本身是否存在,设计之外的疑难问题漏洞,这包含对三方库(依赖项)源代码的细致探索及分析。

并且鉴于,该问题并非是,必定重现的小问题,它复现需要程序稳定工作、且交换大量的数据吞吐量,才有一定的概率性复现,即:至少需要先跑 7*24 小时,所以定位它就变得很困难及费事。

标签:X86,ko,futex,问题,死锁,内核,Linux,CPU,wait
From: https://blog.csdn.net/liulilittle/article/details/142834657

相关文章

  • 逆向基础 || x86汇编
    x86汇编1.寄存器本环境寄存器大小为2字节=1字型=16bit早期的x86CPU只有8个寄存器,而且每个都有不同的用途,通过DOS环境下我们可以看到有各种寄存器,接下来就一步步的认识它们!AX-->ahalBX-->bhblCX-->chclDX-->dhdl上面4种......
  • 手写X86——第五节——X86实模式下的编程介绍2(寄存器赋初值)
    ......
  • java 死锁问题排查
    排查过程1.识别死锁现象通常,死锁会表现为应用程序挂起,不响应用户请求或cpu使用率下降。2.收集线程转储当应用出现不响应时,可以使用以下方法收集线程转储:jstack-l进程ID>threaddump.txt3.分析线程转储从生成的线程转储寻找"deadlock"等相关信息。java会在发现死......
  • 在 X86_64(amd64) 平台上的docker支持打包跨平台的镜像(如arm64)
    在信创,ARM开始崛起的现在,Docker也从一开始的只支持x86_64架构变为支持各种架构了,虽然Docker的目的是保证只要Docker安装好,在任意机器上运行都能达到一样的效果,但是这个的前提是Docker镜像的架构和当前服务器的架构一致,以前都是x84_64架构自然可以,但现在也有别的架构,因此......
  • Codeforces Round 970 (Div. 3) D. Sakurako‘s Hobby
     链接cf_Sakurako‘sHobby大意:给一堆点和边,并给出点的颜色,输出每个点能遍历到几个黑点思路:1、这些点边里面有拓扑结构,也有环2、先处理拓扑排序的一些点,依次遍历无父节点的即可,之后就会剩下环3、有环的说明每个点都能去到环内任意一点,那么直接就记录一个sum,然后递归......
  • CentOS报错:Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&
    CentOS报错:Couldnotretrievemirrorlisthttp://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock32errorwas14:curl#6-"Couldnotresolvehost:mirrorlist.centos.org;Unknownerror"关于CentOS报错:Couldnotretrievemirr......
  • 使用yum安装报错:Could not retrieve mirrorlist http://mirrorlist.centos.org/?relea
    安装wget命令yum-yinstallwget报错,无法找到镜像 测试是否是网络问题抓包正常,网络没有问题;尝试更新yum又开始报错尝试分析问题原因出现这个错误是因为使用的CentOS7仓库已经被归档,当前的镜像地址无法找到所需的文件。CentOS7的官方支持已经结束,部分仓库已被移至归档......
  • Databinding(kotlin)
    简单使用(只作为view获取)build.gradle.kts配置android{dataBinding{enable=true}}activity注入//setContentView(R.layout.activity_main)valbinding:ActivityMainBinding=DataBindingUtil.setContentView(this,R.layout.activity_main......
  • 高通拟收购英特尔——Arm与x86之争到此为止?
    高通拟收购英特尔——Arm与x86之争到此为止?OSC开源社区 2024年09月21日12:02 广东↑点击上方蓝字关注「OSC开源社区」根据《华尔街日报》的独家报道,高通与英特尔近期内进行过接洽,商讨了收购事宜。报道称,芯片巨头高通公司在最近几天向竞争对手英特尔发起了收购要约。知情人......
  • Introduction to X86-64 Assembly Programming
    Project3:IntroductiontoX86-64AssemblyProgrammingGradingFormGoalInthisprojectyouwillwriteprogramsinx86-64assemblylanguage.Itisimportantthatyoulearnthex86-64assemblylanguagesinceitistheoneyouuseeverydayinyourPC,Ma......