ZFS ARC 大小与目标大小

ZFS ARC 大小与目标大小

我正在尝试了解 ZFS ARC 的内部工作原理。但是,我对几件事感到困惑:

  1. 实际大小 ( zfs:0:arcstats:size) vs 目标大小 ( zfs:0:arcstats:c)。我理解实际大小是分配的,用于存储缓存内容。但是,目标大小是多少呢?这两者之间有什么区别?

  2. mru_size ( zfs:0:arcstats:p) + mfu_size ( zfs:0:arcstats:c- zfs:0:arcstats:p) vs data_size ( zfs:0:arcstats:data_size)。data_size 不应该是 mru_size 和 mfu_size 的总和吗?正确的 ARC 大小细分是什么?根据http://lists.freebsd.org/pipermail/freebsd-fs/2012-June/014643.html,应该是hdr_size + data_size (mru_size + mfu_size + anon_size) + other_size + l2_hdr_size,但是这没有任何意义,因为mru_size通常大于data_size

  3. arc 内存节流阀有什么用处?

谢谢您的任何回答/指点。

答案1

好吧,我晚了几年,但我希望这可以帮助别人。

  • c是目标 ARC 大小。默认情况下,它是总 RAM 的 50%,但如果系统内存不足,它可以根据需要缩小
  • size是当前的 ARC 大小。如果有足够的时间,它将趋向于c
  • data_size是缓存的用户数据的大小。它确实不是包括元数据(这就是为什么在面对元数据繁重的工作负载时它可以比 MRU 和/或 MFU 小得多的原因)
  • metadata_size缓存元数据的大小
  • hdr_size主 ARC 中存储的 L2ARC 标头的大小是多少
  • overhead_size是解压 dentry 时分配的各种缓冲区的大小

答案2

我认为 ARC 的目标大小是它可以增长到多大,而实际大小是它当前使用的大小。我在我的服务器上看到了这一点,我给它 12 GB,但除非我达到这个大小,否则它实际上不会停留在 12 GB。它通常喜欢停留在 10-11 GB。

这里有一个解释内存限制的链接。看起来 ZFS 最初并没有被设计成消耗掉所有内存,这很可能就是它存在的原因。(http://www.zfsbuild.com/2012/04/18/let-zfs-use-all-of-your-ram/

关于 #2,我不太确定。抱歉。

希望这有帮助!

相关内容