Swap分区的用途
Swap分区是Linux系统中的一个重要部分,它充当了物理内存(RAM)的补充。其主要用途包括:
- 内存扩展:当系统的物理内存不足以满足所有运行程序的需求时,Swap分区可以暂存部分内存数据,从而允许系统继续运行更多的程序。这实际上是一种虚拟内存技术,使得系统能够利用硬盘空间来模拟额外的内存。
- 数据保护:在内存压力较大时,系统可能会将一些不常用的内存页面交换到Swap分区中,以防止因物理内存耗尽而导致系统崩溃或数据丢失。这种机制为系统提供了一种“安全网”,帮助系统在内存资源紧张时保持稳定。
- 系统调优:虽然Swap分区在内存不足时可能会导致性能下降(因为硬盘访问速度远低于内存),但通过合理配置Swap分区的大小和使用策略,可以在一定程度上优化系统的内存使用,提高系统的整体性能。
要禁用的原因:在某些情况下,禁用Swap分区是有益的,原因包括:
- 避免性能下降,当系统频繁使用Swap分区时,由于硬盘访问速度的限制,系统性能可能会显著下降。禁用Swap分区可以迫使系统更加高效地管理物理内存,减少不必要的磁盘I/O操作。
- 提高响应速度:禁用Swap分区后,系统可以更快地响应内存请求,因为所有内存请求都直接指向物理内存,无需检查Swap分区。这对于需要高性能的应用程序(如数据库、实时处理系统等)尤为重要。
- 简化配置:禁用Swap分区可以简化系统的内存管理配置,减少因Swap分区配置不当而导致的潜在问题。
不禁用Swap分区
- 内存保护:Swap分区提供了一种内存数据的保护机制,有助于防止因物理内存耗尽而导致的系统崩溃或数据丢失。
- 兼容性:一些老旧的软件或系统可能依赖于Swap分区的存在来正常工作。禁用Swap分区可能会导致这些软件或系统出现兼容性问题。
- 应对突发内存需求
虽然现代系统通常具有足够的物理内存来应对大多数情况,但在某些突发情况下(如大量并发请求、大型数据处理任务等),系统仍然可能需要Swap分区来提供额外的内存资源。
禁用swap分区设置
vim sudo /etc/fstab
将/swap.img none swap sw 0 0注释掉,
注意:改了fstab后要进行重启,sudo reboot 才能进行下一步做大页内存。
大页内存(HugePages)是一种操作系统级别的内存管理技术,它允许将内存划分为比传统页面大小(通常是4KB)更大的页面,如1MB、2MB甚至更大。通过减少页表的数量和访问开销,提高内存访问的效率和性能。
设置大页内存的好处
- 提高内存访问效率:由于页表数量减少,操作系统在内存管理时的开销也随之降低。当进程需要访问大页内存时,只需要查找较少的页表项,有助于提高内存访问的效率和命中率。
- 减少TLB(Translation Lookaside Buffer,页表寄存缓冲器)缺失:TLB是CPU中用于缓存页表条目的硬件结构,其大小是有限的。使用大页内存可以减少TLB的缺失率,因为每个大页可以覆盖更多的内存地址空间,从而减少了需要缓存的页表项数量。
- 优化内存分配:大页内存有助于减少内存碎片,使内存分配更加高效。在需要连续大块内存的场景(如数据库、虚拟化环境等)中,大页内存能够提供更好的性能。
- 支持大内存应用:对于内存需求极大的应用程序(如大型数据库、科学计算应用等),大页内存能够提供更为稳定和高效的内存支持。
设置大页内存的坏处
- 内存浪费:如果大页内存没有被充分利用,就可能导致内存浪费。例如,如果一个进程只使用了大页中的一小部分内存,其余部分就会被闲置。
- 内存管理复杂性增加:大页内存的管理比传统小页内存更为复杂。系统需要维护额外的数据结构来跟踪大页内存的使用情况,这可能会增加内存管理的开销和复杂性。
- 兼容性问题:并非所有应用程序都支持大页内存。一些应用程序可能无法正确处理大页内存分配或访问,这可能会导致兼容性问题。
- 内存碎片风险:虽然大页内存有助于减少内存碎片,但在某些情况下(如频繁的内存分配和释放操作),大页内存也可能导致内存碎片化的风险增加。
NUMA和Hugepage内存文件
NUMA(Non-Uniform Memory Access)
NUMA是一种内存架构,它允许处理器访问其本地内存(即与处理器物理位置接近的内存)的速度比访问其他处理器内存(即远程内存)更快。这种架构在高性能计算(HPC)和服务器环境中非常常见,因为它可以优化内存访问的延迟和带宽,从而提高整体系统性能。
在NUMA系统中,内存被划分为多个节点(node),每个节点包含一个或多个处理器以及与之紧密耦合的内存。处理器在访问本地节点内存时速度最快,而访问其他节点内存时则可能面临更高的延迟。
Hugepage内存文件
Hugepage(大页内存)是一种内存管理技术,它允许操作系统使用比标准页面(通常为4KB)更大的内存页面(如2MB、1GB等)来管理内存。这种技术的主要目的是减少页表的大小和TLB(Translation Lookaside Buffer)的失效次数,从而提高内存访问的效率。
在NUMA系统中,Hugepage的配置需要特别注意内存的局部性,即尽量将大页分配给与处理器物理位置接近的内存。这有助于确保处理器能够高效地访问这些大页内存,从而提高系统性能。
NUMA与Hugepage的结合
在NUMA系统中配置Hugepage时,通常需要执行以下步骤:
- 确定系统支持:首先,需要确认系统是否支持Hugepage以及支持哪种类型的大页(如2MB、1GB等)。
- 分配Hugepage:在系统启动时,可以通过内核参数或启动脚本来分配Hugepage。这些Hugepage将被保留在内存中,不能用于其他用途。
- 考虑NUMA局部性:在分配Hugepage时,需要考虑到内存的局部性。尽量将大页分配给与处理器物理位置接近的内存节点,以减少内存访问的延迟。
- 映射Hugepage:将分配好的Hugepage映射到需要大量内存的应用程序或服务中。这通常涉及到修改应用程序的配置文件或启动参数,以指定使用Hugepage。
- 监控和调整:在系统运行过程中,需要监控Hugepage的使用情况和性能影响。根据实际需求和应用场景,可能需要对Hugepage的配置进行调整。
好处与坏处
好处:
- 提高内存访问效率:通过减少页表和TLB的失效次数,Hugepage可以显著提高内存访问的效率。
- 优化NUMA性能:在NUMA系统中,合理配置Hugepage可以充分利用内存的局部性优势,提高系统性能。
- 减少内存碎片:大页内存有助于减少内存碎片的产生,使内存分配更加高效。
坏处:
- 内存浪费:如果Hugepage没有被充分利用,就可能导致内存浪费。
- 兼容性问题:并非所有应用程序都支持Hugepage。一些应用程序可能无法正确处理大页内存分配或访问。
- 配置复杂性增加:配置Hugepage需要一定的技术知识和经验,且需要根据具体的应用场景和系统需求进行调整。
配置:
分为两种配置临时与永久配置
临时配置:
常规的不设置hugepages我们可以进行查看使用cat /proc/meminfo查看Hugetlb为0kb如图所示:
查看是否设置了大页命令:
node0:cat /sys/devices/system/node/node0/hugepages/hugepages-1048576kB/nr_hugepages
node1:cat /sys/devices/system/node/node1/hugepages/hugepages-1048576kB/nr_hugepages
注意:以上配置为未配置的
配置了大页进行查看
设置了大页内存
设置临时配置大页第一种:
1.使用root账户,在其目录下创建hugepage
命令:mkdir hugepage
2.挂载hugepage
命令:mount -t hugetlbfs -o mode=0777,pagesize=1G none /root/hugepage
可以通过mount | grep hugepage查看是否挂载成功出现如下表明创建成功
3.创建nume和大页内存文件(创建两个分别为64G*14个,这里的数字为整数,创建的时候会加载一定时间,可通过cat /sys/devices/system/node/node0/hugepages/hugepages-1048576kB/nr_hugepages查看写入多少,这里不支持并行处理)
命令:
node0:echo 896 > /sys/devices/system/node/node0/hugepages/hugepages-1048576kB/nr_hugepages
node1:echo 896 > /sys/devices/system/node/node1/hugepages/hugepages-1048576kB/nr_hugepages
永久配置
修改配置文件
命令:sudo vim /etc/default/grub
添加GRUB_CMDLINE_LINUX_DEFAULT="quiet splash hugepagesz=1G hugepages=1792 numa_balancing=disable" 因为有两个node,所有设置numa_balancing采用平均分配设置成功后重启,一定要查看cat /sys/devices/system/node/node0/hugepages/hugepages-1048576kB/nr_hugepages看是否为896,有部分机器是不支持的,平分不了,就不设置,做完后,跟临时一样的做