Skip to content

Master 分支的tlb处理问题 #52

@ZhiyuanSue

Description

@ZhiyuanSue

事情有些复杂。
最开始我为了修复sel4bench的性能问题,尝试了进行修复,其修复在fix_fastpath分支,主要包含两个问题,一个是fastpath没有进去的问题,另一个是tlb刷新的问题。前者不是这个issue需要讨论的,不说,先说后者,具体如图所示

Image 相当于每次都把所有的tlb全清。那每次都清理tlb,这个性能能好么,所以perf需要修复这个bug,也是没毛病的。

他的修复一个是注释掉这里,另一个是在unmap_page函数最后改为invalidate_tlb_by_asid_va(asid, vptr);原先用的是invalidate_tlb_by_asid函数,所以过不去。

OK,但是,注意,这个fix_fastpath分支相比于master分支,所衍生出来的commit,是在yfblock做了一堆提交改动之前的。

于是,我试图把这个改动同步到master分支,但是ci过不去。

经过最小化的尝试,我确定就是这个tlb刷新的问题。

那为什么在更早的commit衍生出来的版本能过去,最新的master分支再加上这个补丁就过不去呢?

我试图查看yfblock做了什么,我看到很多地方改成了paddr的宏,举个例子:

Image
这里调用的这个函数就是之前这里需要注释掉全刷tlb函数的代码。

当然这肯定不止这一处地方。

所以我很有理由怀疑,是因为yfblock的更改导致了这里的问题,至于具体机制我认为是这样的,按道理,需要所有函数调用链路上的paddr都被正确的修改,他的修改才会生效,但是他应该没改对,然而,tlb清理的地址改错了会有什么影响呢? master的代码是全清所有tlb啊,所以就算改错了,也没有影响,只有当我试图,去去除这个tlb全清代码之后,他才会出bug。

原理说完了,啥时候能修好我也不知道。rel4项目已经很久没开会了,如果只是要给个测评结果写毕业论文,那我用fix fastpath分支,本地跑跑就好了。那我就不知道啥时候能搞定(摊手)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions