Pet*_*yer 12 linux storage cache ftp
我在这里遇到了最大吞吐量问题,需要一些关于如何调整旋钮的建议。我们正在运行一个 10Gbit 的文件服务器来进行备份分发。这是一个 LSI MegaRAID 控制器上的两个磁盘 S-ATA2 设置。服务器还获得了 24gig 的内存。
我们需要以最大吞吐量镜像上次上传的备份。
用于“热”备份的 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
Run Code Online (Sandbox Code Playgroud)
这理论上应该给我们 16GB 的缓存 I/O 并等待几分钟直到它写入磁盘。仍然当我对服务器进行基准测试时,我发现对写入没有影响,吞吐量没有增加。
需要帮助或建议。
通过查看您设置的变量,您似乎最关心写入性能,而不关心由于停电而可能造成的数据丢失。
您只能选择延迟写入和使用异步写入操作的回写缓存。同步写入操作需要提交到磁盘,并且不会被延迟写入 - 永远。您的文件系统可能会导致频繁的页面刷新和同步写入(通常是由于日志记录,尤其是在 data=journal 模式下的 ext3)。此外,即使是“后台”页面刷新也会干扰未缓存的读取和同步写入,从而减慢它们的速度。
一般来说,您应该采用一些指标来查看发生了什么 - 您是否看到您的复制过程处于“D”状态,等待 pdflush 完成 I/O 工作?您是否在磁盘上看到大量同步写入活动?
如果所有其他方法都失败了,您可以选择设置一个显式的 tmpfs 文件系统,您可以将备份复制到其中,并在事后仅将数据与磁盘同步 - 甚至自动使用 inotify
对于读缓存,事情要简单得多——有 fcoretoolsfadvise实用程序,它具有--willneed建议内核将文件内容加载到缓冲区缓存中的参数。
编辑:
vm.dirty_ratio = 70
这理论上应该给我们 16GB 的缓存 I/O 并等待几分钟直到它写入磁盘。
这不会对您的测试场景产生很大影响,但是您的理解存在误解。dirty_ratio 参数不是系统总内存的百分比,而是系统可用内存的百分比。
有一篇关于调整写重负载的文章,其中包含更深入的信息。