Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

ZFS ARC and Linux’s page cache both use RAM to avoid storage reads, but they are separate cache systems with different owners and accounting. ARC is ZFS’s adaptive cache for storage blocks. Linux’s Cached value describes file page cache together with tmpfs/shmem, while MemAvailable estimates how much memory the kernel can make available to applications without swapping. A large cache number alone does not prove that RAM is exhausted or that a leak exists.

On a Linux host running OpenZFS, evaluate ARC statistics and /proc/meminfo together. Under genuine pressure, the kernel can reclaim file cache and OpenZFS exposes a shrinker that can reduce ARC; the exact interaction and defaults depend on the installed OpenZFS release.

What ZFS ARC and Linux page cache actually cache

ZFS ARC is a ZFS-managed block cache

OpenZFS describes the Adaptive Replacement Cache (ARC) as its in-memory cache. ARC stores recently and frequently used ZFS blocks in RAM so subsequent reads can avoid the storage device. It is managed by ZFS, not by the generic Linux virtual-memory page-cache code.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

ARC can contain data blocks and metadata. Its adaptive policy changes what stays resident according to access patterns rather than simply keeping the newest reads. The amount of RAM occupied by ARC is a target that can move as workload and memory pressure change; it is not a permanently reserved allocation.

#1 Best Overall
Sale
CORSAIR Vengeance LPX DDR4 RAM 32GB (2x16GB) Up to 3200MHz CL16-20-20-38 1.35V Intel XMP AMD EXPO Computer Memory – Black (CMK32GX4M2E3200C16)
  • Disclaimer: Maximum Speed requires overclocking/PC BIOS adjustments. Maximum speed and performance depend on system components, including motherboard and CPU
  • Hand-sorted memory chips ensure high performance with generous overclocking headroom
  • VENGEANCE LPX is optimized for wide compatibility with the latest Intel and AMD DDR4 motherboards
  • A low-profile height of just 34mm ensures that VENGEANCE LPX even fits in most small-form-factor builds
  • A solid aluminum heatspreader efficiently dissipates heat from each module so that they consistently run at high clock speeds

Linux page cache is the kernel’s file cache

Linux caches file contents in memory so applications can reread files without issuing another device read. In /proc/meminfo, Cached means in-memory cache for files read from disk and also includes tmpfs and shmem. It excludes SwapCached.

The page cache is owned by the Linux kernel and is separate from ARC. A file read through a ZFS filesystem can therefore involve both systems: ZFS may satisfy a block from ARC, while Linux also maintains file-cache structures for the filesystem interface. The counters do not provide a simple one-to-one map of physical pages, and the same underlying data should not be assumed to appear as two fully additive copies.

Why the numbers in memory tools do not match

Different commands answer different questions. ARC statistics describe ZFS’s cache policy and target. /proc/meminfo describes Linux memory categories, several of which overlap or are estimates rather than exclusive ownership buckets.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Question ZFS ARC view Linux memory view
What is being measured? ZFS-managed adaptive cache of blocks in RAM. File page cache plus tmpfs/shmem in Cached; broader kernel and application categories appear elsewhere in /proc/meminfo.
Primary inspection point /proc/spl/kstat/zfs/arcstats; release-specific zarcsummary and zarcstat utilities. /proc/meminfo, especially MemAvailable, Cached, Active(file), and Inactive(file).
What indicates headroom? ARC target, size, reclaim-needed values, and the avail estimate when sampled with arcstat-compatible tools. MemAvailable, a kernel estimate of memory that can be given to applications without swapping.
Can the value be added to every other counter? No. ARC figures and Linux counters represent different accounting layers. No. Linux documentation warns that non-overlapping counters may not add to total usage and that differences can be substantial for some workloads.
Is a large value automatically harmful? No. ARC is intended to use otherwise idle RAM and can be reclaimed. No. Clean cache is normally reclaimed when memory is needed, although not every reported category is equally reclaimable.

Why “used RAM” is a misleading verdict

Traditional summaries often subtract “free” from total memory and label the remainder used. That treats useful, reclaimable cache as if it were pinned application data. Linux’s MemAvailable was introduced to provide a better estimate of memory that can be allocated without swapping. Its calculation considers free memory, reclaimable slab, file-LRU size, and zone watermarks, while allowing for the fact that not all reclaimable slab can actually be reclaimed.

