我的机器上有一台受磁盘 IO 限制的特殊负载,主要是读取。
大部分 IO 发生在使用 ZFS 格式化的慢速网络连接磁盘上。
使用 iostat 我可以清楚地看到这些磁盘的使用率约为 100%,因此,至少我知道这是瓶颈。
此外,我发现我主要在那些磁盘上进行读取操作。
慢盘大概有3T左右。
我很乐观,安装了 L2ARC 缓存,使用后zpool iostat
我看到了类似这样的内容:
pool alloc free read write read write
----------------------------- ----- ----- ----- ----- ----- -----
virtio-993974c9-d6be-412d-9 3,02T 1,85T 13 0 95,9K 0
cache - - - - - -
/root/cache.l2arc 12,5G 2,47G 15 2 152K 116K
----------------------------- ----- ----- ----- ----- ----- -----
sam. févr. 9 19:48:58 CET 2019
capacity operations bandwidth
pool alloc free read write read write
----------------------------- ----- ----- ----- ----- ----- -----
virtio-993974c9-d6be-412d-9 3,02T 1,85T 18 0 104K 0
cache - - - - - -
/root/cache.l2arc 12,5G 2,47G 19 0 176K 0
----------------------------- ----- ----- ----- ----- ----- -----
sam. févr. 9 19:48:59 CET 2019
capacity operations bandwidth
pool alloc free read write read write
----------------------------- ----- ----- ----- ----- ----- -----
virtio-993974c9-d6be-412d-9 3,02T 1,85T 23 308 152K 7,42M
cache - - - - - -
/root/cache.l2arc 12,5G 2,47G 31 3 276K 204K
----------------------------- ----- ----- ----- ----- ----- -----
所以 L2 有帮助,但帮助不大。而且我发现 L2 还没有完全装满,因此更大的 L2 不会有帮助,对吗?
我有一个合理的缓存率,ARC 为 98.5%,L2 为 73.7%。
此外,慢速磁盘的使用率仍然大约为 100%,因此,如果我可以从磁盘中删除工作,我的应用程序将运行得更快。
有什么方法可以知道我下一步该尝试什么吗?有什么可以帮忙的吗?
答案1
更大的 L2ARC 可能会填充与您现在的容量大致相同的容量(如果我没看错的话,这个容量非常小 - 只有 12.5GB?)
L2ARC 会从 ARC 驱逐中填充,而且完全有可能发生的事情只是 L2ARC 和 ARC 的内容是你真正的“热”数据集的大部分,而你没有有大量重复读取尚未进入缓存。
与 L2ARC 讨论一样,您可能更愿意向服务器添加更多 RAM 以用于 ARC。您有多少 RAM?其中有多少 RAM 可用于 ARC?(请参阅 /etc/modprobe.d/zfs.conf;它默认为系统中物理 RAM 的 50%。)