Hello,
On Windows Server 2016 with very large memory configurations, the CSV Read Cache can indeed consume nonpaged pool aggressively if BlockCacheSize is set too high. The cache is allocated from nonpaged pool, not general RAM, and the nonpaged pool has strict kernel limits regardless of how much physical memory is installed. That’s why you see exhaustion and node crashes during heavy sequential reads.
The tuning point is the registry path HKLM\System\CurrentControlSet\Services\CsvFs\Parameters. The key BlockCacheSize defines the maximum cache size per node in MB, and BlockCacheSizeMBHigh defines the high watermark where cache trimming begins. Microsoft guidance is to keep the cache allocation well below 25% of the nonpaged pool. On a 512 GB host, the nonpaged pool is typically only a few gigabytes, so values above 256 MB can already destabilize the system.
The best practice is to start conservatively, for example setting BlockCacheSize to 128 MB and BlockCacheSizeMBHigh to 256 MB, then monitor performance counters (CSVFS Block Cache Size, Memory\Pool Nonpaged Bytes) during workload runs. If the nonpaged pool remains stable, you can increase gradually, but avoid pushing into the gigabyte range. Always restart the node after changing these registry values to ensure they take effect.
If you need higher throughput, consider distributing the workload across multiple nodes rather than enlarging the cache excessively. The CSV Read Cache is designed to accelerate sequential reads, but stability must take precedence over raw cache size. Keeping the thresholds modest ensures you gain the performance benefit without risking kernel resource exhaustion.
I hope you've found something useful here. If it helps you get more insight into the issue, it's appreciated to accept the answer. Should you have more questions, feel free to leave a message. Have a nice day!
Domic Vo.