Consequently, a server can show high nominal memory use and still have substantial application headroom. Conversely, a moderate-looking cache number does not guarantee safety if MemAvailable is falling, reclaim activity is high, or applications are stalling.

How ARC and page cache interact under memory pressure

Linux OpenZFS provides a shrinker so the kernel can ask ARC to release reclaimable memory. OpenZFS also documents an optional relationship between ARC reclaim and the Linux page-cache LRU through zfs_arc_pc_percent. This control applies during pressure and reclaim; it is not a general-purpose setting for making ARC consume a chosen percentage of RAM during normal operation.

The documented default is release-sensitive. The OpenZFS 2.4 zfs.4 documentation lists zfs_arc_pc_percent=0, meaning the page-cache interaction control is off by default in that release. Older or downstream packages can differ, so check the manual and module parameters installed on the host before changing it.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

When pressure develops, Linux may reclaim clean file pages, reclaimable slab, and ARC pages through the appropriate reclaim paths. The order and amount depend on workload, dirty data, watermarks, and OpenZFS version. There is no universal rule that “Linux cache wins” or “ARC always wins.”

Rank #2
Timetec 16GB KIT(2x8GB) DDR3L / DDR3 1600MHz (DDR3L-1600) PC3L-12800 / PC3-12800 Non-ECC Unbuffered 1.35V/1.5V CL11 2Rx8 Dual Rank 240 Pin UDIMM Desktop PC Computer Memory RAM(SDRAM) Module Upgrade
  • [Color] PCB color may vary (black or green) depending on production batch. Quality and performance remain consistent across all Timetec products.
  • DDR3L / DDR3 1600MHz PC3L-12800 / PC3-12800 240-Pin Unbuffered Non-ECC 1.35V / 1.5V CL11 Dual Rank 2Rx8 based 512x8
  • Module Size: 16GB KIT(2x8GB Modules) Package: 2x8GB ; JEDEC standard 1.35V, this is a dual voltage piece and can operate at 1.35V or 1.5V
  • For DDR3 Desktop Compatible with Intel and AMD CPU, Not for Laptop
  • Guaranteed Lifetime warranty from Purchase Date and Free technical support based on United States

Read the relevant counters on a live host

Inspect Linux headroom and file-cache categories

Start with the related counters rather than a single headline value:

grep -E '^(MemAvailable|Cached|Active(file)|Inactive(file)|Dirty|Writeback):' /proc/meminfo

MemAvailable is the most useful first indicator of application headroom. Cached gives the documented file-cache-plus-tmpfs/shmem category. Active(file) and Inactive(file) show file-LRU activity, while Dirty and Writeback identify pages that still require write-out and therefore cannot be treated like instantly discardable clean cache.

These values are reported in kibibytes. Compare samples over time instead of reacting to one reading. A falling MemAvailable trend accompanied by reclaim, swapping, latency, or allocation failures is more significant than a large but stable Cached value.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Inspect ARC-specific data

Read the kernel statistics file directly:

cat /proc/spl/kstat/zfs/arcstats

The exact fields and helper programs vary by OpenZFS release. Current OpenZFS caching documentation names zarcsummary and zarcstat; older installations may provide commands named arc_summary or arcstat. Confirm which utilities are installed rather than copying a command from a different release.

For a quick view of whether ARC is growing, shrinking, or approaching its target, take repeated samples with the utility available on your system. Keep the OpenZFS version beside each diagnostic record because field names, defaults, and helper output can change.

How to interpret ARC statistics

When using an arcstat-compatible utility, several fields are especially useful:

  • size: the ARC’s current size.
  • need: an estimate related to reclaim needed by the system.
  • free: an estimate that, in the documented arcstat interpretation, includes evictable page-cache memory.
  • avail: an estimate of memory available to ARC-related accounting; the documentation describes it as generally more instructive to observe than free.

avail can temporarily become negative. In that situation ARC reduces its target; a brief negative value is therefore a reclaim signal, not proof that the machine has permanently run out of memory. Interpret it alongside MemAvailable, allocation behavior, swap activity, and workload latency.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Do not compare ARC size directly with Linux Cached and call the larger number “the real cache.” They measure different layers, and the ARC free estimate explicitly accounts for evictable page-cache memory in a way that makes naive addition misleading.

