欢迎光临散文网 会员登陆 & 注册

寻找AMD ftpm在Linux下导致卡顿的原因

2023-02-07 01:02 作者:怎么取名字这么难额啊  | 我要投稿

速通版:
    AMD的ftpm硬件做的很shi,然后版本>=6.1的内核会触发硬件bug。已经把这个bug上报了,详见:https://bugzilla.kernel.org/show_bug.cgi?id=216989

    SO, AMD NO! (这都zen3+架构了,一个屁大的ftpm模块还做不好,属实乐了)
详细版:
    起因:
各位Arch用户应该都已经在年初升级了6.1版本的内核,本来应该是很正常的升级,但是在升级后的第一次使用中就出现了随机卡顿。具体表现就是:在使用电脑1-2小时(或更长时间后),就有机率出现1-2秒的卡顿,伴随着严重掉帧和声音断续。
    然后我第一时间想到的就是之前AMD被爆出的ftpm缺陷,站内也有视频(虽然大部分都是硬蹭流量的)。

    所以自然地,我想去BIOS里面关掉ftpm选项,结果华硕的新笔记本都没这个选项。接着就是一些邪道操作,用UniversalAMDFormBrowser这个工具,里面确实是有ftpm选项,但更改时候提示覆写失败,个人猜测应该是做了保护。
    尝试降级内核到6.0.12,然后就不会出现卡顿问题了.......


    讨论:结合两个版本内核的表现,我在ASUS-Linux的Discord讨论群里面开了一个帖子

非常烂的英语,恨来自瓷器:(

    啪的一下很快啊,马上就有人回复了

    所以我马上确定,又是AMD那破ftpm模块出问题了,在另一个论坛上也有人反映联想的机器也会出现这个问题。
    然而,事情到这里也就告一段落了。因为大家都是小白,对内核排障没有任何经验,之后的讨论都是各种奇技淫巧,但是对解决问题没有任何帮助......

    调查:事情在这个月初出现了转机,先是Arch Linux的Bug追踪器有人报告了这个问题,紧接着在内核的Bugzila也出现了这个报告。
    Arch报告:https://bugs.archlinux.org/task/77340

    Kernel Bugzila:https://bugzilla.kernel.org/show_bug.cgi?id=216989

    在Bugzila的一个回复里面,有开发者提到了让我们用git二分法(git bisect)查找。
    算是情理之中的事情,毕竟linux源代码都给你了,自己排查一下故障也不是什么大事(确信)。
    已知6.0.12的内核工作正常,而6.1内核出现故障,所以中间一定有一个代码更改引发了问题,现在要做的,就是在6.0.12和6.1的提交中间取一个中点,编译测试。
    如果中间测试不通过,则说明错误是在更早的提交中引起的,此时取前半段的中点测试,反之亦然。如此反复,最终一定能找到引发问题的那个提交。
    经过3天的测试,总算是找到了引发问题的提交:

    b006c439d58db625318bf2207feabf847510a8a6

    简单来说,就是这个提交启用了一个内核线程,就是硬件随机数发生器(hwrng,一般集成在tpm中)。这本来没啥大不了的,但关键在于,当这个线程调用tpm模块达到一定次数的时候,就会引发卡顿。
    所以我尝试在最新的6.2-rc6内核中注释掉这段代码

    问题解决。
    

    报告:下一步就是向上报告问题,讨论解决方案。这个在bugzila里可以看到。现在正在等待提交者和审查者回复。

    结束了?:并没有,在二分法查找错误的过程中,我使用了一个rust编写的小工具,来检测超时。实验中我发现每次调用/dev/hwrng时,都有一定概率引发超时,当超时次数达到一定数量后,就能100%引起卡顿(具体方法是 sudo cat /dev/hwrng > /dev/null)。从5.15.91-lts到最新的6.2-rc6都能复现。
    那这一切都说明一点:这个内核线程只是表象,反倒是因为内核主动调用hwrng才让我们发现了硬件问题。
    所以很明显,正如一位RNG(随机数生成器)开发者回复的那样:“这个提交没毛病,是TPM硬件的锅”。
    这下是真的结束了:下下步就是先和提交者讨论,尝试用软件手段规避掉错误。然后再去和AMD工程师对线。
    WDNMD AMD,一个破FTPM都做不好(恼

感谢阅读,请多多指点

更新一下:amd工程师已经回复并且给出了一个补丁,但是说还需要进一步确认才能提交patch。希望能在6.2正式发布之前见到。

再更新一下:
    因为内核开发人员都很忙,加上reviwer对补丁的内容有疑惑,所以遗憾没能抓住6.2的发布窗口。

    不过总算是要进主线了:https://lore.kernel.org/lkml/20230220180729.23862-1-mario.limonciello@amd.com/T/


寻找AMD ftpm在Linux下导致卡顿的原因的评论 (共 条)

分享到微博请遵守国家法律