Cache: ARC Accesses(高速缓存:ARC 访问次数)
ARC 是自适应替换高速缓存,并且是用于文件系统和卷数据的 DRAM 内高速缓存。此统计信息显示了对 ARC 的访问次数,并允许监测其使用情况和性能。
您可以在分析性能问题时检查 ARC 访问次数,以便了解在 ARC 中缓存当前工作负荷的情况。
可用的高速缓存 ARC 访问次数细分包括:
表 14 ARC 访问次数细分
|
|
hit/miss(命中/未命中)
|
ARC 查找的结果。命中/未命中状态如下表所述。
|
filename(文件名)
|
从 ARC 请求的文件名。使用此细分可以使用分层结构模式,以便导航到各文件系统目录。
|
L2ARC eligibility(L2ARC 适用性)
|
这是在访问 ARC 时所测量的 L2ARC 高速缓存的适用性。大量未命中 ARC 但符合 L2ARC 的访问表明工作负荷可能会受益于 2 级高速缓存设备。
|
project(项目)
|
显示了正在访问 ARC 的项目。
|
share(共享资源)
|
显示了正在访问 ARC 的共享资源。
|
LUN
|
显示了正在访问 ARC 的 LUN。
|
|
如执行性能影响中所述,将细分(例如按文件名)保持为启用状态可能是开销最高的。
命中/未命中状态包括:
表 15 命中/未命中细分
|
|
data hits(数据命中)
|
数据块位于 ARC DRAM 高速缓存中且返回了该数据块。
|
data misses(数据未命中)
|
数据块不在 ARC DRAM 高速缓存中。将从 L2ARC 高速缓存设备(如果存在该设备且数据缓存在其上)或池磁盘中读取该数据。
|
metadata hits(元数据命中)
|
元数据块位于 ARC DRAM 高速缓存中且返回了该元数据块。元数据包括引用数据块的盘上文件系统框架。下面列出了其他示例。
|
metadata misses(元数据未命中)
|
元数据块不在 ARC DRAM 高速缓存中。将从 L2ARC 高速缓存设备(如果存在该设备且数据缓存在其上)或池磁盘中读取该数据。
|
prefetched data/metadata hits/misses(预取的数据/元数据命中/未命中)
|
通过预取机制而不是直接从应用程序请求触发的 ARC 访问。下文中提供了有关预取的更多详细信息。
|
|
元数据示例:
-
文件系统块指针
-
目录信息
-
重复数据删除表
-
ZFS uberblock
预取是用于提高流读取工作负荷的性能的一种机制。它将分析 I/O 活动以识别顺序读取,并可以提前发出额外的读取,以使得在应用程序请求数据前,该数据已在高速缓存中。预取在 ARC 之前发生(通过访问 ARC 实现),当尝试了解 ARC 活动时,请牢记这一点。例如,如果看到:
表 16 预取类型
|
|
prefetched data misses(预取的数据未命中)
|
预取识别了一个顺序工作负荷,并通过为该数据执行 ARC 访问来请求提前将数据缓存到 ARC 中。该数据尚未在高速缓存中,因此这是 "miss"(未命中),将从磁盘中读取数据。这是正常情况,是预取从磁盘填充 ARC 的方式。
|
prefeteched data hits(预取的数据命中)
|
预取识别了一个顺序工作负荷,并通过为该数据执行 ARC 访问来请求提前将数据缓存到 ARC 中。事实上,该数据已经在 ARC 中,因此这些访问将以 "hits"(命中)状态返回(因此实际上无需预取 ARC 访问)。如果以顺序方式重复读取缓存的数据,将会发生此情况。
|
|
数据被预取后,应用程序可以通过其自己的 ARC 访问来请求该数据。请注意,大小可能不同:执行预取时 I/O 大小可能为 128 KB,而应用程序读取时 I/O 大小可能为 8 KB。例如,以下信息看起来好像没有直接关系:
但实际情况可能是:如果预取使用 128 KB 大小的 I/O 进行请求,则 23 x128 = 2944 KB。如果应用程序使用 8 KB 大小的 I/O 进行请求,则 368 x 8 = 2944 KB。
要分析 ARC 未命中情况,请使用 "Cache ARC size"(高速缓存-ARC 大小)检查 ARC 是否已经扩大到使用可用的 DRAM。