调整Linux磁盘缓存行为以获得最大吞吐量

前端之家收集整理的这篇文章主要介绍了调整Linux磁盘缓存行为以获得最大吞吐量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在这里遇到了最大吞吐量问题,需要一些建议来调整我的旋钮.我们正在运行10Gbit文件服务器以进行备份分发.这是LSI MegaRAID控制器上的两个磁盘S-ATA2设置.服务器也有24GB的内存.

我们需要以最大吞吐量镜像上次上传的备份.

我们的“热”备份的RAID0为我们提供了大约260 MB /秒的写入速度和275 MB /秒的读取速度.经过测试的大小为20GB的tmpfs给我们大约1GB /秒.这种吞吐量是我们所需要的.

现在,我如何调整Linux的虚拟内存子系统,以便在内存中尽可能长时间地缓存上次上传文件,而无需将其写入磁盘(甚至更好:写入磁盘并将其保留在内存中)?

我设置了以下sysctls,但它们没有给我们预期的吞吐量:

# VM pressure fixes
vm.swappiness = 20
vm.dirty_ratio = 70
vm.dirty_background_ratio = 30
vm.dirty_writeback_centisecs = 60000

理论上,这应该为我们提供16GB的缓存I / O并等待几分钟,直到它写入磁盘.当我对服务器进行基准测试时,我发现写入没有任何影响,吞吐量也没有增加.

需要帮助或建议.

解决方法

通过查看您设置的变量,您似乎主要关注写入性能,而不关心由于断电而可能造成的数据丢失.

您将只获得延迟写入的选项以及使用异步写入操作的写回缓存.同步写操作需要提交到磁盘,并且不会延迟写入.您的文件系统可能导致频繁的页面刷新和同步写入(通常是由于日志记录,尤其是在data = journal模式下的ext3).此外,即使是“background” page flushes will interfere with uncached reads and synchronous writes,也会减慢它们的速度.

一般来说,你应该采取一些指标来看看发生了什么 – 你是否看到你的复制过程处于“D”状态,等待pdflush完成I / O工作?您是否在磁盘上看到了大量的同步写入活动?

如果所有其他方法都失败了,您可以选择设置一个显式的tmpfs文件系统,您可以将备份复制到其中,然后在事后与磁盘同步数据 – 甚至是automatically using inotify

对于读缓存,事情要简单得多 – 有fcoretools fadvise utility,它有–willneed参数,建议内核将文件内容加载到缓冲区缓存中.

编辑:

vm.dirty_ratio = 70

This should in theory give us 16GB for caching I/O and wait some
minutes until its writing to disk.

这不会对您的测试场景产生很大影响,但您的理解存在误解. dirty_ratio参数不是系统总内存的百分比,而是系统的可用内存的百分比.

有一篇关于Tuning for Write-Heavy loads文章,有更深入的信息.

猜你在找的Linux相关文章