Rank #3
G.SKILL RipjawsV Series DDR4 RAM (XMP) 16GB (2x8GB) Up to 3200MT/s* CL16-18-18-38 1.35V Intel AMD Desktop Computer Memory U-DIMM - Black (F4-3200C16D-16GVKB)
  • Requires overclocking/BIOS adjustments. Maximum speed and performance depends on system components, including motherboard and CPU.
  • G.SKILL RipjawsV Series DDR4 U-DIMM Memory Kit, Model: F4-3200C16D-16GVKB
  • Non-ECC, DDR4 U-DIMM, 288-pin, for Desktop PC & Gaming
  • Includes JEDEC default profile, and Intel XMP memory overclock profile
  • Do not mix memory kits. Memory kits are sold in matched kits that are designed to run together as a set. Mixing memory kits will result in stability issues or system failure.

A practical diagnostic workflow

  1. Record the environment. Capture the Linux kernel version, OpenZFS version, total RAM, swap configuration, and whether the host is a storage server, virtual machine, database host, or mixed workload.
  2. Check application headroom. Read MemAvailable and sample it repeatedly. Note whether it is stable, declining, or recovering after a workload burst.
  3. Separate file cache from dirty memory. Record Cached, Active(file), Inactive(file), Dirty, and Writeback. Dirty and writeback pages involve I/O work and should not be treated as instantly discardable cache.
  4. Inspect ARC behavior. Read /proc/spl/kstat/zfs/arcstats and use the release-appropriate summary or sampling utility. Track size, need, free, and avail where available.
  5. Correlate with symptoms. Look for swapping, direct reclaim, allocation stalls, elevated I/O latency, failed allocations, or application timeouts. A cache number without an observable symptom is not enough to justify tuning.
  6. Check whether pressure is transient. A backup, scrub, scan, or restart can create a temporary working-set change. Continue sampling through the event before making a persistent configuration change.
  7. Verify version-specific controls. Read the installed OpenZFS documentation and module parameters before discussing zfs_arc_pc_percent or an ARC limit. Do not assume the OpenZFS 2.4 default applies to every distribution package.
  8. Change one variable at a time. If a sustained, measured pressure problem remains, apply the smallest documented change, record the previous value, and observe workload impact before making another change.

Why ZFS may appear to use “too much” memory

ARC is designed to fill unused RAM with data that may make future reads faster. Its presence often means ZFS is using available memory productively, not that applications have been deprived of it. As applications request memory, the ARC shrinker and normal cache-reclaim mechanisms can reduce reclaimable cache.

A high ARC size becomes operationally relevant when it coincides with low MemAvailable, sustained reclaim, swap activity, allocation failures, or measurable application impact. Without those signals, reducing ARC simply to make a dashboard’s “used” figure smaller can discard useful data and increase later storage reads.

Control cache admission per dataset with primarycache

OpenZFS provides the dataset property primarycache to control what may enter ARC:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Setting What may enter the primary ARC When it can be relevant
all Data and metadata. The documented default and the normal choice when both repeated data reads and metadata benefit from RAM.
metadata Metadata only. Useful when a dataset’s data working set is too large or is already cached effectively elsewhere, but directory and filesystem metadata still need acceleration.
none Neither data nor metadata in the primary ARC. A specialized choice for workloads where ARC admission is known to waste memory; validate carefully because it can increase device reads and metadata latency.

Changing primarycache is a workload decision, not a generic response to a large ARC value. Measure the access pattern and application effect, and remember that a setting that helps one dataset can hurt another.

Should you change zfs_arc_pc_percent?

Only consider this control after establishing real memory pressure and checking the installed OpenZFS release. It governs how ARC reclaim relates to Linux page-cache size during pressure; it does not replace normal monitoring and is not a universal “reserve this much RAM for Linux” knob.

The OpenZFS 2.4 manual documents a default of zero (off). Because historical documentation and distribution packages can carry different defaults, inspect the local module parameter and matching manual. Record the reason for a change, the measured pressure indicators, and a rollback value.

If the host is healthy and MemAvailable remains comfortable, changing this parameter merely to equalize ARC and page-cache numbers can reduce cache effectiveness without solving a user-visible problem.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Why routinely dropping Linux caches is a bad fix

