Linux页面缓存会降低双CPU服务器上的IO(64GB内存)
我的
linux页面缓存存在很大问题,这会降低IO的速度.例如,如果我使用dd复制lvm分区,linux会将数据缓存在缓冲区或缓存中(free -m).这不是问题,但在缓冲区达到特殊值后,复制过程停止并减慢到几mbs甚至kbs.我在写入磁盘或/ dev / null时做了很多测试,问题与源驱动器或目标无关.
详细地: >有两个几乎相同的服务器.两者都使用相同的内核运行CentOS 6.5.它们具有相同的磁盘,相同的设置,相同的其他硬件,各方面都相同.唯一的区别是一个服务器有2个CPU和64GB内存,另一个服务器有1个CPU和32 GB内存. 结论: 这个问题要么与第二个cpu有关,要么与内存总量有关.我有“感觉”问题,即每个cpu都有自己的32GB内存,并且复制过程只在cpu上运行.所以最后复制过程将缓冲区/缓存增加到接近32GB或其他cpu的未使用内存然后linux认为嘿还有内存所以让我们进一步增加缓冲区但是下面的硬件无法访问内存,或者某事像那样. 有人有想法或解决方案吗?当然我可以使用直接标志的dd,但这不解决问题,因为还有通过samba等外部访问. EDIT1: 这里还有来自64GB ram服务器的/ proc / zoneinfo: EDIT2: > VM设置:http://pastebin.com/U9E9KkFS EDIT3: / proc / buddyinfo和numactl –hardware: 最后结果 > / proc / sys / vm / zone_reclaim_mode肯定是技术上的方法,但是机器后的机器效果不好.例如:如果我复制一个磁盘linux,现在使用100%的free mem来缓冲(不像之前只有XGB然后停止).但是在最后一个免费mem被用来缓冲的时候,linux开始交换vm内存并增加缓冲区和缓存的总量.在我的系统中通常不需要交换,因此交换内存与某些虚拟机位于同一磁盘上.在结果中如果一个备份这些vms linux写入交换的同时我从磁盘读取备份.因此交换vms是不好的,但是甚至更糟的是linux破坏了我的备份读取速度…所以将/ proc / sys / vm / zone_reclaim_mode设置为0不解决完整的问题…目前我在一个屏幕一个脚本,每隔10秒同步并刷新一次缓存…不是很好,但对我来说效果更好.我在系统上没有网络服务器或普通文件服务器.我只运行vms,通过samba进行备份和存储备份.我不喜欢这个解决方案. 解决方法
您看到的行为是由于Linux在NUMA系统上分配内存的方式.
我假设(不知道)32GB系统是非numa,或者不足以让Linux关注. 如何处理numa的行为由/ proc / sys / vm / zone_reclaim_mode选项决定.默认情况下,linux将检测您是否正在使用numa系统并更改回收标志,如果它认为它会提供更好的性能. 内存被分成多个区域,在numa系统中,第一个CPU插槽有一个区域,第二个CPU插槽有一个区域.它们作为node0和node1出现.如果你是cat / proc / buddyinfo,你可以看到它们. 当区域回收模式设置为1时,从第一个CPU套接字的分配将导致在与该CPU关联的内存区域上进行回收,这是因为从本地numa节点回收性能方面更有效.从这个意义上来说,回收就是删除诸如清除缓存之类的页面,或者在该节点上交换内容. 将值设置为0会导致在区域填满时不会发生回收,而是分配到内存的外部numa区域.这是以另一个CPU的breif锁定为代价来获得对该存储区的独占访问.
交换行为和交换时间取决于几个因素,一个因素是页面被分配给应用程序的活动程度.如果它们不是非常活跃,它们将被交换为支持缓存中发生的繁忙工作.我假设您的VM中的页面不会经常被激活. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |