dpdk代码分析——内存初始化

一. 前言

dpdk 是 intel 开发的x86芯片上用于高性能网络处理的基础库,业内比较常用的模式是linux-app模式,即利用该基础库,在用户层空间做数据包处理,有了这个基础库,可以方便地在写应用层的网络包处理高性能程序,目前该库已经开源。

Main libraries

  • multicore framework多核框架,dpdk库面向intel i3/i5/i7/ep 等多核架构芯片,内置了对多核的支持

  • huge page memory 内存管理,dpdk库基于linux hugepage实现了一套内存管理基础库,为应用层包处理做了很多优化

  • ring buffers   共享队列,dpdk库提供的无锁多生产者-多消费者队列,是应用层包处理程序的基础组件

  • poll-mode drivers 轮询驱动,dpdk库基于linux uio实现的用户态网卡驱动

下面分几个模块说明上述组件的功能和实现。

二. 内存管理

1. hugepage技术

hugepage(2M/1G..)相对于普通的page(4K)来说有几个特点,a hugepage这种页面不受虚拟内存管理影响,不会被替换出内存,而普通的4kpage如果物理内存不够可能会被虚拟内存管理模块替换到交换区。 b同样的内存大小,hugepage 产生的页表项数目远少于 4kpage. 举一个例子,用户进程需要使用 4M 大小的内存,如果采用4Kpage, 需要1K的页表项存放虚拟地址到物理地址的映射关系,而采用hugepage 2M 只需要产生2条页表项,这样会带来两个后果,一是使用hugepage的内存产生的页表比较少,这对于数据库系统等动不动就需要映射非常大的数据到进程的应用来说,页表的开销是很可观的,所以很多数据库系统都采用hugepage技术。二是tlb冲突率大大减少,tlb驻留在cpu的1级cache里,是芯片访问最快的缓存,一般只能容纳100多条页表项,如果采用hugepage,则可以极大减少tlb miss 导致的开销:tlb命中,立即就获取到物理地址,如果不命中,需要查 rc3->进程页目录表pgd->进程页中间表pmd->进程页框->物理内存,如果这中间pmd或者页框被虚拟内存系统替换到交互区,则还需要交互区load回内存。。

总之,tlb miss是性能大杀手,而采用hugepage可以有效降低tlb miss

linux 使用hugepage的方式比较简单,

  • /sys/kernel/mm/hugepages/hugepages-2048kB/ 通过修改这个目录下的文件可以修改hugepage页面的大小和总数目
  • mount -t hugetlbfs nodev /mnt/huge linux将hugepage实现为一种文件系统hugetlbfs,需要将该文件系统mount到某个文件
  • mmap /mnt/huge 在用户进程里通过mmap 映射hugetlbfs mount 的目标文件,这个mmap返回的地址就是大页面的了

2. 多进程共享

mmap系统调用可以设置为共享的映射,dpdk内存共享就依赖于此,在多个进程中分为两种角色,第一种是主进程(RTE_PROC_PRIMARY),第二种是从进程(RTE_PROC_SECONDARY)。

主进程只有一个,必须在从进程之前启动,负责执行 DPDK 库环境的初始化,从进程 attach 到主进程初始化的DPDK 上,主进程先 mmap hugetlbfs 文件,构建内存管理相关结构将这些结构存入 hugetlbfs 上的配置文件rte_config,然后其他进程mmap rte_config文件,获取内存管理结构,dpdk采用了一定的技巧,使得最终同样的共享物理内存在不同进程内部对应的虚拟地址是完全一样的,意味着一个进程内部的基于dpdk的共享数据和指向这些共享数据的指针,可以在不同进程间通用。

内存全局配置结构rte_config

​rte_config 是每个程序私有的数据结构,这些东西都是每个程序的私有配置。

lcore_role:这个DPDK程序使用-c参数设置的它同时跑在哪几个核上。

master_lcore:DPDK的架构上,每个程序分配的lcore_role有一个主核,对使用者来说影响不大。

lcore_count&#

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值