@@ -72,27 +72,24 @@ if(NOT _32BIT)
7272 set (_memcheck_script "${CMAKE_CURRENT_BINARY_DIR } /check_mem_for_large_coll.sh" )
7373 file (WRITE ${_memcheck_script}
7474 "#!/bin/sh\n "
75- "# Exit 77 (CTest SKIP via SKIP_RETURN_CODE) if free RAM+swap < 32 GB.\n "
75+ "# Exit 77 (CTest SKIP via SKIP_RETURN_CODE) if total RAM+swap < 32 GB.\n "
76+ "# We use TOTAL (not free) because the OS reclaims cached pages on demand.\n "
7677 "THRESHOLD_KB=33554432\n "
7778 "if [ -r /proc/meminfo ]; then\n "
78- " # Linux\n "
79- " RAM_KB=\$ (awk '/^MemAvailable :/{print \$ 2}' /proc/meminfo)\n "
80- " SWAP_KB=\$ (awk '/^SwapFree :/{print \$ 2}' /proc/meminfo)\n "
79+ " # Linux: use MemTotal + SwapTotal (kernel will reclaim caches as needed) \n "
80+ " RAM_KB=\$ (awk '/^MemTotal :/{print \$ 2}' /proc/meminfo)\n "
81+ " SWAP_KB=\$ (awk '/^SwapTotal :/{print \$ 2}' /proc/meminfo)\n "
8182 " RAM_KB=\$ {RAM_KB:-0}\n "
8283 " SWAP_KB=\$ {SWAP_KB:-0}\n "
8384 " TOTAL_KB=\$ (( RAM_KB + SWAP_KB ))\n "
8485 "elif [ \"\$ (uname)\" = \" Darwin\" ]; then\n "
85- " # macOS: free+speculative pages via vm_stat, free swap via sysctl vm.swapusage\n "
86- " PAGE_SIZE=\$ (pagesize)\n "
87- " FREE_PAGES=\$ (vm_stat | awk '/^Pages free:/{gsub(\"\\\\ .\" ,\"\" ,\$ 3); print \$ 3}')\n "
88- " SPEC_PAGES=\$ (vm_stat | awk '/^Pages speculative:/{gsub(\"\\\\ .\" ,\"\" ,\$ 3); print \$ 3}')\n "
89- " FREE_PAGES=\$ {FREE_PAGES:-0}\n "
90- " SPEC_PAGES=\$ {SPEC_PAGES:-0}\n "
91- " RAM_KB=\$ (( (FREE_PAGES + SPEC_PAGES) * PAGE_SIZE / 1024 ))\n "
92- " # sysctl output: 'total = NNN.NNM used = NNN.NNM free = NNN.NNM (encrypted)'\n "
93- " SWAP_FREE_MB=\$ (sysctl -n vm.swapusage 2>/dev/null | sed 's/.*free = \\ ([0-9.]*\\ )M.*/\\ 1/')\n "
94- " if [ -n \"\$ SWAP_FREE_MB\" ]; then\n "
95- " SWAP_KB=\$ (awk \" BEGIN{printf \\\" %d\\\" , \$ SWAP_FREE_MB * 1024}\" )\n "
86+ " # macOS: total physical RAM via sysctl hw.memsize (bytes -> kB)\n "
87+ " RAM_BYTES=\$ (sysctl -n hw.memsize 2>/dev/null)\n "
88+ " RAM_KB=\$ (( \$ {RAM_BYTES:-0} / 1024 ))\n "
89+ " # sysctl output: 'total = NNN.NNM used = ... free = ...'\n "
90+ " SWAP_TOTAL_MB=\$ (sysctl -n vm.swapusage 2>/dev/null | sed 's/total = \\ ([0-9.]*\\ )M.*/\\ 1/')\n "
91+ " if [ -n \"\$ SWAP_TOTAL_MB\" ]; then\n "
92+ " SWAP_KB=\$ (awk \" BEGIN{printf \\\" %d\\\" , \$ SWAP_TOTAL_MB * 1024}\" )\n "
9693 " else\n "
9794 " SWAP_KB=0\n "
9895 " fi\n "
@@ -101,7 +98,7 @@ if(NOT _32BIT)
10198 " echo \" testLargeCollections memory check: unsupported OS, assuming enough memory\"\n "
10299 " exit 0\n "
103100 "fi\n "
104- "echo \" testLargeCollections memory check: available \$ {TOTAL_KB} kB (RAM \$ {RAM_KB} + swap \$ {SWAP_KB}), need \$ {THRESHOLD_KB} kB\"\n "
101+ "echo \" testLargeCollections memory check: total \$ {TOTAL_KB} kB (RAM \$ {RAM_KB} + swap \$ {SWAP_KB}), need \$ {THRESHOLD_KB} kB\"\n "
105102 "if [ \"\$ TOTAL_KB\" -lt \"\$ THRESHOLD_KB\" ]; then\n "
106103 " echo \" Insufficient memory -- skipping testLargeCollections\"\n "
107104 " exit 77\n "
0 commit comments