# 实验: 轻载 vs 重载内存压力下, 申请 200M 匿名页的耗时对比 # 设备: iPhone 12 Pro (iPhone13,3) iOS 14.8 Taurine, 6GB, 16K 页, 总页数 367104 # 工具: mem_bench 200M (touch=纯申请/首触缺页, memset=申请+整块写入) # 协议: 轻载基线 -> ballast 阶梯加压(free 1000-2000 页区间) -> 重载测量 -> 释放恢复复测 # 时间: 2026-10-09 09:56:17 ########## Phase A: 轻载基线 ########## ----- vm_stat (轻载, before) ----- Pages free: 86949. Pages speculative: 58176. File-backed pages: 90245. Anonymous pages: 83116. Pages stored in compressor: 0. Pages occupied by compressor: 0. Decompressions: 0. Compressions: 0. ----- mem_bench 200M -r 5 -m touch (轻载) ----- target : 209715200 bytes (200.00 MiB), 12800 page(s) x 16384 B, mode=touch , runs=5 run 1/5: mmap= 10.0 us | fill(touch )= 38.013 ms ( 2969.8 ns/page) | unmap= 7.208 ms | rss= 202.44 MiB run 2/5: mmap= 20.0 us | fill(touch )= 32.744 ms ( 2558.1 ns/page) | unmap= 7.053 ms | rss= 202.47 MiB run 3/5: mmap= 15.0 us | fill(touch )= 37.463 ms ( 2926.8 ns/page) | unmap= 7.943 ms | rss= 202.47 MiB run 4/5: mmap= 13.0 us | fill(touch )= 37.458 ms ( 2926.4 ns/page) | unmap= 7.808 ms | rss= 202.47 MiB run 5/5: mmap= 14.0 us | fill(touch )= 37.731 ms ( 2947.7 ns/page) | unmap= 7.415 ms | rss= 202.47 MiB ---- summary (5 runs, 200.00 MiB, touch mode) ---- mmap : avg 14.400 us | min 10.000 us | max 20.000 us fill : avg 36.682 ms | min 32.744 ms | max 38.013 ms unmap : avg 7.485 ms | min 7.053 ms | max 7.943 ms first-touch fault: avg 2865.8 ns/page over 5 run(s) peak rss: 202.47 MiB ----- mem_bench 200M -r 5 -m memset (轻载) ----- target : 209715200 bytes (200.00 MiB), 12800 page(s) x 16384 B, mode=memset, runs=5 run 1/5: mmap= 11.0 us | fill(memset)= 47.219 ms ( 4235.6 MiB/s) | unmap= 8.542 ms | rss= 202.38 MiB run 2/5: mmap= 19.0 us | fill(memset)= 43.310 ms ( 4617.9 MiB/s) | unmap= 5.603 ms | rss= 202.41 MiB run 3/5: mmap= 24.0 us | fill(memset)= 44.220 ms ( 4522.8 MiB/s) | unmap= 7.398 ms | rss= 202.41 MiB run 4/5: mmap= 23.0 us | fill(memset)= 46.967 ms ( 4258.3 MiB/s) | unmap= 8.162 ms | rss= 202.41 MiB run 5/5: mmap= 26.0 us | fill(memset)= 46.333 ms ( 4316.6 MiB/s) | unmap= 8.050 ms | rss= 202.41 MiB ---- summary (5 runs, 200.00 MiB, memset mode) ---- mmap : avg 20.600 us | min 11.000 us | max 26.000 us fill : avg 45.610 ms | min 43.310 ms | max 47.219 ms unmap : avg 7.551 ms | min 5.603 ms | max 8.542 ms memset throughput: avg 4390.2 MiB/s over 5 run(s) peak rss: 202.41 MiB ----- vm_stat (轻载, after) ----- Pages free: 87049. Pages speculative: 58022. File-backed pages: 90091. Anonymous pages: 83272. Pages stored in compressor: 0. Pages occupied by compressor: 0. Decompressions: 0. Compressions: 0. ########## Phase B: 阶梯加压 ########## ----- B1: ballast 2400M 启动 ----- PID=1516 Pages free: 6267. Pages speculative: 342. File-backed pages: 74790. Anonymous pages: 232740. Pages stored in compressor: 29. Pages occupied by compressor: 16. Compressions: 37. 1516 /var/mobile/ios_memslice/mem_stress ----- B2: ballast +1200M (累计 3600M) ----- PID=1516 PID=1551 Pages free: 8993. Pages speculative: 115. File-backed pages: 74228. Anonymous pages: 233087. Pages stored in compressor: 75055. Pages occupied by compressor: 991. Decompressions: 32. Compressions: 75087. 1516 /var/mobile/ios_memslice/mem_stress 1551 /var/mobile/ios_memslice/mem_stress ----- B3: 压缩性 A/B 验证 (512M 模式 vs 512M 随机, 各保持 6s) ----- --- pattern 512M (每页1字节 0xA5) --- touch : touched 32768 pages (512.00 MiB) in 0.116 s [4408.4 MiB/s, 282.1K pages/s] rss : resident 514.39 MiB, phys_footprint 513.30 MiB release: munmap ok, total 6.168 s, peak rss 514.41 MiB --- random 512M (-R) --- touch : filled(random) 32768 pages (512.00 MiB) in 0.372 s [1377.9 MiB/s, 88.2K pages/s] rss : resident 514.39 MiB, phys_footprint 513.30 MiB release: munmap ok, total 6.409 s, peak rss 514.41 MiB ----- B4: 清场 + 随机 ballast 2000M 起步 (-R 不可压缩) ----- Pages free: 41558. File-backed pages: 74194. Pages stored in compressor: 110720. PID=1765 Pages free: 5651. Pages speculative: 97. File-backed pages: 74185. Anonymous pages: 232525. Pages stored in compressor: 206406. Pages occupied by compressor: 1529. Decompressions: 84. Compressions: 206574. 1516 /var/mobile/ios_memslice/mem_stress 1551 /var/mobile/ios_memslice/mem_stress 1765 /var/mobile/ios_memslice/mem_stress ----- B5: 清掉旧 pattern ballast + 随机 ballast +600M (累计 2600M) ----- 1765 /var/mobile/ios_memslice/mem_stress 1811 Pages free: 5175. Pages speculative: 113. File-backed pages: 74207. Anonymous pages: 63779. Pages stored in compressor: 178792. Pages occupied by compressor: 170441. Decompressions: 578. Compressions: 383746. ----- B6: 随机 ballast +800M (累计 3400M) ----- 1865 Pages free: 5756. Pages speculative: 3989. File-backed pages: 49673. Anonymous pages: 44451. Pages stored in compressor: 243078. Pages occupied by compressor: 216900. Decompressions: 4828. Compressions: 452505. ----- B7: 随机 ballast +800M (累计 4200M) ----- 1895 Pages free: 7303. Pages speculative: 495. File-backed pages: 18031. Anonymous pages: 14997. Pages stored in compressor: 285747. Pages occupied by compressor: 275337. Decompressions: 21682. Compressions: 539908. ----- B8: 随机 ballast +400M (累计 4600M) ----- 2189 Exception (client): Error reading SSH protocol banner Traceback (most recent call last): File "/Users/sched/Library/Python/3.9/lib/python/site-packages/paramiko/transport.py", line 2213, in _check_banner buf = self.packetizer.readline(timeout) File "/Users/sched/Library/Python/3.9/lib/python/site-packages/paramiko/packet.py", line 395, in readline buf += self._read_timeout(timeout) File "/Users/sched/Library/Python/3.9/lib/python/site-packages/paramiko/packet.py", line 665, in _read_timeout raise EOFError() EOFError During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/Users/sched/Library/Python/3.9/lib/python/site-packages/paramiko/transport.py", line 2029, in run self._check_banner() File "/Users/sched/Library/Python/3.9/lib/python/site-packages/paramiko/transport.py", line 2217, in _check_banner raise SSHException( paramiko.ssh_exception.SSHException: Error reading SSH protocol banner Traceback (most recent call last): File "/Users/sched/Library/Python/3.9/lib/python/site-packages/paramiko/transport.py", line 2213, in _check_banner buf = self.packetizer.readline(timeout) File "/Users/sched/Library/Python/3.9/lib/python/site-packages/paramiko/packet.py", line 395, in readline buf += self._read_timeout(timeout) File "/Users/sched/Library/Python/3.9/lib/python/site-packages/paramiko/packet.py", line 665, in _read_timeout raise EOFError() EOFError During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/Users/sched/Documents/workspace/mem_alloc_bench/run_on_device.py", line 43, in c = connect() File "/Users/sched/Documents/workspace/mem_alloc_bench/run_on_device.py", line 16, in connect c.connect("localhost", port=2222, username="root", password="alpine", File "/Users/sched/Library/Python/3.9/lib/python/site-packages/paramiko/client.py", line 443, in connect t.start_client(timeout=timeout) File "/Users/sched/Library/Python/3.9/lib/python/site-packages/paramiko/transport.py", line 701, in start_client raise e File "/Users/sched/Library/Python/3.9/lib/python/site-packages/paramiko/transport.py", line 2029, in run self._check_banner() File "/Users/sched/Library/Python/3.9/lib/python/site-packages/paramiko/transport.py", line 2217, in _check_banner raise SSHException( paramiko.ssh_exception.SSHException: Error reading SSH protocol banner ########## [重启后正式实验 10:5x 起, panic 后同一启动会话] ########## ----- 前置: 系统状态 ----- 10:58:04 up 0:47, 0 users, load average: 2.21, 5.08, 4.17 Pages free: 113701. File-backed pages: 81616. Pages stored in compressor: 0. Compressions: 1781. ----- Phase A': 轻载基线 mem_bench 200M -r 5 -m touch ----- target : 209715200 bytes (200.00 MiB), 12800 page(s) x 16384 B, mode=touch , runs=5 run 1/5: mmap= 12.0 us | fill(touch )= 35.096 ms ( 2741.9 ns/page) | unmap= 7.420 ms | rss= 202.34 MiB run 2/5: mmap= 15.0 us | fill(touch )= 35.847 ms ( 2800.5 ns/page) | unmap= 7.354 ms | rss= 202.38 MiB run 3/5: mmap= 15.0 us | fill(touch )= 35.055 ms ( 2738.7 ns/page) | unmap= 7.656 ms | rss= 202.38 MiB run 4/5: mmap= 18.0 us | fill(touch )= 36.559 ms ( 2856.2 ns/page) | unmap= 7.690 ms | rss= 202.38 MiB run 5/5: mmap= 20.0 us | fill(touch )= 36.880 ms ( 2881.3 ns/page) | unmap= 8.315 ms | rss= 202.38 MiB ---- summary (5 runs, 200.00 MiB, touch mode) ---- mmap : avg 16.000 us | min 12.000 us | max 20.000 us fill : avg 35.887 ms | min 35.055 ms | max 36.880 ms unmap : avg 7.687 ms | min 7.354 ms | max 8.315 ms first-touch fault: avg 2803.7 ns/page over 5 run(s) peak rss: 202.38 MiB ----- Phase A': 轻载基线 mem_bench 200M -r 5 -m memset ----- target : 209715200 bytes (200.00 MiB), 12800 page(s) x 16384 B, mode=memset, runs=5 run 1/5: mmap= 11.0 us | fill(memset)= 45.899 ms ( 4357.4 MiB/s) | unmap= 8.661 ms | rss= 202.41 MiB run 2/5: mmap= 15.0 us | fill(memset)= 46.542 ms ( 4297.2 MiB/s) | unmap= 8.125 ms | rss= 202.44 MiB run 3/5: mmap= 18.0 us | fill(memset)= 44.581 ms ( 4486.2 MiB/s) | unmap= 8.013 ms | rss= 202.44 MiB run 4/5: mmap= 9.0 us | fill(memset)= 44.412 ms ( 4503.3 MiB/s) | unmap= 7.889 ms | rss= 202.44 MiB run 5/5: mmap= 19.0 us | fill(memset)= 45.345 ms ( 4410.6 MiB/s) | unmap= 7.734 ms | rss= 202.44 MiB ---- summary (5 runs, 200.00 MiB, memset mode) ---- mmap : avg 14.400 us | min 9.000 us | max 19.000 us fill : avg 45.356 ms | min 44.412 ms | max 46.542 ms unmap : avg 8.084 ms | min 7.734 ms | max 8.661 ms memset throughput: avg 4410.9 MiB/s over 5 run(s) peak rss: 202.44 MiB ----- vm_stat (轻载基线后) ----- Pages free: 110535. File-backed pages: 81526. Pages stored in compressor: 0. Compressions: 1781. ----- B'1: ballast 1600M -P 50 (累计 1600M) ----- 2090 Pages free: 14192. Pages speculative: 49480. File-backed pages: 79309. Anonymous pages: 171566. Pages stored in compressor: 0. Pages occupied by compressor: 32. Decompressions: 302. Compressions: 1781. ----- B'2: ballast +400M (累计 2000M) ----- 2120 Pages free: 9939. Pages speculative: 40712. File-backed pages: 69471. Anonymous pages: 194349. Pages stored in compressor: 0. Pages occupied by compressor: 32. Decompressions: 302. Compressions: 1781. ----- B'3: ballast +400M (累计 2400M) ----- 2161 Pages free: 7525. Pages speculative: 15316. File-backed pages: 68406. Anonymous pages: 220178. Pages stored in compressor: 0. Pages occupied by compressor: 32. Decompressions: 302. Compressions: 1781. ----- B'4: ballast +400M (累计 2800M) ----- 2199 Pages free: 8021. Pages speculative: 376. File-backed pages: 72520. Anonymous pages: 228919. Pages stored in compressor: 16209. Pages occupied by compressor: 8373. Decompressions: 340. Compressions: 18030. ----- B'5: ballast +400M (累计 3200M, 上限) ----- 2242 Pages free: 6670. Pages speculative: 740. File-backed pages: 72180. Anonymous pages: 194349. Pages stored in compressor: 75869. Pages occupied by compressor: 41306. Decompressions: 399. Compressions: 77858. 5 ########## Phase C': 重载(3200M ballast)下测量 ########## ----- vm_stat (重载, before) ----- Pages free: 9596. Pages speculative: 856. File-backed pages: 72311. Anonymous pages: 194653. Pages stored in compressor: 75721. Pages occupied by compressor: 41234. Decompressions: 486. Compressions: 77858. ----- mem_bench 200M -r 5 -m touch (重载) ----- error: multiple sizes given ('200M' and '600') ----- vm_stat (touch 测量后) ----- Pages free: 9515. Pages stored in compressor: 75721. Decompressions: 486. Compressions: 77858. ----- mem_bench 200M -r 5 -m memset (重载) ----- error: multiple sizes given ('200M' and '600') ----- vm_stat (重载, after) ----- Pages free: 6164. File-backed pages: 72317. Pages stored in compressor: 75721. Pages occupied by compressor: 41234. Decompressions: 486. Compressions: 77858. ----- mem_bench 200M -r 5 -m touch (重载, 修正) ----- target : 209715200 bytes (200.00 MiB), 12800 page(s) x 16384 B, mode=touch , runs=5 run 1/5: mmap= 14.0 us | fill(touch )= 45.172 ms ( 3529.1 ns/page) | unmap= 20.535 ms | rss= 202.31 MiB run 2/5: mmap= 14.0 us | fill(touch )= 40.470 ms ( 3161.7 ns/page) | unmap= 6.474 ms | rss= 202.34 MiB run 3/5: mmap= 16.0 us | fill(touch )= 43.704 ms ( 3414.4 ns/page) | unmap= 7.773 ms | rss= 202.34 MiB run 4/5: mmap= 16.0 us | fill(touch )= 38.578 ms ( 3013.9 ns/page) | unmap= 6.597 ms | rss= 202.34 MiB run 5/5: mmap= 10.0 us | fill(touch )= 46.995 ms ( 3671.5 ns/page) | unmap= 7.320 ms | rss= 202.34 MiB ---- summary (5 runs, 200.00 MiB, touch mode) ---- mmap : avg 14.000 us | min 10.000 us | max 16.000 us fill : avg 42.984 ms | min 38.578 ms | max 46.995 ms unmap : avg 9.740 ms | min 6.474 ms | max 20.535 ms first-touch fault: avg 3358.1 ns/page over 5 run(s) peak rss: 202.34 MiB ----- mem_bench 200M -r 5 -m memset (重载, 修正) ----- target : 209715200 bytes (200.00 MiB), 12800 page(s) x 16384 B, mode=memset, runs=5 run 1/5: mmap= 10.0 us | fill(memset)= 47.213 ms ( 4236.1 MiB/s) | unmap= 7.066 ms | rss= 202.38 MiB run 2/5: mmap= 13.0 us | fill(memset)= 46.587 ms ( 4293.0 MiB/s) | unmap= 6.873 ms | rss= 202.44 MiB run 3/5: mmap= 21.0 us | fill(memset)= 47.779 ms ( 4185.9 MiB/s) | unmap= 7.179 ms | rss= 202.44 MiB run 4/5: mmap= 23.0 us | fill(memset)= 47.336 ms ( 4225.1 MiB/s) | unmap= 7.643 ms | rss= 202.44 MiB run 5/5: mmap= 16.0 us | fill(memset)= 47.274 ms ( 4230.7 MiB/s) | unmap= 8.002 ms | rss= 202.44 MiB ---- summary (5 runs, 200.00 MiB, memset mode) ---- mmap : avg 16.600 us | min 10.000 us | max 23.000 us fill : avg 47.238 ms | min 46.587 ms | max 47.779 ms unmap : avg 7.353 ms | min 6.873 ms | max 8.002 ms memset throughput: avg 4234.2 MiB/s over 5 run(s) peak rss: 202.44 MiB ----- vm_stat (重载测量后) ----- Pages free: 14876. File-backed pages: 71159. Pages stored in compressor: 84584. Pages occupied by compressor: 46117. Decompressions: 487. Compressions: 86725. ----- B'6: 重启 ballast 为单实例 3600M -P 50 -t 600 ----- Pages free: 182382. Pages stored in compressor: 2140. --- 启动 3600M 单实例 --- 2380 Pages free: 6690. Pages speculative: 869. File-backed pages: 49623. Anonymous pages: 241395. Pages stored in compressor: 49426. Pages occupied by compressor: 19671. Decompressions: 88609. Compressions: 222194. ########## Phase C'2: 重载-2 (3600M ballast) 下测量 ########## ----- mem_bench 200M -r 5 -m touch ----- target : 209715200 bytes (200.00 MiB), 12800 page(s) x 16384 B, mode=touch , runs=5 run 1/5: mmap= 10.0 us | fill(touch )= 55.757 ms ( 4356.0 ns/page) | unmap= 11.909 ms | rss= 202.38 MiB run 2/5: mmap= 27.0 us | fill(touch )= 43.881 ms ( 3428.2 ns/page) | unmap= 6.828 ms | rss= 202.41 MiB run 3/5: mmap= 16.0 us | fill(touch )= 43.631 ms ( 3408.7 ns/page) | unmap= 6.215 ms | rss= 202.41 MiB run 4/5: mmap= 24.0 us | fill(touch )= 38.083 ms ( 2975.2 ns/page) | unmap= 6.152 ms | rss= 202.41 MiB run 5/5: mmap= 18.0 us | fill(touch )= 37.786 ms ( 2952.0 ns/page) | unmap= 5.731 ms | rss= 202.41 MiB ---- summary (5 runs, 200.00 MiB, touch mode) ---- mmap : avg 19.000 us | min 10.000 us | max 27.000 us fill : avg 43.828 ms | min 37.786 ms | max 55.757 ms unmap : avg 7.367 ms | min 5.731 ms | max 11.909 ms first-touch fault: avg 3424.0 ns/page over 5 run(s) peak rss: 202.41 MiB ----- mem_bench 200M -r 5 -m memset ----- target : 209715200 bytes (200.00 MiB), 12800 page(s) x 16384 B, mode=memset, runs=5 run 1/5: mmap= 11.0 us | fill(memset)= 46.442 ms ( 4306.4 MiB/s) | unmap= 7.360 ms | rss= 202.31 MiB run 2/5: mmap= 24.0 us | fill(memset)= 47.410 ms ( 4218.5 MiB/s) | unmap= 7.586 ms | rss= 202.34 MiB run 3/5: mmap= 14.0 us | fill(memset)= 50.152 ms ( 3987.9 MiB/s) | unmap= 7.843 ms | rss= 202.34 MiB run 4/5: mmap= 19.0 us | fill(memset)= 48.134 ms ( 4155.1 MiB/s) | unmap= 7.731 ms | rss= 202.34 MiB run 5/5: mmap= 20.0 us | fill(memset)= 46.689 ms ( 4283.7 MiB/s) | unmap= 7.863 ms | rss= 202.34 MiB ---- summary (5 runs, 200.00 MiB, memset mode) ---- mmap : avg 17.600 us | min 11.000 us | max 24.000 us fill : avg 47.765 ms | min 46.442 ms | max 50.152 ms unmap : avg 7.677 ms | min 7.360 ms | max 7.863 ms memset throughput: avg 4190.3 MiB/s over 5 run(s) peak rss: 202.34 MiB ----- vm_stat (重载-2 测量后) ----- Pages free: 14969. File-backed pages: 43427. Pages stored in compressor: 53622. Pages occupied by compressor: 21995. Decompressions: 88635. Compressions: 226418. ----- B'7: 重启为 3600M + 1000M 双实例 (累计 4600M) ----- 2489 --- +1000M --- 2511 Pages free: 7753. Pages speculative: 749. File-backed pages: 33222. Anonymous pages: 198043. Pages stored in compressor: 156749. Pages occupied by compressor: 78372. Decompressions: 99552. Compressions: 353515. ########## Phase C'3: 重载-3 (4600M ballast, 压缩器持有 2.39G) 下测量 ########## ----- mem_bench 200M -r 5 -m touch ----- target : 209715200 bytes (200.00 MiB), 12800 page(s) x 16384 B, mode=touch , runs=5 run 1/5: mmap= 11.0 us | fill(touch )= 89.537 ms ( 6995.1 ns/page) | unmap= 13.056 ms | rss= 202.38 MiB run 2/5: mmap= 22.0 us | fill(touch )= 42.230 ms ( 3299.2 ns/page) | unmap= 7.901 ms | rss= 202.44 MiB run 3/5: mmap= 20.0 us | fill(touch )= 39.736 ms ( 3104.4 ns/page) | unmap= 7.672 ms | rss= 202.44 MiB run 4/5: mmap= 17.0 us | fill(touch )= 46.354 ms ( 3621.4 ns/page) | unmap= 7.690 ms | rss= 202.44 MiB run 5/5: mmap= 13.0 us | fill(touch )= 45.267 ms ( 3536.5 ns/page) | unmap= 6.450 ms | rss= 202.44 MiB ---- summary (5 runs, 200.00 MiB, touch mode) ---- mmap : avg 16.600 us | min 11.000 us | max 22.000 us fill : avg 52.625 ms | min 39.736 ms | max 89.537 ms unmap : avg 8.554 ms | min 6.450 ms | max 13.056 ms first-touch fault: avg 4111.3 ns/page over 5 run(s) peak rss: 202.44 MiB ----- mem_bench 200M -r 5 -m memset ----- target : 209715200 bytes (200.00 MiB), 12800 page(s) x 16384 B, mode=memset, runs=5 run 1/5: mmap= 11.0 us | fill(memset)= 53.629 ms ( 3729.3 MiB/s) | unmap= 6.615 ms | rss= 202.31 MiB run 2/5: mmap= 18.0 us | fill(memset)= 51.653 ms ( 3872.0 MiB/s) | unmap= 7.813 ms | rss= 202.34 MiB run 3/5: mmap= 12.0 us | fill(memset)= 49.734 ms ( 4021.4 MiB/s) | unmap= 7.805 ms | rss= 202.34 MiB run 4/5: mmap= 12.0 us | fill(memset)= 53.077 ms ( 3768.1 MiB/s) | unmap= 7.610 ms | rss= 202.34 MiB run 5/5: mmap= 18.0 us | fill(memset)= 49.575 ms ( 4034.3 MiB/s) | unmap= 7.287 ms | rss= 202.34 MiB ---- summary (5 runs, 200.00 MiB, memset mode) ---- mmap : avg 14.200 us | min 11.000 us | max 18.000 us fill : avg 51.534 ms | min 49.575 ms | max 53.629 ms unmap : avg 7.426 ms | min 6.615 ms | max 7.813 ms memset throughput: avg 3885.0 MiB/s over 5 run(s) peak rss: 202.34 MiB ----- vm_stat (重载-3 测量后) ----- Pages free: 15131. File-backed pages: 32792. Pages stored in compressor: 171828. Pages occupied by compressor: 86710. Decompressions: 100680. Compressions: 369902. ########## Phase D: 释放 + 恢复复测 ########## ----- 释放全部 ballast ----- zsh:1: no matches found: [m]em_stress killed Pages free: 240790. File-backed pages: 41256. Pages stored in compressor: 41898. Pages occupied by compressor: 15493. ----- 恢复后复测 mem_bench 200M -r 3 -m touch ----- target : 209715200 bytes (200.00 MiB), 12800 page(s) x 16384 B, mode=touch , runs=3 run 1/3: mmap= 10.0 us | fill(touch )= 38.698 ms ( 3023.3 ns/page) | unmap= 6.951 ms | rss= 202.38 MiB run 2/3: mmap= 9.0 us | fill(touch )= 39.747 ms ( 3105.2 ns/page) | unmap= 6.099 ms | rss= 202.41 MiB run 3/3: mmap= 8.0 us | fill(touch )= 30.754 ms ( 2402.7 ns/page) | unmap= 5.251 ms | rss= 202.41 MiB ---- summary (3 runs, 200.00 MiB, touch mode) ---- mmap : avg 9.000 us | min 8.000 us | max 10.000 us fill : avg 36.400 ms | min 30.754 ms | max 39.747 ms unmap : avg 6.100 ms | min 5.251 ms | max 6.951 ms first-touch fault: avg 2843.7 ns/page over 3 run(s) peak rss: 202.41 MiB ----- 恢复后复测 mem_bench 200M -r 3 -m memset ----- target : 209715200 bytes (200.00 MiB), 12800 page(s) x 16384 B, mode=memset, runs=3 run 1/3: mmap= 10.0 us | fill(memset)= 45.712 ms ( 4375.2 MiB/s) | unmap= 6.954 ms | rss= 202.38 MiB run 2/3: mmap= 23.0 us | fill(memset)= 44.052 ms ( 4540.1 MiB/s) | unmap= 7.309 ms | rss= 202.41 MiB run 3/3: mmap= 18.0 us | fill(memset)= 41.952 ms ( 4767.4 MiB/s) | unmap= 6.868 ms | rss= 202.41 MiB ---- summary (3 runs, 200.00 MiB, memset mode) ---- mmap : avg 17.000 us | min 10.000 us | max 23.000 us fill : avg 43.905 ms | min 41.952 ms | max 45.712 ms unmap : avg 7.044 ms | min 6.868 ms | max 7.309 ms memset throughput: avg 4560.9 MiB/s over 3 run(s) peak rss: 202.41 MiB ----- 最终 vm_stat ----- Pages free: 237475. File-backed pages: 41256. Pages stored in compressor: 41897. Compressions: 369902. ########## 分析总结 (2026-10-09) ########## # 设备: iPhone 12 Pro / iOS 14.8.1 / 6GB / 16K 页; mem_bench 200M = 12800 页 # # | 状态 | ballast | free页 | mmap µs* | touch 首触 (纯申请) | vs轻载 | memset 耗时 | vs轻载 | memset MiB/s | # |---------------|---------|---------|----------|------------------------|--------|-------------|--------|--------------| # | 轻载基线 | 0 | 110535 | 15.2 | 35.9ms (2803.7 ns/页) | — | 45.4ms | — | 4410.9 | # | 重载-1 | 3200M | 9596 | 15.3 | 43.0ms (3358.1 ns/页) | +19.8% | 47.2ms | +4.1% | 4234.2 | # | 重载-2 | 3600M | 6690 | 18.3 | 43.8ms (3424.0 ns/页) | +22.1% | 47.8ms | +5.3% | 4190.3 | # | 重载-3 | 4600M | 7753 | 15.4 | 52.6ms (4111.3 ns/页) | +46.6% | 51.5ms | +13.6% | 3885.0 | # | 恢复复测 | 0 | 240790 | 13.0 | 36.4ms (2843.7 ns/页) | +1.4% | 43.9ms | -3.2% | 4560.9 | # * mmap 为 touch/memset 两模式各 5 轮均值; 全部 50+ 次测量 8~27µs, 与压力无关 # unmap 释放 5.3~20.5ms (重载偶发尖峰) # # 冷启动首轮尖峰 (压力态下第一笔分配最贵): # 重载-2 run1 = 4356 ns/page (+55%), 重载-3 run1 = 6995 ns/page (+150%) # mmap 建映射耗时恒定 9~27us (与压力无关); unmap 5.3~20.5ms (重载偶发尖峰) # # 结论: # 1. "申请200M"的真实成本在首触缺页: 中载+20%, 重载+47%, 冷首轮最高+150% # 2. memset 带宽受影响较小 (-4%~-12%), 流式写与回收重叠 # 3. XNU 压缩器是压力球阀: -P 50 ballast 以 ~2:1~2.5:1 被持续吸收, # 4600M 负载下仍守在 free_target 之上, 系统优雅降级 # 4. 悬崖: 不可压缩(随机)数据 1:1 塞满压缩器 -> 守护进程饿死 -> # userspace watchdog 180s -> 内核 panic (10:11 事故, 见 INCIDENT-panic-1011.txt) # 5. 加压实验设计准则: ballast 必须部分可压缩(-P 50≈真实App数据); # 全随机=DoS, 模式填充=被零成本吸收