2014年11月18日
摘要:DPDK通过在线程中使用epoll模型,监听UIO设备的事件,来模拟操作系统的中断处理。一、中断初始化在rte_eal_intr_init()函数中初始化中断。具体如下:1、首先初始化intr_sources链表。所有UIO设备的中断都挂在这个链表上,中断处理线程通过遍历这个链表,来执行设备的中断。... 阅读全文
posted @ 2014-11-18 15:05 MerlinJ 阅读(5929) 评论(1) 推荐(1) 编辑
2014年11月17日
摘要:DPDK通过在多核设备上,创建多个线程,每个线程绑定到单独的核上,减少线程调度的开销,以提高性能。DPDK的线程分为控制线程和数据线程,控制线程一般绑定到MASTER核上,主要是接受用户配置,并传递配置参数给数据线程等;数据线程主要是处理数据包。一、初始化1、rte_eal_cpu_init()函数... 阅读全文
posted @ 2014-11-17 16:17 MerlinJ 阅读(9561) 评论(3) 推荐(1) 编辑
2014年11月12日
摘要:rte_malloc()为程序运行过程中分配内存,模拟从堆中动态分配内存空间。1 void *2 rte_malloc(const char *type, size_t size, unsigned align)3 {4 return rte_malloc_socket(type, size... 阅读全文
posted @ 2014-11-12 15:55 MerlinJ 阅读(7277) 评论(0) 推荐(1) 编辑
2014年11月10日
摘要:DPDK以两种方式对外提供内存管理方法,一个是rte_mempool,主要用于网卡数据包的收发;一个是rte_malloc,主要为应用程序提供内存使用接口。本文讨论rte_mempool。rte_mempool由函数rte_mempool_create()负责创建,从rte_config.mem_c... 阅读全文
posted @ 2014-11-10 17:15 MerlinJ 阅读(9420) 评论(2) 推荐(1) 编辑
2014年11月6日
摘要:1 前言DPDK通过使用hugetlbfs,减少CPU TLB表的Miss次数,提高性能。2 初始化DPDK的内存初始化工作,主要是将hugetlbfs的配置的大内存页,根据其映射的物理地址是否连续、属于哪个Socket等,有效的组织起来,为后续管理提供便利。2.1eal_hugepage_info... 阅读全文
posted @ 2014-11-06 12:01 MerlinJ 阅读(8681) 评论(4) 推荐(2) 编辑
2014年11月4日
摘要:本文只讨论执行"mount none /mnt/huge -t hugetlbfs"命令后,mount系统调用的执行过程(基于Linux-3.4.51),不涉及进程相关的细节。mount系统调用的内核实现: 1 SYSCALL_DEFINE5(mount, char __user *, dev_na... 阅读全文
posted @ 2014-11-04 10:54 MerlinJ 阅读(2406) 评论(0) 推荐(0) 编辑
2014年10月30日
摘要:1. bdi是什么?bdi,即是backing device info的缩写,顾名思义它描述备用存储设备相关描述信息,这在内核代码里用一个结构体backing_dev_info来表示。 bdi,备用存储设备,简单点说就是能够用来存储数据的设备,而这些设备存储的数据能够保证在计算机电源关闭时也不丢失。... 阅读全文
posted @ 2014-10-30 11:17 MerlinJ 阅读(1426) 评论(0) 推荐(0) 编辑
摘要:__setup这条宏在Linux Kernel中使用最多的地方就是定义处理Kernel的启动参数的函数及数据结构,宏定义如下:1 #define __setup(str, fn) \2 __setup_param(str, fn, fn, 0)3 #define __setup_param(str,... 阅读全文
posted @ 2014-10-30 11:14 MerlinJ 阅读(1272) 评论(0) 推荐(0) 编辑
摘要:一、引言 为了实现虚拟内存管理机制,操作系统对内存实行分页管理。自内存“分页机制”提出之始,内存页面的默认大小便被设置为 4096 字节(4KB),虽然原则上内存页面大小是可配置的,但绝大多数的操作系统实现中仍然采用默认的 4KB 页面。当某些应用的需要使用的内存达到几G、甚至几十G的时候,4KB... 阅读全文
posted @ 2014-10-30 11:10 MerlinJ 阅读(3914) 评论(0) 推荐(2) 编辑
2014年10月27日
摘要:通过位图提供的两种状态可以在非常节约内存的情况下表示开关变量,并且同类这类变量可以紧凑而高效的统一进行处理。有很多内核子系统都需要位图的支持,但是不同的情况又需要不同的位图个数,比如SMP系统上的CPU位图cpumask的位数位NR_CPUS,而内存管理区的位图数为MAX_ZONES_PER_Z... 阅读全文
posted @ 2014-10-27 14:21 MerlinJ 阅读(565) 评论(0) 推荐(0) 编辑