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

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

概述我在这里遇到了最大吞吐量问题,需要一些建议来调整我的旋钮.我们正在运行10Gbit文件服务器以进行备份分发.这是LSI MegaRAID控制器上的两个磁盘S-ATA2设置.服务器也有24GB的内存. 我们需要以最大吞吐量镜像上次上传的备份. 我们的“热”备份的RAID0为我们提供了大约260 MB /秒的写入速度和275 MB /秒的读取速度.经过测试的大小为20GB的tmpfs给我们大约1GB 我在这里遇到了最大吞吐量问题,需要一些建议来调整我的旋钮.我们正在运行10Gbit文件服务器以进行备份分发.这是LSI MegaraID控制器上的两个磁盘S-ATA2设置.服务器也有24GB的内存.

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

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

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

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

# VM pressure fixesvm.swappiness = 20vm.dirty_ratio = 70vm.dirty_background_ratio = 30vm.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磁盘缓存行为以获得最大吞吐量全部内容,希望文章能够帮你解决调整Linux磁盘缓存行为以获得最大吞吐量所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1043068.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存