我们将在约 1000 台服务器上推出 tuned(和 numad),其中大多数是 NetApp 或 3Par 存储上的 VMware 服务器。
根据 RedHats 文档,我们应该选择virtual-guest
配置文件。它正在做什么可以在这里看到:调整配置文件
我们正在将 IO 调度程序更改为 NOOP,因为 VMware 和 NetApp/3Par 都应该为我们进行足够的调度。
然而,经过一番调查之后,我不确定为什么它们会增加vm.dirty_ratio
和kernel.sched_min_granularity_ns
。
据我所知,增加到vm.dirty_ratio
40% 意味着对于具有 20GB RAM 的服务器,除非首先被占用,否则 8GB 随时可能变脏vm.dirty_writeback_centisecs
。并且在刷新这 8GB 时,应用程序的所有 IO 都将被阻止,直到脏页被释放。
增加 dirty_ratio 可能意味着峰值时的写入性能更高,因为我们现在拥有更大的缓存,但是当缓存填满时,IO 将被阻塞相当长的时间(几秒钟)。
另一个是他们为什么要增加sched_min_granularity_ns
。如果我理解正确的话,增加这个值将减少每个 epoch() 的时间片数量,sched_latency_ns
这意味着正在运行的任务将有更多时间完成其工作。我可以理解这对于线程很少的应用程序来说是一件非常好的事情,但对于例如 apache 或其他具有大量线程的进程来说,这难道不会适得其反吗?
答案1
简短的回答是,任何调整都是猜测,只有有经验数据支持时才有价值:尝试一下。测量一下。如果你不喜欢,就调整一下。
更长的答案:
增加 dirty_ratio 可能意味着更高的写入性能……IO 将被阻塞相当长的时间
不会。增加脏数据比率意味着您的系统不太可能进入需要开始阻止写入的状态。缺点是会占用更多内存,并且在发生中断时丢失数据的风险也会更大。
这意味着正在运行的任务将有更多的时间来完成工作
进程通常会在时间片到期之前让出。虚拟机的问题在于您的机器可能正在与其他虚拟机争夺 CPU 和 L1/L2 缓存 - 高级别的任务切换(由于抢占)对吞吐量有很大影响。通常部署到虚拟机中的应用程序是 CPU 受限的应用程序(Web 服务器、应用程序服务器)。
是的,吞吐量的增加(适用于所有类型的应用程序)将以延迟增加为代价 - 但后者是微秒级的,而大多数事务需要几毫秒。如果您需要实时功能/非常低的延迟,那么您不应该使用虚拟机。
答案2
答案3
观看 Shak 和 Larry 在 Summit 上的性能调整视频,他们深入讨论了调整后的配置文件。
最大的预期收获之一是,配置文件只是一个推荐的起点,而不是适用于每种环境的不可变数字。
从一个配置文件开始,尝试各种设置。生成良好的类似生产环境的测试工作负载并测量对您的业务至关重要的指标。
每次更改一件事并记录每次迭代的每个结果。完成后,查看结果并选择产生最佳结果的设置。这就是您理想的调整配置文件。