System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本申请涉及内存检测,尤其涉及dpdk大页内存泄露检测方法、装置及系统。
技术介绍
1、dpdk(data plane development kit)是intel提供的数据平面开发工具集,为用户空间高效的数据包处理提供库函数和驱动的支持。dpdk关键技术之一是通过使用大页内存(hugepages),降低访存开销(cache miss)。因此,dpdk不使用常规内存分配函数,如“malloc()”,dpdk通过自己的api来管理已预先分配的大页内存。dpdk可以利用多核cpu极大提高数据处理性能和吞吐量,提高数据平面应用程序的工作效率。但也使得原先基于普通应用程序的调试手段无法应用到dpdk应用程序上。
2、目前,如asan(address sanitizer)等大多数的内存检测工具,通常会申请一块影子内存(shadow memory)来记录用户程序所使用的主内存的可用性,反映真实内存中的每个字节的访问是否安全。影子内存无法被用户直接读写,需要编译器生成相关的代码来进行访问。内存的分配和释放都会被写入影子内存,每次读写前也都会通过影子内存来判断访问的合法性;而后通过在被保护的堆,栈、全局变量周围建立标记为中毒状态的红区(redzone),在释放内存时并不直接将其释放,而是进行标记和隔离,这样当其被再次访问时就能根据状态发现异常。
3、然而,基于以上原理来实现内存检测的现有内存检测工具无法有效应用在dpdk大页内存泄露检测上,具体原因为:dpdk通过在编译阶段对内存申请释放函数插桩,在程序申请内存时在内存前后
4、因此,亟需设计一种能够实现dpdk大页内存泄露检测、无需侵入用户侧的应用程序并能够降低dpdk大页内存泄露检测所需的应用程序资源占用率的内存检测方法。
技术实现思路
1、鉴于此,本申请实施例提供了dpdk大页内存泄露检测方法、装置及系统,以消除或改善现有技术中存在的一个或更多个缺陷。
2、本申请的一个方面提供了一种dpdk大页内存泄露检测方法,包括:
3、基于预设在用户侧的dpdk大页内存堆栈上的ebpf用户空间探针,在内核中接收针对dpdk大页内存的内存变更信息;
4、根据所述内存变更信息更新预设在所述内核中的内存记录表,并在检测到该内存记录表中存在疑似泄露内存时,将所述疑似泄露内存对应的标识信息发送至所述用户侧以进行输出。
5、在本申请的一些实施例中,所述内存变更信息包括:内存分配信息;
6、相对应的,所述基于预设在用户侧的dpdk大页内存堆栈上的ebpf用户空间探针,在内核中接收针对dpdk大页内存的内存变更信息,包括:
7、在dpdk大页内存被调用时,基于预设在所述dpdk大页内存堆栈上的ebpf用户空间探针,自该dpdk大页内存堆栈的接口获取针对dpdk大页内存的所述内存分配信息,其中,该内存分配信息包括:被调用内存所属的堆栈id、内存地址和内存大小。
8、在本申请的一些实施例中,所述内存变更信息包括:内存释放信息;
9、相对应的,所述基于预设在用户侧的dpdk大页内存堆栈上的ebpf用户空间探针,在内核中接收针对dpdk大页内存的内存变更信息,包括:
10、在dpdk大页内存被释放时,基于预设在所述dpdk大页内存堆栈上的ebpf用户空间探针,自该dpdk大页内存堆栈的接口获取针对dpdk大页内存的所述内存释放信息,其中,所述内存释放信息包括:被释放内存所属的内存地址。
11、在本申请的一些实施例中,所述内存记录表包括:分配信息哈希表和堆栈跟踪表;
12、相对应的,所述根据所述内存变更信息更新预设在所述内核中的内存记录表,包括:
13、若接收到所述内存分配信息,则在所述分配信息哈希表中新增所述被调用内存所属的堆栈id、内存地址和内存大小之间的对应关系以形成所述分配信息哈希表中的内存分配记录,并对应更新所述堆栈跟踪表;
14、若接收到所述内存释放信息,则在所述分配信息哈希表中查找该内存释放信息中的被释放内存所属的内存地址对应的所述内存分配记录,并在所述分配信息哈希表中删除该内存分配记录,并对应更新所述堆栈跟踪表。
15、在本申请的一些实施例中,在所述将所述疑似泄露内存对应的标识信息发送至所述用户侧以进行输出之前,还包括:
16、接收用户侧向所述分配信息哈希表发送的内存泄露检测请求,并基于该内存泄露检测请求在所述分配信息哈希表中查找是否包含有针对同一堆栈id的连续内存分配记录,若是,则将该堆栈id对应的dpdk大页内存堆栈判定为当前疑似存在内存泄露。
17、在本申请的一些实施例中,所述在检测到该内存记录表中存在疑似泄露内存时,将所述疑似泄露内存对应的标识信息发送至所述用户侧以进行输出,包括:
18、自所述分配信息哈希表和所述堆栈跟踪表中提取当前疑似存在内存泄露的dpdk大页内存堆栈对应的标识信息,该标识信息包括当前疑似存在内存泄露的dpdk大页内存堆栈的所有内存分配记录以及该dpdk大页内存堆栈的上下文信息;
19、将当前疑似存在内存泄露的dpdk大页内存堆栈对应的标识信息发送至所述用户侧以更新用户侧的映射表,以使用户侧输出该映射表以进行显示。
20、在本申请的一些实施例中,在所述基于预设在用户侧的dpdk大页内存堆栈上的ebpf用户空间探针,在内核中接收针对dpdk大页内存的内存变更信息之前,还包括:
21、在用户侧的各个dpdk大页内存堆栈对应的分配内存接口和释放内容接口上分别设置ebpf用户空间探针;
22、以及,在内核中构建用于存储针对所述dpdk大页内存的内存变更信息的内存记录表。
23、本申请的另一个方面提供了一种dpdk大页内存泄露检测装置,包括:
24、探针监测模块,用于基于预设在用户侧的dpdk大页内存堆栈上的ebpf用户空间探针,在内核中接收针对dpdk大页内存的内存变更信息;
25、泄露检测模块,用于根据所述内存变更信息更新预设在所述内核中的内存记录表,并在检测到该内存记录表中存在疑似泄露内存时,将所述疑似泄露内存对应的标识信息发送至所述用户侧以进行输出。
26、本申请的第三个方面提供了一种dpdk大页内存泄露检测系统,包括:设置在内核中的ebpf后端程序单元以及设置在用户侧的ebpf前端程序单元;
27、所述ebpf后端程序单元用于执行所述的dpdk大页内存泄露检测方法;
28、所述ebpf前端程序单元用于在检测到该内存记本文档来自技高网...
【技术保护点】
1.一种DPDK大页内存泄露检测方法,其特征在于,包括:
2.根据权利要求1所述的DPDK大页内存泄露检测方法,其特征在于,所述内存变更信息包括:内存分配信息;
3.根据权利要求2所述的DPDK大页内存泄露检测方法,其特征在于,所述内存变更信息包括:内存释放信息;
4.根据权利要求3所述的DPDK大页内存泄露检测方法,其特征在于,所述内存记录表包括:分配信息哈希表和堆栈跟踪表;
5.根据权利要求4所述的DPDK大页内存泄露检测方法,其特征在于,在所述将所述疑似泄露内存对应的标识信息发送至所述用户侧以进行输出之前,还包括:
6.根据权利要求5所述的DPDK大页内存泄露检测方法,其特征在于,所述在检测到该内存记录表中存在疑似泄露内存时,将所述疑似泄露内存对应的标识信息发送至所述用户侧以进行输出,包括:
7.根据权利要求1至6任一项所述的DPDK大页内存泄露检测方法,其特征在于,在所述基于预设在用户侧的DPDK大页内存堆栈上的eBPF用户空间探针,在内核中接收针对DPDK大页内存的内存变更信息之前,还包括:
...【技术特征摘要】
1.一种dpdk大页内存泄露检测方法,其特征在于,包括:
2.根据权利要求1所述的dpdk大页内存泄露检测方法,其特征在于,所述内存变更信息包括:内存分配信息;
3.根据权利要求2所述的dpdk大页内存泄露检测方法,其特征在于,所述内存变更信息包括:内存释放信息;
4.根据权利要求3所述的dpdk大页内存泄露检测方法,其特征在于,所述内存记录表包括:分配信息哈希表和堆栈跟踪表;
5.根据权利要求4所述的dpdk大页内存泄露检测方法,其特征在于,在所述将所述疑似泄露内存对应的标识信息发送至所述用户侧以进行输出之前,还包括:
6.根据权利要求5所述的dpdk大页内存泄露检测方法,其特征在于,所述在检测...
【专利技术属性】
技术研发人员:张光华,
申请(专利权)人:中科驭数北京科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。