我怎么知道有多少每秒输入/输出次数我需要存储来为超载的 Linux 服务器提供服务吗?
我有一台服务器,我知道存储是它的瓶颈。我希望瓶颈不是存储,因此我需要调整存储阵列的性能。也就是说,购买一个可以提供比我需要的更多 IOPS 的阵列。
我如何才能在给定一些系统 IO 统计数据或其他信息的情况下,确定我的存储性能(购买什么)的大小,以满足我的需求(以最坏的情况 - 严重的 IO 争用 - 作为参考)。
例如,该iostat
实用程序可以提供一些有关 IO 使用情况的有趣统计数据。我可以使用这些信息来了解我需要什么样的硬件性能吗?如何了解?
这是一个普遍的问题,实际的工作负载类型或软件并不重要(例如可以是数据库),我只需要能够根据当前的 IO 统计数据和使用情况做出决定。
答案1
iostat
命令将显示您想要的信息。只需运行:
iostat 1
输出将会像这样:
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 42.00 128.00 84.00 128 84
与opstps
相同transactions per second
。
这将使其每秒更新一次。
通常,您需要systat
在 Linux 发行版上安装软件包才能使用 iostat。
答案2
如果您知道您的存储受限,那么服务器上的基准测试不会明确告诉您需要多少。它们只能告诉您在有限的存储空间下可以运行多快。为了正确获得您正在寻找的答案,您需要(如果可能)隔离可能限制存储的不同方式并单独测试它们。
IOPS 当然是每个人都谈论的简单限制,因为磁盘不擅长寻道,而数据库喜欢寻道。如今有了缓存和 SSD,小块 IO 随机寻道读取比以前容易得多。小层 SSD 和大缓存可能会确保如果 IOPS(对于小块“寻道”类型 IO)真的是您的瓶颈,您将不再受其影响。不过,请小心这些基准测试 - 当人们测量他们可以直接对非镜像缓存执行的 IO 数量时,您会读到各种不切实际的数字。这对您的 Linux 服务器没有帮助。
另一种存储限制是带宽或吞吐量。这个很难隔离,但如果您知道要读取或写入的数据量,并且知道现在需要多长时间,请选择一个新的时间目标,这将是您的新数字。例如:如果您观察到应用程序花费 4 小时进行大型备份或类似操作,最后移动了 9 TB,这说明您当前的吞吐量限制:大约 650 MB/s。如果您想在这段时间内移动 18 TB,则需要 1300 MB/s。在大多数情况下,以太网、光纤和 SAS 都可以配置为比存储硬件更快。存储保持传输层满载的能力通常是真正的瓶颈。您需要查看前端端口的数量,以及启用缓存镜像的基准数字(以确保镜像缓存写入的控制器之间没有瓶颈)。
最后,您可能受到 SCSI 队列方面不良存储配置的限制。这种情况并不常见,但其定义是无法以应有的速度推动存储硬件。如果您看到主机写入延迟为 500ms,但您的存储报告 3ms 100% 缓存命中,则可能是目标上的 SCSI 队列不足的问题。基本上,SCSI 发起程序要等待长达 500ms 才能释放其队列中可用于接收请求的插槽。您需要向您的存储供应商询问有关主机队列深度设置和扇出率的最佳实践。
我希望这会有所帮助,我知道这个答案并不像你希望的那么简单。
答案3
如果您可以将应用程序的负载从 1 TPS 变化到远远超过瓶颈点,那么您可以构建 TPS 与 I/O 操作速率和带宽之间关系的模型。
可以说:
1 TPS causes 6 IOs and 2 KB of transfer, per second
10 TPS causes 16 IOs and 11 KB
100 TPS causes 106 IOs and 101 KB
but
200 TPS causes 107 IOs and 102 KB
300 TPS causes 107 IOs and 102 KB
1)那么你的瓶颈是 100 TPS,再加上
2)有 5 个 IO 和 1 KB 的开销,之后每个事务使用 1 个 IO 和 1 KB 的传输
现在:
- 是你现有设备的极限,
- 是你的预算,你用它来计算要处理的每个 TPS 需要配置多少
如果它说它适合
10,000 IOPs and 100 KB/S
,只有后者对你有意义。如果它说它对 有好处
100 IOPS and 10,000 KB/S
,只有前者有意义。有时它最初会在 IPS 上造成瓶颈,在大型配置中带宽
为了测量这一点,请进行大量单独的测试,重复进行,然后将结果绘制在图表上:您的眼睛对图片的识别能力比对数字表格的识别能力更强。
吞吐量图一开始应该是斜率,类似于/
,然后突然变平,然后变成水平线,有时又会回到下降趋势。如果绘制响应时间,它看起来会像_/
曲线会在瓶颈负载附近排列。
是的,它将是一个近似这些曲线的点的散点图,而不是漂亮的直线 (;-))
--戴夫