gpt4 book ai didi

performance - 用户空间与内核空间程序性能差异

转载 作者:行者123 更新时间:2023-12-04 22:34:16 25 4
gpt4 key购买 nike

我有一个顺序用户空间程序(某种内存密集型搜索数据结构)。该程序的性能(以 CPU 周期数衡量)取决于底层数据结构的内存布局和数据缓存大小 (LLC)。

到目前为止,我的用户空间程序已经调到死了,现在我想知道是否可以通过将用户空间代码移入内核(作为内核模块)来获得性能提升。我可以想到以下提高内核空间性能的因素......

  • 没有系统调用开销(每个系统调用获得多少 CPU 周期)。这不太重要,因为我几乎没有在我的程序中使用任何系统调用,除了在程序启动时分配内存。
  • 控制调度,我可以创建一个内核线程并让它在给定的内核上运行而不会被丢弃。
  • 我可以使用 kmalloc 内存分配,因此可以更好地控制分配的内存,还可以通过控制分配的内存来更精确地控制缓存着色。值得尝试吗?

  • 我对内核专家的问题...
  • 我是否错过了上述列表中可以进一步提高性能的任何因素?
  • 是否值得尝试,或者直接知道我不会得到太多的性能改进?
  • 如果内核中的性能提升是可能的,是否有任何估计它可以获得多少增益(任何理论猜测)?

  • 谢谢。

    最佳答案

    关于第 1 点 :内核线程仍然可以被抢占,所以除非你做很多系统调用(你不是),否则这不会给你带来太多好处。

    关于第 2 点 : 你可以通过设置它的亲和性来将一个线程固定到一个特定的核心,使用 sched_setaffinity() 在 Linux 上。

    关于第 3 点 : 你期待什么额外的控制?您已经可以使用 mmap() 从用户空间分配页面对齐的内存。 .这已经让您可以控制缓存的集合关联性,并且您可以将内联汇编或编译器内在函数用于任何手动预取提示或非临时写入。在内核和用户空间中分配的内存的主要区别在于 kmalloc()分配有线(不可分页)内存。我不明白这会有什么帮助。

    我怀疑您会在使用 SIMD、多线程或进行进一步的算法或内存优化的并行化方面看到更好的投资返回率。

    关于performance - 用户空间与内核空间程序性能差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11272478/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com