我们将在大约 1000 台服务器上推出 Tuned(和 numad),其中大多数是 NetApp 或 3Par 存储上的 VMware 服务器。
根据 RedHat 文档,我们应该选择virtual-guest
配置文件。它在做什么可以在这里看到:tuned.conf
我们正在将 IO 调度程序更改为 NOOP,因为 VMware 和 NetApp/3Par 都应该为我们进行足够的调度。
但是,经过一番调查后,我不确定它们为什么会增加vm.dirty_ratio
并且kernel.sched_min_granularity_ns
.
据我了解,增加到vm.dirty_ratio
40% 将意味着对于具有 20GB 内存的服务器,除非vm.dirty_writeback_centisecs
首先命中,否则 8GB 在任何给定时间都可能是脏的。并且在刷新这些 8GB 时,应用程序的所有 IO 都将被阻塞,直到脏页被释放。
增加dirty_ratio 可能意味着更高的峰值写入性能,因为我们现在拥有更大的缓存,但是当缓存填满时,IO 将被阻塞相当长的时间(几秒钟)。
另一个是他们为什么要增加sched_min_granularity_ns
. 如果我理解正确,增加这个值将减少每个 epoch( sched_latency_ns
) 的时间片数,这意味着正在运行的任务将有更多时间来完成它们的工作。我可以理解这对于线程很少的应用程序来说是一件非常好的事情,但例如。apache 或其他具有大量线程的进程会不会适得其反?
这是调整的adm 配置的时间表...
我认为以表格形式查看它们会有所帮助。需要注意的主要事情是默认的 RHEL6 设置很糟糕!另一件事是企业存储和虚拟客户配置文件是相同的,除了虚拟客户方面的交换减少(有意义,对吗?)。
至于关于存储 I/O 电梯的建议,您在存储层上有几层抽象。如果您使用 RDM 或直接向虚拟机提供存储,则使用noop 调度程序会很有意义。但由于它们将在 NFS 或 VMFS 上运行,我仍然喜欢截止日期调度程序提供的额外调整选项。
调整后的配置文件可以在正在运行的系统上即时更改,因此如果您有任何疑虑,请使用您的应用程序和特定环境和基准测试。
观看来自 Summit 的 Shak 和 Larry 的性能调整视频,他们深入讨论了调整后的配置文件。
最大的预期收获之一是配置文件只是一个推荐的起点,而不是对每个环境都完美无缺的不可变数字。
从一个配置文件开始,并尝试使用设置。生成良好的类似生产的测试工作负载并测量对您的业务很重要的指标。
一次更改一件事,并在每次迭代中记录每个结果。完成后,查看结果并选择提供最佳结果的设置。这是您理想的调谐配置文件。
简短的回答是,任何调整都是猜测,只有在有经验数据支持时才有价值:试试吧。测量它。如果您不喜欢它,请调整它。
更长的答案:
不会。增加脏比意味着您的系统不太可能进入需要开始阻塞写入的状态。缺点是使用的内存更多,中断时数据丢失的风险更大。
进程通常会在其时间片到期之前产生。VM 的问题在于您的机器可能会与其他 VM 竞争 CPU 和 L1/L2 缓存 - 高水平的任务切换(由于抢占)对吞吐量有很大影响。通常部署到 VM 中的应用程序类型是受 CPU 限制的(Web 服务器、应用程序服务器)。
是的,吞吐量的增加(适用于所有类型的应用程序)将以延迟增加为代价——但当大多数事务需要毫秒时,延迟是微秒级的。如果您需要实时功能/非常低的延迟,那么您不应该使用虚拟机。