The kernel exposes /proc/sys/vm/drop_caches, but its documentation positions it for testing and debugging rather than routine cache management. Dropping clean page cache and reclaimable slab objects does not free dirty objects. The discarded cache must be rebuilt, creating additional I/O and CPU work.

Rank #4
Crucial 32GB DDR5 RAM Kit (2x16GB), 5600MHz (or 5200MHz or 4800MHz) Laptop Memory 262-Pin SODIMM, Compatible with Intel Core and AMD Ryzen 7000, Black - CT2K16G56C46S5
  • Boosts System Performance: 32GB DDR5 RAM laptop memory kit (2x16GB) that operates at 5600MHz, 5200MHz, or 4800MHz to improve multitasking and system responsiveness for smoother performance
  • Accelerated gaming performance: Every millisecond gained in fast-paced gameplay counts—power through heavy workloads and benefit from versatile downclocking and higher frame rates
  • Optimized DDR5 compatibility: Best for 12th Gen Intel Core and AMD Ryzen 7000 Series processors — Intel XMP 3.0 and AMD EXPO also supported on the same RAM module
  • Trusted Micron Quality: Backed by 42 years of memory expertise, this DDR5 RAM is rigorously tested at both component and module levels, ensuring top performance and reliability
  • ECC Type = Non-ECC, Form Factor = SODIMM, Pin Count = 262-Pin, PC Speed = PC5-44800, Voltage = 1.1V, Rank And Configuration = 1Rx8

Use cache dropping only when a controlled experiment specifically requires it. Do not place an unconditional cache-drop command in a cron job or startup script to make memory graphs look lower. If a host is under pressure, identify the workload, measure headroom and reclaim, and correct the underlying memory or configuration problem instead.

Troubleshooting common readings

“ARC is large, so Linux has no memory left”

Check MemAvailable, swap activity, reclaim symptoms, and application behavior. A large ARC with stable headroom is normal cache use. Treat it as a problem only when the host shows sustained pressure or workload impact.

“Cached is high, so the page cache is leaking”

Linux normally grows file cache when memory is idle and reclaims clean pages when applications need space. Compare Cached with MemAvailable and the file-LRU counters over time. A rising cache with healthy headroom is expected; a shrinking headroom trend with reclaim symptoms requires investigation.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

“ARC size plus Cached exceeds physical RAM”

Do not add those values as exclusive allocations. They are reported by different accounting layers, and Linux explicitly warns that memory counters can overlap or fail to sum to total usage. Use headroom and pressure indicators instead.

“arcstat says free memory is low”

Check which field is being displayed. The documented free estimate includes evictable page-cache memory, while avail is generally more instructive. Sample both with Linux MemAvailable and observe whether ARC target reduction or application symptoms follow.

“The host became slow after cache was dropped”

Expect discarded clean cache to be rebuilt. That rebuild can increase device I/O and CPU use. Remove routine cache-drop commands, allow the working set to warm again, and investigate the original pressure event using time-correlated samples.

Build a monitoring view that reflects reality

A useful dashboard places subsystem-specific values next to workload signals:

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • Linux MemAvailable and total memory.
  • Cached, Active(file), and Inactive(file).
  • Dirty and Writeback.
  • ARC size, target or reclaim-needed information, and avail when exposed by the installed utility.
  • Swap-in and swap-out activity.
  • Storage latency, I/O queueing, and application response time.
  • Timestamped workload events such as backups, scrubs, scans, and database jobs.

Plot trends rather than relying on a single snapshot. The useful question is not “which cache is bigger?” but “does the workload have reclaimable headroom, and what happens when the kernel and ZFS reclaim memory?”

Version and scope limits

This comparison applies to Linux systems using OpenZFS. OpenZFS’s Linux shrinker behavior and zfs_arc_pc_percent defaults are release-dependent; the OpenZFS 2.4 documentation lists zero as the default for that parameter. Linux’s /proc/meminfo documentation and cache-drop documentation also come from specific kernel documentation versions, so field behavior and explanatory details should be verified against the kernel actually running.

Utility names are not stable across every OpenZFS package. Use the locally installed documentation to determine whether zarcsummary, zarcstat, arc_summary, or arcstat is available, and do not assume that output columns from one release have identical semantics in another.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.