Skip to the content.

mmap 的观测

@[
        rdma_user_mmap_io+0
        ib_uverbs_mmap+140
        __mmap_new_vma+212
        __mmap_region+996
        mmap_region+204
        do_mmap+984
        vm_mmap_pgoff+324
        ksys_mmap_pgoff+356
        __arm64_sys_mmap+52
        invoke_syscall.constprop.0+100
        el0_svc_common.constprop.0+68
        do_el0_svc+36
        el0_svc+60
        el0t_64_sync_handler+268
        el0t_64_sync+432
]: 4
@[
        mlx5_ib_mmap+0
        __mmap_new_vma+212
        __mmap_region+996
        mmap_region+204
        do_mmap+984
        vm_mmap_pgoff+324
        ksys_mmap_pgoff+356
        __arm64_sys_mmap+52
        invoke_syscall.constprop.0+100
        el0_svc_common.constprop.0+68
        do_el0_svc+36
        el0_svc+60
        el0t_64_sync_handler+268
        el0t_64_sync+432
]: 6

[!NOTE] 参考神奇海螺的意见,有待验证

“是如何 mmap 的”可以分成两步理解:

  1. 驱动决定“映射什么”
  1. RDMA core 负责“怎么映射”

也就是说:

观察到 zero copy 才可以的

可以观察到没有系统调用就可以了吧

中断到 event 的通知过程

总体来说,就是这个机制了,ib_uverbs_comp_handler 中可以找到的

[
        ib_uverbs_comp_handler+0
        mlx5_cq_tasklet_cb+272
        tasklet_action_common+340
        tasklet_action+56
        handle_softirqs+300
        __do_softirq+28
        ____do_softirq+24
        call_on_irq_stack+36
        do_softirq_own_stack+36
        __irq_exit_rcu+316
        irq_exit_rcu+24
        el1_interrupt+72
        el1h_64_irq_handler+24
        el1h_64_irq+132
        default_idle_call+56
        cpuidle_idle_call+376
        do_idle+156
        cpu_startup_entry+56
        secondary_start_kernel+224
        __secondary_switched+192
]: 2

为什么 demo 中需要使用 tcp ?

为什么 ping 可以直接用?

rdma-core 提供了 rping ,基本的使用方法是:

server 运行 : rping -s

client 运行 : rping -c -a 10.0.3.2 -v

想想也的确是这样的,就是通过 rdma 来链接的

最多支持多个用户态程序使用 poll 模式?

估计和 QP 和 CQ 有关的

• QP 是 Queue Pair。

它是 RDMA 最核心的通信对象,由一对队列组成:

应用往 QP 上发 WR,网卡从 QP 取请求执行,完成后把结果写到 CQ。

可以粗略理解为:

常见 QP 类型有:

QP 还会经历状态机:

本站所有文章转发 CSDN 将按侵权追究法律责任,其它情况随意。