我遇到了最大的吞吐量问题,需要一些build议来调整我的旋钮。 我们正在运行一个10Gb的文件服务器进行备份分发。 这是LSI MegaRAID控制器上的两个磁盘S-ATA2设置。 服务器也有24G的内存。
我们需要以最大吞吐量镜像我们上次上传的备份。
我们“热”备份的RAID0给我们大约260 MB /秒的写入和275 MB /秒的读取。 一个大小为20GB的testingtmpfs给我们大约1GB /秒。 这种吞吐量是我们需要的。
现在,我怎样才能调整Linux的虚拟内存子系统,将最后上传的文件尽可能长时间地caching在内存中,而不需要将其写入磁盘(甚至更好:写入磁盘并将其保存在内存中)?
我设置了下面的sysctl,但是他们不给我们预期的吞吐量:
# VM pressure fixes vm.swappiness = 20 vm.dirty_ratio = 70 vm.dirty_background_ratio = 30 vm.dirty_writeback_centisecs = 60000
这在理论上应该给我们16GB的cachingI / O,并等待几分钟,直到写入磁盘。 尽pipe如此,当我对服务器进行基准testing时,我发现写入没有影响,吞吐量并没有增加。
需要帮助或build议。
看看你设定的variables,看起来你最关心的是写入性能,而不关心停电造成的可能的数据丢失。
你只会得到懒惰的写入选项和使用asynchronous写入操作的写回caching。 同步写入操作需要提交到磁盘,不会被懒惰写入。 您的文件系统可能会导致频繁的页面刷新和同步写入(通常由于日志logging,特别是在data = journal模式下的ext3)。 此外,即使“后台”页面刷新也会干扰未caching的读取和同步写入 ,从而减慢caching 。
一般来说,你应该采取一些指标来看看发生了什么 – 你看到你的复制过程处于“D”状态,等待I / O工作由pdflush完成吗? 你在磁盘上看到繁重的同步写入活动吗?
如果一切都失败了,你可以select设置一个显式的tmpfs文件系统,在这个文件系统中你可以将备份拷贝到磁盘上,并且只需要在磁盘上同步数据,甚至自动使用inotify
对于读取caching,事情要简单得多 – 有fcoretools fadvise实用程序 ,它具有build议内核将文件内容加载到缓冲区caching中的参数。
编辑:
vm.dirty_ratio = 70
这在理论上应该给我们16GB的cachingI / O,并等待几分钟,直到写入磁盘。
这不会对您的testing场景产生很大的影响,但您的理解存在误解。 dirty_ratio参数不是系统总内存的百分比,而是系统空闲内存的百分比。
有一篇关于调优Write-Heavy负载的文章,其中提供了更深入的信息。
或者只是获得更多的磁盘…您拥有的驱动器arraysconfiguration不支持您所需要的。 这种情况下,解决scheme应该重新devise,以满足您的实际需求。 我明白,这只是备份,但它是有道理的,以避免kludgy修复。
使用内存caching可能意味着数据丢失,如果出现问题,内存中的数据将不会保存到磁盘上。
也就是说,在文件系统级别上进行了一些调整。
例如,如果您使用的是ext4,则可以尝试安装选项:
屏障= 0
那就是:“禁止在jbd代码中使用写障碍,写障碍强制执行日志提交的正确的磁盘顺序,使得易失性磁盘写caching安全地使用,在某些性能上会受到损害。如果你的磁盘有一种电池备份方式或者其他的,禁用障碍可以安全地提高性能,安装选项“barrier”和“nobarrier”也可以用来启用或禁用障碍,以便与其他ext4安装选项保持一致。
更多: http : //www.mjmwired.net/kernel/Documentation/filesystems/ext4.txt