V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
lxz6597863
V2EX  ›  问与答

如何理解 mmap 的 offset

  •  
  •   lxz6597863 · 2022-09-19 12:12:05 +08:00 · 844 次点击
    这是一个创建于 794 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近看到 AF_XDP

    https://www.kernel.org/doc/html/v4.19/networking/af_xdp.html#rings

    /usr/include/linux/if_xdp.h , 系统定义了 4 个 mmap offset

    /* Pgoff for mmaping the rings */
    #define XDP_PGOFF_RX_RING			  0
    #define XDP_PGOFF_TX_RING		 0x80000000
    #define XDP_UMEM_PGOFF_FILL_RING	0x100000000ULL
    #define XDP_UMEM_PGOFF_COMPLETION_RING	0x180000000ULL
    

    使用示例

    https://github.com/libbpf/libbpf/blob/b91f53ec5f1aba2a9d01dc00c4434063abd921e8/src/xsk.c#L265

    https://github.com/libbpf/libbpf/blob/b91f53ec5f1aba2a9d01dc00c4434063abd921e8/src/xsk.c#L282

    如上,在这些 mmap 用法上 offset 都远大于 length,为什么不会出错呢

    3 条回复    2023-01-14 01:08:27 +08:00
    lxz6597863
        2
    lxz6597863  
    OP
       2022-09-19 12:30:30 +08:00
    或者说


    fd = socket(AF_XDP, SOCK_RAW, 0);


    map = mmap(NULL, off.cr.desc + umem->config.comp_size * sizeof(__u64),
    PROT_READ | PROT_WRITE, MAP_SHARED | MAP_POPULATE, umem->fd,
    XDP_UMEM_PGOFF_COMPLETION_RING);


    这个 fd 能 mmap 映射的最大 offset 多少呢?
    zzxgz
        3
    zzxgz  
       2023-01-14 01:08:27 +08:00   ❤️ 1
    我认为 offset 大于 length 是没问题的。

    我看了一下 mmap 的 man page( https://man7.org/linux/man-pages/man2/mmap.2.html),里面说道:

    ```
    The contents of a file mapping (as opposed to an anonymous
    mapping; see MAP_ANONYMOUS below), are initialized using length
    bytes starting at offset offset in the file (or other object)
    referred to by the file descriptor fd.
    ```

    我的理解是,这个函数是在 fd+offset 这个地址上,去初始化 length 这么多个 bytes 。所以 offset 跟 length 谁大谁小,应该不重要。

    我最近也在看这个 AF_XDP ,一开始看的也是你这个例子。后来我发现了一个可以多线程,每个线程控制一个 AF_XDP socket 的例子,可能你以后也会用上: https://github.com/xdp-project/bpf-examples/commits/master/AF_XDP-forwarding/xsk_fwd.c
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3481 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 00:49 · PVG 08:49 · LAX 16:49 · JFK 19:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.