linux page linux软件仓库
大家好,如果您还对linux page不太了解,没有关系,今天就由本站为大家分享linux page的知识,包括linux软件仓库的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!
linux那些事之页迁移(page migratiom)
页迁移技术是内核内存管理中的关键组件,最初在NUMA系统中提出。随着内存整理、CMA和COW技术的发展,页迁移的应用越来越广泛。在NUMA系统中,进程倾向于从本地节点内存申请以优化性能,但进程调度可能导致内存跨节点迁移,增加访问延迟。通过页迁移技术,可以将远程内存页移至本地节点,减少性能波动。
在内存规整中,页迁移被用于整合零散的物理内存。系统运行期间,内存碎片化严重,内存规整技术通过页迁移将碎片化内存整合,释放出连续空闲物理内存,以满足大块内存使用需求。Linux内核提供了启动内存规整的方法,如将compact_memory设为1。
CMA技术解决了DMA申请连续物理内存时内存浪费的问题,通过划分特定区域供CMA使用。当CMA区域内存被MOVE类型申请占用,而需要连续物理内存时,系统会通过页迁移将占用内存移出CMA区域,释放连续可用物理内存。
页迁移系统调用允许用户层根据需要进行内存迁移。调用此系统调用需链接numa库。整个迁移过程始于系统调用migrate_pages,最终通过内核函数migrate_pages实施迁移。迁移模式和原因由参数决定,迁移过程涉及接触进程映射、申请新页以及内存复制。
主要有以下几种触发页迁移的情况:进程调度导致的节点切换、内存规整、CMA内存管理以及特定系统调用。内核migrate_pages函数是迁移的入口点,包含对huge page和normal page的处理逻辑,实现内存页的高效迁移。
页迁移的具体实现细节与性能优化策略在Linux内核文档中有着详细的说明,深入理解这一技术有助于优化系统性能和资源分配。页迁移技术在现代操作系统中扮演着重要角色,其有效管理和优化内存使用,提高系统效率。
linux kernel内存泄漏检测工具之page_owner
本文介绍Linux内核中内存泄漏检测工具page_owner的使用方法和原理。page泄漏是Linux系统中常见的内存泄漏类型,本文将通过详细介绍page_owner的定位方法来帮助开发者检测和解决问题。
首先,简要介绍page_owner的配置及调试工具。在介绍原理之前,需要了解稀疏内存模型SPARSEMEM,它为内存空洞和内存热插拔提供了高效支持,已经取代了原来的平坦内存模型FLATMEM。SPARSEMEM管理页的方式与FLATMEM不同,因为它能够更有效地利用物理内存地址,物理地址通常是不连续的。
接下来,我们深入探讨page_owner的原理。在SPARSEMEM中,所有物理地址都有一个对应的struct page,一个mem_section关联256M大小的物理内存。通过mem_section可以找到page_ext的额外信息,而page_ext存放着我们需要的page debug信息。上图展示了vmemmap、mem_section、page与物理地址及kernel线性地址之间的关系。在启动时,page_ext分配并存储在mm_section->page_ext中。使用时,我们通过page_ext_get获取页对应的page_ext信息,然后使用函数get_page_owner提取struct page_owner信息。检查内存泄漏的过程本质上是扫描所有page的page_ext信息,根据page是否分配的flag获取其调用栈,并对调用栈按次数排序,从而确认泄漏点。
为了验证page_owner的正确性,我们通过测试驱动进行了一系列实验。加载测试驱动,触发page泄漏。使用特定的脚本循环触发,模拟1000次页order为0的泄漏。接着,我们抓取泄漏日志,并通过page_owner_sort工具对page owner信息进行排序,进一步确认泄漏点。最终,我们可以通过显示的测试结果来定位内存泄漏的具体位置。
此外,我们还讨论了slub泄漏的问题。虽然slub本身就是在page的细化使用中,只有在触发新的slab分配时才会记录page owner信息。通过一个实验,我们验证了slub泄漏同样可以通过page owner来发现,尽管可能不如预期那么精确。
最后,我们总结了内核内存泄漏的调试方法。在实际应用中,除了使用slub debug和page owner,还应关注KernelStack泄漏和vmalloc泄漏。这些通常可以通过系统监控工具和/proc/vmallocinfo等进行统计。不过,这些不需要特别的调试工具,因此不在本文的讨论范围之内。
Linux系统如何查看Block size和page size
查看os系统块的大小
[root@dg1~]# tune2fs-l/dev/sda1|grep'Block size'
Block size: 4096
[root@dg1~]#查看os系统页的大小
[root@dg1~]# getconf PAGESIZE4096[root@dg1~]#修改块的大小:创建文件系统时,可以指定块的大小。如果将来在你的文件系统中是一些比较大的文件的话,使用较大的块大小将得到较好的性能。将ext2文件系统的块大小调整为4096byte而不是缺省的1024byte,可以减少文件碎片,加快fsck扫描的速度和文件删除以及读操作的速度。另外,在ext2的文件系统中,为根目录保留了5%的空间,对一个大的文件系统,除非用作日志文件,5%的比例有些过多。可以使用命令# mke2fs-b 4096-m 1/dev/hda6将它改为1%并以块大小4096byte创建文件系统。使用多大的块大小,需要根据你的系统综合考虑,如果系统用作邮件或者新闻服务器,使用较大的块大小,虽然性能有所提高,但会造成磁盘空间较大的浪费。比如文件系统中的文件平均大小为 2145byte,如果使用4096byte的块大小,平均每一个文件就会浪费1951byte空间。如果使用1024byte的块大小,平均每一个文件会浪费927byte空间。在性能和磁盘的代价上如何平衡,要看具体应用的需要。