摘要:
前言 在进行内存访问时的大概流程如下: 由CPU发出访存指令 地址转化,MMU根据页表转换或者通过TLB得到物理地址 访问cache 如果cache miss,访问物理内存读入cache 因此,访问一个内容在cache中的物理内存能大幅度提高访问速度,基于这个原理,在Linux中将内容仍在cache 阅读全文
posted @ 2023-10-07 19:22
ZouTaooo
阅读(475)
评论(0)
推荐(0)
摘要:
前言 伙伴系统的内存释放API分析,基于Linux 2.6.25。 对外封装的内存释放API分为两类,free_page和free_pages以虚拟地址为参数,__free_page和__free_pages以page指针为参数,可以使用virt_to_page实现虚拟地址到page指针的转化,最终 阅读全文
posted @ 2023-10-07 18:08
ZouTaooo
阅读(169)
评论(0)
推荐(0)
摘要:
前言 伙伴系统实现了对页帧的管理,并对外提供分配和释放的接口。所有的上层内存分配,比如vmalloc、slab分配器等都是通过伙伴系统暴露的接口申请一个或者多个连续页帧。 伙伴系统常用封装API Linux内存管理的最上层包含多个Node,Node管理多个zone(DMA、NORMAL、HIGHME 阅读全文
posted @ 2023-10-07 18:08
ZouTaooo
阅读(79)
评论(0)
推荐(0)
摘要:
前言 伙伴系统是Linux内存管理的精华部分,所有的物理内存管理使用的都是该机制。伙伴系统保障了内存分配的速度和效率,同时思想和实现又相当简单。这里对伙伴系统的结构进行简要的介绍。 伙伴系统结构 在zone中有一个成员free_area是伙伴系统的实现的关键部分,free_area是一个struct 阅读全文
posted @ 2023-10-07 18:07
ZouTaooo
阅读(147)
评论(0)
推荐(0)
摘要:
前言 伙伴系统的内存分配API解析,基于Linux 2.6.25。 GFP_MASK GFP是get free page的缩写,GFP_MASK是一系列内存分配的掩码,指导伙伴系统寻找合适的内存块进行分配,同时在分配过程中按照掩码的指示进行内存相关的操作,比如内存回收、分配失败后的行为等。 以下四个 阅读全文
posted @ 2023-10-07 17:15
ZouTaooo
阅读(373)
评论(0)
推荐(0)
摘要:
前言 ZONE_MOVABLE是一个虚拟内存域,ZONE_MOVABLE内存区域的范围实际上会覆盖高端内存或者NORMAL内存。 ZONE_MOVABLE有两个作用,其一是解决内存碎片问题,将内存域分为可移动和不可移动的(对于可移动和不可移动概念不清楚的可以先了解一下迁移类型以及已分配内存的类型划分 阅读全文
posted @ 2023-10-07 14:43
ZouTaooo
阅读(318)
评论(0)
推荐(0)
摘要:
前言 核心转储文件,可以在程序dump时将当时的程序状态记录下,配合gdb工具进行分析。适合在长期运行的程序挂掉时进行分析。 开启coredump 设置coredump文件的limit # 临时设置 ulimit -c unlimited # 永久设置 vim /etc/security/limit 阅读全文
posted @ 2023-10-07 13:46
ZouTaooo
阅读(140)
评论(0)
推荐(0)
摘要:
前言 GDB,the GNU Project Debugger,一种命令行调试工具。这里我将遇到的一些重要用法记录下来。 使用GDB前的准备 编译选项需要加上-g -O0,用于产生调试信息,并且禁止优化(可能编译结果与源代码信息不匹配)。 断点和观察点 断点,也就是break point,当程序运行 阅读全文
posted @ 2023-10-07 13:44
ZouTaooo
阅读(159)
评论(0)
推荐(0)
摘要:
前言 RDT的监控数据累计和资源分配策略的关键就是CLOSID和RMID的分配策略。 CLOSID和RMID管理 CLOSID管理 RDT中的资源通过控制组进行分配,控制组对于各类资源进行划分或者限制。每一个控制组用一个CLOSID进行标识,由于CLOSID的数量有限所以在内核中通过一个位图进行表示 阅读全文
posted @ 2023-10-07 10:27
ZouTaooo
阅读(484)
评论(0)
推荐(0)
摘要:
前言 在Resctrl中可编程的文件主要有两个,schemata指定资源分配策略,cpus则为cpu绑定default_closid和default_rmid。 修改cpus文件 cpus文件按照所处目录的类型不同有两种操作,当所处目录类型为CTRL-MON group时会调用cpus_ctrl_w 阅读全文
posted @ 2023-10-07 10:22
ZouTaooo
阅读(198)
评论(0)
推荐(0)
摘要:
前言 resctrl是rdt机制的一个用户态接口,通过对rdt技术进行封装,提供了一套资源分配和监控机制的接口,方便用户进行使用。本文从resctrl的资源分配和监控的角度对内核源码实现进行了分析,参考的kernel版本为4.19.287。 Resctrl下的CPU状态变化 resctrl中有两种g 阅读全文
posted @ 2023-10-07 10:22
ZouTaooo
阅读(332)
评论(0)
推荐(0)
摘要:
前言 Resctrl文件系统是Linux内核在4.10提供的对RDT技术的支持,作为一个伪文件系统在使用方式上与cgroup是类似,通过提供一系列的文件为用户态提供查询和修改接口。本文就resctrl文件系统的使用进行了详细说明,内容基本来自于Linux Documentation中的精华部分。 使 阅读全文
posted @ 2023-10-07 10:22
ZouTaooo
阅读(1364)
评论(0)
推荐(0)
摘要:
Intel-RDT 技术浅析 前言 RDT技术全称 Resource Director Technology,RDT技术提供了LLC(Last Level Cache)以及MB(Memory Bandwidth)内存带宽的分配和监控能力。 RDT的主要功能有以下几个: CAT(Cache Alloc 阅读全文
posted @ 2023-10-07 10:22
ZouTaooo
阅读(1083)
评论(0)
推荐(0)
摘要:
前言 在(一)我们已经清楚了Resctrl中RMID和CLOSID的切换规则是怎样的。 在(二)中对内核中的CLOSID和RMID的分配、释放过程进行了详细解读。 在后续的章节将会对Resctrl文件系统中重要的文件操作触发的内核行为进行解读。本章将对Resctrl中的建组操作进行分析。 rdt g 阅读全文
posted @ 2023-10-07 10:21
ZouTaooo
阅读(193)
评论(0)
推荐(0)
摘要:
前言 RDT出了提供资源的分配能力外,还提供了对llc和内存带宽等资源的监控能力,用于系统的争抢检测进行性能优化,在resctrl文件系统中监控的数据放在mon_data目录下。 监控事件的记录 内核代码主要在/arch/x86/kernel/cpu/intel_rdt_monitor.c。 监控组 阅读全文
posted @ 2023-10-07 10:21
ZouTaooo
阅读(186)
评论(0)
推荐(0)
摘要:
前言 task的写入会导致task绑定的CLOSID和RMID改变,本文对Resctrl中task的迁移过程进行了分析。 在CTRL-MON group、MON group之间移动task 对tasks的写操作会触发rdtgroup_move_task,调用__rdtgroup_move_task。 阅读全文
posted @ 2023-10-07 10:21
ZouTaooo
阅读(77)
评论(0)
推荐(0)

浙公网安备 33010602011771号