High non-paged pool memory usage on S2D failover clusters - refs.sys?

Peter Camps 20 Reputation points
2026-10-02T11:39:36.0833333+00:00

After several updates in August 2026 (Windows updates (KB5101372), secure boot certificates and HPE SPP P95170_001_gen10spp-2026.05.00.00-SPP2026050000.2026_0527.9 we are experiencing what looks like a memory leak on all Windows 2025 Core Hyper-V servers in S2D failover clusters. The non-paged pool is steadily increasing and eventually leads to a non-responsive host. After a reboot the non-paged pool starts at about 5 GB and eventually grows to several hundreds GB.

Poolmon shows after reboot about 1 week ago:

User's image

Refs.sys shows high usage. The version of refs.sys was 10.0.26100.33158. After discovering the problems we started installing KB5122871 and got refs.sys version 10.0.26100.33438. But the problem is still unresolved. At this moment we need to reboot the Hyper-V servers every few weeks to bring the non-paged pool usage back down.

We are using HPE Proliant DL380 Gen10 Plus servers with NVMe drives, Intel(R) Ethernet Network Adapter E810-XXVDA4 NIC's.

All storage is configured as 3-way mirror with CSVFS_ReFS

Windows Server Core 2025

But even in my small (virtual) test cluster i can see that the non-paged pool is steadily increasing. This is a nested Hyper-V cluster with no third party drivers.

Anybody experiencing the same issue? Or have a resolution for this problem?

Peter Camps

Windows for business | Windows Server | Storage high availability | Clustering and high availability

6 answers

Sort by: Most helpful
  1. Fedor Travinsky 10 Reputation points
    2026-10-21T10:01:44.59+00:00

    We see the same MSPi non-paged pool leak on a Windows Server 2025 S2D cluster (4 × Dell R640, CSVFS_ReFS, two CSVs: 9 TB NVMe mirror + 18 TB hybrid). Build 26100.33438 (KB5122871), refs.sys 10.0.26100.33438, so the September CU does not fix it for us either.

    One node reached 40,066,531 MSPi allocations = 152.8 GiB non-paged pool after 24.8 days uptime (384 GB RAM); MSPi was 99% of all NP pool.

    1. Growth is tied to CSV ownership

    • Owning one CSV: ~6 GB/day. Owning both: ~17 GB/day (~18,000 allocs vs ~3,000 frees per minute).
    • Nodes owning no CSV: MSPi stays near zero (0.01 GB on a node running 12 VMs).
    • After moving the CSVs off a node, growth stops immediately (0 allocs/frees per minute), but the memory is never released. Only a reboot frees it.

    2. Live kernel dump (LiveKD -ml) of the affected node

    • !poolused 2 MSPi: 40,066,531 allocs, 164,108,436,752 bytes, Minstore generic/untagged allocation, refs.sys
    • Every allocation is a large page allocation of exactly 0x1000 bytes.
    • 24 blocks sampled across ~1.48M hits from !poolfind MSPi -nonpaged -large are byte-for-byte identical: 512 bytes of data, the rest zero, no pointers to code or kernel objects.
    • Those 512 bytes are a GPT protective MBR (LBA 0):
    Offset Bytes Meaning
    0x000 33 C0 8E D0 BC 00 7C … Windows MBR boot code
    0x1B8 00 00 00 00 Disk signature 0 (GPT)
    0x1C2 EE Partition type: GPT protective
    0x1C6 01 00 00 00 Starting LBA 1
    0x1CA FF FF FF FF Size: disk > 2 TiB
    0x1FE 55 AA Boot signature

    So it looks like refs.sys (Minstore) repeatedly reads sector 0 of a large GPT disk, most likely the CSV virtual disk, into a 4 KB non-paged buffer that is never freed. At ~6 GB/day that is roughly 17 reads/sec per CSV on the coordinator.

    How to check your own nodes

    poolmon -b                                        # MSPi Nonp bytes per node
    Get-ClusterSharedVolume | ft Name, OwnerNode      # compare with CSV owners
    !poolused 2 MSPi                                  # in a dump
    !poolfind MSPi -nonpaged -large                   # then db <addr> on a few hits
    

    Interim mitigation: watch MSPi per node, move CSVs away and reboot before NP pool gets critical. A live dump is available if Microsoft wants it.

    Was this answer helpful?


  2. Andy Taylor 0 Reputation points
    2026-10-20T08:52:05.58+00:00

    Hi @Peter Camps Did you get anywhere with this? We're having exactly the same issue with a 2 node 2025 Datacenter Hyper-V cluster. CSV Ownership seems to trigger this increasing MSPi allocation. We're seeing approx 1GB an hour until the host becomes unresponsive.

    Was this answer helpful?


  3. Peter Camps 20 Reputation points
    2026-10-15T08:40:30.1466667+00:00

    Yesterday i upgraded the firmware and drivers of the Intel(R) Ethernet Network Adapter E810-XXVDA4 to 5.00 (firmware) and 1.21.114.0 (drivers) on a 2-node cluster. But looking at the graphs today it is still slowly growing.

    At this moment I am growing out of options. There is a new update (KB5126646) which again introduces a new refs.sys but I installed this on 1 cluster and it changed de refs.sys version but not the issues we are having.

    Peter

    Was this answer helpful?

    0 comments No comments

  4. Peter Camps 20 Reputation points
    2026-10-12T07:53:05.1633333+00:00

    I have opened a case with our distributor (cannot use our MS Premier support) and they advised me to change/add a few registry settings.

    Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "RefsEnableLargeWorkingSetTrim" -Value 1 -Type DWord

    Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "RefsNumberOfChunksToTrim" -Value 16 -Type DWord

    Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "RefsEnableInlineTrim" -Value 1 -Type DWord

    I have done this on 2 Failover clusters and have been monitoring the non-paged pool usage. But it looks like (after a week) that it does not change the behaviour. It is still steadily growing, most of the nodes start at about 6 GB when rebooted, and now after the registry changes and a reboot on october 8 they have grown to 23 - 42 GB of non-paged pool usage. The graph shows a steady growth,

    Has anybody seen this in their environment? I am stuck at the moment.

    Peter

    Was this answer helpful?

    0 comments No comments

  5. VPHAN 47,435 Reputation points Independent Advisor
    2026-10-02T12:20:32.8733333+00:00

    Hi Peter Camps,

    Your poolmon.exe capture shows that the MSPi pool taghas nearly 12 million unfreed allocations consuming roughly 49 GB of Non-Paged Pool (Nonp) RAM after one week. You reproduced this exact Non-Paged Pool growth in a nested virtual Hyper-V cluster with no third-party drivers, the HPE Gen10 SPP firmware and Intel E810-XXVDA4 drivers are ruled out as root causes. While KB5101372 (the Servicing Stack Update bundled with the July 2026 Cumulative Update KB5099536, build 10.0.26100.33158) and the September 8, 2026 Cumulative Update KB5122871 (build 10.0.26100.33438) updated refs.sys, neither resolved this leak, and the September 14, 2026 Out-of-Band update (KB5129235, build 10.0.26100.33451) only addresses Remote Desktop and USB audio issues. This seems an unresolved Microsoft bug in refs.sys, there is no permanent fix yet, and you will need to wait for an official Microsoft Cumulative Update that patches the MSPi leak.

    While waiting for an official Microsoft fix, you can configure Microsoft's documented ReFS metadata trimming parameters under HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem on every cluster node by creating the REG_DWORD values RefsEnableLargeWorkingSetTrim set to 1, RefsEnableInlineTrim set to 1, and RefsNumberOfChunksToTrim set to 16 or 32, followed by a rolling node reboot. These parameters force refs.sys to unmap inactive metadata streams inline and at every checkpoint rather than relying on lazy garbage collection; however, because they primarily trim the ReFS metadata working set rather than freeing leaked MSPi Non-Paged Pool pages, they may only modestly reduce memory pressure. To preserve Non-Paged Pool headroom and prevent Srv Event ID 2019 pool exhaustion hangs, check (Get-Cluster).BlockCacheSize in PowerShell to ensure the CSV Block Cache (which also allocates from Non-Paged Pool RAM) is kept conservative, continue scheduling rolling node reboots via Suspend-ClusterNode -Drain, and log a support case with Microsoft Support with your poolmon.exe output and a non-disruptive kernel live dump (Get-StorageDiagnosticInfo or livekd) to escalate the refs.sys defect.

    Hope this answer has brought you some useful information. If it did, please hit “accept answer”. Should you have any questions, feel free to leave a comment.

    VPHAN

    Was this answer helpful?


Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.