标签:缓存 默认 net 刷新 硬件 暂停 块设备 开发 多线程
在我眼里,Linux系统主要有如下部分组成
虚拟内存:Linux把应用程序实际使用的虚拟地址以页为单位映射到物理地址,从而提高了内存资源的利用率;每个应用程序只能看到属于自己的统一的,连续的虚拟地址空间,从而保证了不同应用程序的隔离性,也降低了编程复杂度。同时,虚拟内存机制可以实现共享内存、写时拷贝、内存压缩、大页等等一系列优化。
页表与TLB:Linux中,每个进程都拥有一个页表,用于记录本进程的虚拟地址到物理地址的映射关系,为了减少页表的占用空间,Linux通常会使用多级页表,由此实现了页表项按需分配;为了加速虚拟地址到物理地址翻译的速度,MMU中包含了一个特殊的TLB缓存,缓存了虚拟页号到物理页号的映射关系,如果能在此缓存中找到所需要的映射,就免去了从内存读取所需页表项的代价。
页替换策略:常见的策略有FIFO,Second Chance,LRU,Clock,它们各有优缺点,目前衍生出了LRU-K,LIRS等更优化的策略。
物理内存分配:Linux内核本身的数据结构,如页表,task_struct
等都需要物理内存分配器来为其分配内存。物理内存分配器的优劣的重要评价维度是内存碎片和分配速度,对于大块内存,Linux使用伙伴系统;对于小内存,Linux使用SLAB分配器。
读文件在Linux中大致会经历一下流程
read
,提供一个文件描述符,以及用户态buffer的首地址。read
中提供的文件描述符在进程的打开文件表中找出该文件描述符对应的file
数据结构性能分析通常有以下工具
perf,配合火焰图
top
netstat
vmstat
gprof
从上面描述的Linux系统模型,影响应用程序性能表现的因素可能有:
malloc
对比tcmalloc
,jemalloc
性能有差距io_uring
可以支持异步操作,并减少读写时用户态到内核态,内核态到用户态的额外内存拷贝。标签:缓存 默认 net 刷新 硬件 暂停 块设备 开发 多线程
原文地址:https://www.cnblogs.com/Led-Zeppelin/p/14753586.html