大页内存:
透明大页和大页的关系
这两者最大的区别在于 : 标准大页管理是预分配的方式,而透明大页管理则是动态分配的方式。
内存页的概念:
内存页:page
内存的最小分配单元:page ----> 一个应用程序至少要使用一个内存页 4096B(4k)
linux中查看内存页的大小
getconf -a | gerp -I pagesize
文件系统最小存储单元:块(block) 一个文件至少要占用一个block(4k)
在linux 里打开火狐
firefox &
查看火狐占用的内存大小
这里的total指的是虚拟内存的大小,并且你可以发现各种插件占用的内存都是4k的倍数
查看物理内存的占用
ps aux | grep firefox
单位为kb,实际大小100+M
MMU:内存管理单元(用于维护虚拟内存到物理内存的映射表)
存放于CPU中,映射由CPU来做
如果你开了火狐,又关又开这样对于cpu来讲他就需要不停去做映射,因为应用关闭映射就删
大页(Hugepage):记录虚拟内存到物理内存的分配映射表(记录于CPU中,由CPU管理)
免得应用在重复进行开关的时候反复执行映射导致CPU压力过高
cat /proc/meminfo
查看内存信息
黑色框选的Total为0表示系统并未分配大页,Hugepagesize为2M
查看在系统中设置的大页数量
sysctl -a | grep huge
free -m
查看当前使用的内存大小
vim /etc/sysctl.conf
修改配置文件,设置大页的数量
让sysctl配置文件生效
sysctl -p
重新查看内存的占用情况,发现比之前多使用了200M
free -m
所以当你让大页内存生效了以后,这200M就会被占用(并且是物理空间),并且这部分内存是不释放的,就是用来存映射,其他程序无法使用
所以这样的话,是很浪费内存的,默认情况下大页内存是不开启的,需要手动去开去配置
什么时候开启:当你的CPU性能很紧张的时候(CPU成为瓶颈),通过牺牲内存来减轻CPU 的负担
一个映射的大小为256B
最小存储:
查看文件系统的详细信息
创建一个2k大小的文件,但是在查看的时候发现他的大小为4k
这是因为内存和磁盘都有一个最小的分配单位4k
作用:因为内存和磁盘文件都会通过映射表指向一个物理的存储位置,那如果按照每一个比特去指向的话,那么光维护映射表就会花费大量的空间,得不偿失
所以他在分配磁盘空间的时候指定最小为4k,无论你实际使用多少(哪怕再小)都会分4k给你,如果实际大小为6k那么分配空间则为8k,并且这部分空间只有你能用,这样他维护的映射表就会小很多,缩小为原来的1/4000
windows里在格式化磁盘的时候也可以看到分配单元大小,4k
block小的时候可以节省存储空间,但是可能会降低读取的性能(因为一个20K的文件你可能需要读5个块,那如果块大小是16k就只需要读2个block)
大:提高读取的性能
小:节省存储的空间
VM的磁盘空间一般都比较大,且存储的都是大文件,所以这里可以调整block/簇的大小,改成1024KB也就是 1M
block大小和条带的大小建议对齐(保持一致)