设置应用程序的脏内存刷新大小/proc/sys/vm/dirty_ratio,使其文件系统缓存达到主内存更大的值再写入到磁盘中 设置Hugepages,即HugeTLBfs,具体参考kernel官方文档 选择正确的I/O调度算法,I/O elevator,目前比较流行的有如下四种: CFQ(Complete Fair Queuing) elevator deadline elevator NOOP as(Anticipatory) 具体原理...
当使用消息队列作为进程间通信方式时,需要调整此内核参数 kernel.msgmnb = 4203520,消息队列的最大字节数 kernel.msgmni = 64,最多允许创建多少个消息队列 kernel.msgmax = 8192,消息队列单条数据最大的长度 FreeBSD/MacOS sysctl -w net.local.dgram.maxdgram=8192 sysctl -w net.local.dgram.recvspace=200000 ...
// file: arch/x86/include/asm/page_64.h#define __phys_addr(x) __phys_addr_nodebug(x)staticinlineunsignedlong__phys_addr_nodebug(unsignedlongx){unsignedlongy=x-__START_KERNEL_map;/* use the carry flag to determine if x was < __START_KERNEL_map */x=y+((x>y)?phys_base...
所谓memory model,其实就是从cpu的角度看,其物理内存的分布情况,在linux kernel中,使用什么的方式来管理这些物理内存。某些体系架构支持多种内存模型,但在内核编译构建时只能选择使用一种内存模型。 1. 基本概念 1.1 page frame 从虚拟地址到物理地址的映射过程,系统对于内存管理是以页为单位进行管理的。在linux操作系...
在Linux-0.11版本的代码中,我们会看到,buffer cache是完全独立的实现,甚至都还没有基于page作为内存单元,而是以原始指针的系形式出现。每一个block sector,在kernel内部对应一个独立的buffer cache单元,这个buffer cache单元通过buffer head来描述: 其中,buffer_head在初始化时,其内部的b_data指向的是原始的内存地址:...
/* to find an entry in a page-table-directory */#definepgd_index(addr) ((addr) >> PGDIR_SHIFT)//获得在pgd表中的索引#definepgd_offset(mm, addr) ((mm)->pgd +pgd_index(addr))//获得pmd表的起始地址/* to find an entry in a kernel page-table-directory */#definepgd_offset_k(addr...
在openrisc架构下, PAGE SIZE 是 8 Kbyte (2^13)。 2、Linux 默认页大小是对应架构的 MMU 管理的最小值 本结论来自一篇2002年的文章 Multiple Page Size Support in the LinuxKernel[3]。 The Linux kernel currently supports a single user space page size, usually the minimum dictated by the architectu...
Size: 13276 kB // 映射区域内存大小 KernelPageSize: 4 kB // 页大小 MMUPageSize: 4 kB Rss: 10780 kB // 实际加载到内存的大小 Pss: 609 kB // 该有名映射与其他进程共享,这是除以共享进程后的值 Shared_Clean: 10780 kB // 全部都是共享的,且没有被修改过 ...
pte_offset_kernel(dir,addr):线性地址 addr 在页中间目录 dir 中有一个对应的项,该宏就产生这个对应项,即页表的线性地址。另外,该宏只在主内核页表上使用 pte_offset_map(dir, addr):接收指向一个页中间目录项的指针 dir 和线性地址 addr 作为参数,它产生与线性地址 addr 相对应的页表项的线性地址。如果页...
最后一个彩蛋: kernel panic二维码 下面分别展开论述。 文件系统支持比page size更大的block size 一般情况下,Linux文件系统的block size是要小于或者等于page size的,否则可能出现很多partial reads/writes,比如一个partial write就需要涉及到Read-Modify-Write,读出老的内容、与新内容merge、写入老新内容merge后的结果...