# MGLRU A/B 实测汇总

数据源: `data/results.jsonl`，共 48 条记录


## tc1 — TC-1 anon churn under memcg (direct reclaim)

runs: off=3, on=3

| 指标 | MGLRU OFF 中位数 (min~max) | MGLRU ON 中位数 (min~max) |
|---|---|---|
| ops_per_cpu_s | 106,328 (91,627~106,813) | 136,318 (123,562~140,911) |
| ops_per_s | 109,974 (94,838~110,540) | 141,485 (127,814~145,589) |
| run_majflt | 2,083,764 (1,826,040~2,096,780) | 2,411,759 (2,204,811~2,478,507) |
| run_minflt | 4,030,871 (3,432,585~4,034,254) | 6,721,771 (6,128,164~6,879,070) |
| fill_s | 3.65 (3.54~3.73) | 3.55 (3.44~3.83) |
| cg_pgscan | 5,864,025 (5,249,785~5,898,976) | 3,952,326 (3,666,201~4,041,111) |
| cg_pgsteal | 2,478,642 (2,220,942~2,491,690) | 2,806,649 (2,599,782~2,873,385) |
| g_pswpin | 2,083,779 (1,826,055~2,096,797) | 2,411,773 (2,204,825~2,478,522) |
| g_pswpout | 2,478,581 (2,220,883~2,491,630) | 2,806,594 (2,599,718~2,873,321) |
| psi_memory_full_us | 23,231,894 (22,618,075~23,780,863) | 20,451,017 (19,473,730~21,156,455) |
| psi_memory_some_us | 23,251,638 (22,640,431~23,798,608) | 20,468,610 (19,486,234~21,170,634) |
| cg_workingset_refault_anon | 2,083,779 (1,826,055~2,096,797) | 2,411,773 (2,204,825~2,478,522) |
| zram_peak_orig_b | 1,617,403,904 (1,617,387,520~1,617,408,000) | 1,622,851,584 (1,617,829,888~1,664,524,288) |
| zram_peak_compr_b | 304,100,701 (304,093,638~304,105,030) | 305,124,337 (304,177,006~312,963,101) |
| zram_peak_ratio | 0.19 (0.19~0.19) | 0.19 (0.19~0.19) |
| cg_current_end | 258,048 (258,048~262,144) | 262,144 (258,048~471,040) |
| cg_file | 12,288 (12,288~16,384) | 12,288 (12,288~12,288) |
| cg_pgactivate | 957,416 (793,366~958,568) | 3,614,876 (3,261,857~3,637,157) |
| cg_pgdeactivate | 1,268,190 (1,014,185~1,272,679) | 0 (0~0) |
| cg_pgfault | 6,901,154 (6,045,142~6,917,554) | 9,920,047 (9,119,493~10,144,095) |
| cg_pgmajfault | 2,083,781 (1,826,057~2,096,798) | 2,411,776 (2,204,828~2,478,525) |
| cg_pgrefill | 1,268,192 (1,014,187~1,272,682) | 242,120 (213,164~282,140) |
| cg_shmem | 4,096 (4,096~4,096) | 4,096 (4,096~4,096) |
| cg_slab_reclaimable | 3,968 (3,856~4,448) | 4,448 (4,448~5,040) |
| cg_workingset_refault_file | 1 (0~1) | 4 (4~4) |
| cg_workingset_restore_anon | 289,803 (243,895~303,602) | 84,309 (74,099~88,236) |
| cpu_s | 93.16 (93.11~93.18) | 93.12 (93.02~93.42) |
| fill_majflt | 6 (5~6) | 5 (5~6) |
| fill_minflt | 786,441 (786,439~786,441) | 786,440 (786,439~786,440) |

| 派生指标 | MGLRU OFF | MGLRU ON |
|---|---|---|
| 回收效率 pgsteal/pgscan | 42.3% | 71.0% |

## tc2 — TC-2 hot set + concurrent sequential scan (file workingset)

runs: off=3, on=3

| 指标 | MGLRU OFF 中位数 (min~max) | MGLRU ON 中位数 (min~max) |
|---|---|---|
| cb.ops_per_cpu_s | 3,029,268 (2,590,600~3,040,711) | 3,050,403 (3,034,143~3,054,492) |
| cb.ops_per_s | 3,011,592 (2,571,701~3,023,069) | 3,027,857 (3,013,409~3,036,552) |
| cb.minflt | 135,160 (135,156~135,161) | 4,083 (4,082~4,085) |
| cb.majflt | 48 (48~49) | 48 (48~49) |
| cg_pgscan | 2,561,537 (2,559,001~2,562,238) | 2,378,343 (2,374,247~2,399,847) |
| cg_pgsteal | 2,428,202 (2,427,922~2,428,434) | 2,378,305 (2,374,209~2,399,809) |
| cg_workingset_refault_file | 1,310,722 (1,310,722~1,310,722) | 1,261,058 (1,256,450~1,282,050) |
| g_workingset_refault_file | 1,310,722 (1,310,722~1,310,722) | 1,261,058 (1,256,450~1,282,050) |
| psi_memory_full_us | 101,835 (89,469~207,338) | 52,966 (52,537~55,385) |
| psi_memory_some_us | 102,237 (89,821~208,242) | 53,275 (52,755~55,608) |
| psi_io_full_us | 75,018 (56,266~113,156) | 92,555 (92,552~94,471) |
| cb.acc | 736,748,738,814 (629,132,615,567~739,540,650,600) | 740,709,794,936 (737,182,918,488~742,865,239,608) |
| cb.cpu_s | 29.83 (29.78~29.83) | 29.80 (29.78~29.82) |
| cb.ops | 90,349,568 (77,152,256~90,693,632) | 90,836,992 (90,402,816~91,099,136) |
| cb.rss_kb | 263,264 (263,232~263,288) | 263,212 (263,204~263,232) |
| cb.run_s | 30.00 (30.00~30.00) | 30.00 (30.00~30.00) |
| cg_current_end | 1,062,866,944 (1,061,052,416~1,062,957,056) | 1,061,060,608 (1,060,851,712~1,062,633,472) |
| cg_file | 1,061,572,608 (1,059,479,552~1,061,576,704) | 1,059,287,040 (1,059,287,040~1,061,384,192) |
| cg_pgactivate | 65,541 (65,540~65,549) | 37 (37~37) |
| cg_pgfault | 137,941 (137,217~138,382) | 6,659 (6,653~6,659) |
| cg_pgmajfault | 50 (49~105) | 49 (49~50) |
| cg_pgrefill | 0 (0~0) | 1 (1~1) |
| cg_shmem | 4,096 (4,096~4,096) | 4,096 (4,096~4,096) |
| cg_slab_reclaimable | 892,400 (891,104~892,512) | 1,015,328 (946,064~1,020,064) |
| cg_slab_unreclaimable | 776 (776~776) | 776 (776~4,712) |

| 派生指标 | MGLRU OFF | MGLRU ON |
|---|---|---|
| 回收效率 pgsteal/pgscan | 94.8% | 100.0% |

## tc3 — TC-3 latency probe under memcg pressure (+min_ttl_ms)

runs: off=3, on=3, ttl=3

| 指标 | MGLRU OFF 中位数 (min~max) | MGLRU ON 中位数 (min~max) | ON+min_ttl 中位数 (min~max) |
|---|---|---|---|
| lat.p99_us | 1,740 (1,584~1,874) | 1,872 (1,626~2,108) | 1,683 (1,485~1,810) |
| lat.p999_us | 3,488 (3,273~4,289) | 4,143 (3,561~5,493) | 4,202 (3,256~4,646) |
| lat.max_us | 84,371 (53,937~99,362) | 66,911 (33,637~79,333) | 63,468 (49,194~76,483) |
| lat.overruns | 7 (4~8) | 7 (7~9) | 11 (10~11) |
| hog.ops_per_cpu_s | 137,692 (135,165~143,665) | 138,232 (133,515~149,007) | 144,148 (138,749~153,290) |
| hog.run_majflt | 2,684,843 (2,644,858~2,787,449) | 2,499,514 (2,430,227~2,662,895) | 2,595,238 (2,503,670~2,745,594) |
| psi_memory_full_us | 21,734,721 (21,610,002~22,002,139) | 17,708,571 (17,548,912~17,862,136) | 17,657,145 (17,636,163~17,839,452) |
| psi_memory_some_us | 21,742,754 (21,624,795~22,014,324) | 17,713,628 (17,566,177~17,867,979) | 17,664,176 (17,642,649~17,855,818) |
| cg_current_end | 540,672 (528,384~540,672) | 446,464 (135,168~626,688) | 294,912 (294,912~688,128) |
| cg_file | 28,672 (28,672~32,768) | 28,672 (28,672~28,672) | 28,672 (28,672~28,672) |
| cg_pgactivate | 1,506,019 (1,410,870~1,541,373) | 4,175,008 (3,993,411~4,474,525) | 4,344,653 (4,122,702~4,426,571) |
| cg_pgdeactivate | 1,996,027 (1,883,404~2,134,976) | 0 (0~0) | 0 (0~0) |
| cg_pgfault | 9,099,162 (9,094,619~9,578,851) | 10,507,490 (10,266,804~11,146,534) | 10,810,357 (10,481,996~11,388,033) |
| cg_pgmajfault | 2,684,966 (2,644,986~2,787,573) | 2,510,630 (2,438,513~2,674,255) | 2,602,556 (2,511,135~2,759,346) |
| cg_pgrefill | 1,996,032 (1,883,408~2,134,981) | 401,801 (315,989~436,977) | 404,088 (392,093~410,395) |
| cg_pgscan | 7,542,715 (7,493,922~7,808,508) | 4,102,325 (4,035,234~4,300,777) | 4,284,233 (4,116,508~4,487,142) |
| cg_pgsteal | 3,092,270 (3,052,281~3,194,871) | 2,918,056 (2,845,980~3,081,585) | 3,009,917 (2,918,426~3,166,691) |
| cg_shmem | 8,192 (8,192~8,192) | 8,192 (8,192~8,192) | 8,192 (8,192~8,192) |
| cg_slab_reclaimable | 10,480 (9,408~11,072) | 9,296 (8,112~11,072) | 8,112 (8,112~11,072) |
| cg_slab_unreclaimable | 1,552 (1,552~1,552) | 1,552 (1,552~4,472) | 1,552 (1,552~1,552) |
| cg_workingset_refault_anon | 2,684,962 (2,644,982~2,787,569) | 2,510,625 (2,438,508~2,674,250) | 2,602,552 (2,511,130~2,759,340) |
| cg_workingset_refault_file | 3 (3~3) | 6 (6~6) | 6 (4~9) |
| cg_workingset_restore_anon | 368,548 (338,888~369,246) | 91,915 (86,659~100,362) | 95,197 (91,429~112,121) |

## tc4 — TC-4 real build workload (redis make -j4)

runs: off=3, on=3

| 指标 | MGLRU OFF 中位数 (min~max) | MGLRU ON 中位数 (min~max) |
|---|---|---|
| wall_s | 17.21 (17.09~17.24) | 17.25 (17.21~17.28) |
| cg_pgmajfault | 12,070 (11,320~12,778) | 2,857 (2,273~5,285) |
| cg_pgscan | 121,761 (106,911~134,830) | 105,991 (99,284~107,184) |
| cg_pgsteal | 47,956 (46,167~48,918) | 53,084 (50,645~57,714) |
| cg_workingset_refault_file | 17,864 (17,726~17,978) | 28,802 (23,424~32,387) |
| psi_memory_full_us | 43,288 (39,204~46,152) | 30,524 (26,618~32,380) |
| psi_memory_some_us | 43,712 (40,441~50,694) | 31,507 (27,181~32,775) |
| cg_current_end | 183,795,712 (176,877,568~185,114,624) | 172,335,104 (170,483,712~180,555,776) |
| cg_file | 179,896,320 (172,032,000~179,974,144) | 167,501,824 (165,531,648~175,468,544) |
| cg_pgactivate | 67,207 (66,450~70,762) | 8,921 (6,987~12,866) |
| cg_pgdeactivate | 26,990 (19,393~31,927) | 0 (0~0) |
| cg_pgfault | 1,514,019 (1,501,938~1,516,386) | 1,480,330 (1,479,835~1,481,854) |
| cg_pgrefill | 38,423 (20,138~42,669) | 34,653 (24,812~35,762) |
| cg_shmem | 12,288 (12,288~12,288) | 8,192 (8,192~12,288) |
| cg_slab_reclaimable | 4,401,552 (3,240,224~4,545,640) | 4,440,368 (4,435,536~4,541,080) |
| cg_slab_unreclaimable | 1,608 (1,608~11,496) | 1,608 (1,608~9,312) |
| cg_workingset_refault_anon | 12,476 (11,225~13,156) | 2,673 (2,118~5,187) |
| cg_workingset_restore_anon | 0 (0~0) | 2 (0~3) |
| cg_workingset_restore_file | 11,104 (11,096~11,312) | 1,358 (865~11,557) |
| g_pgactivate | 67,952 (66,983~71,245) | 8,937 (7,008~12,866) |
| g_pgdeactivate | 26,990 (19,393~31,927) | 0 (0~18) |

| 派生指标 | MGLRU OFF | MGLRU ON |
|---|---|---|
| 回收效率 pgsteal/pgscan | 39.4% | 50.1% |

## tc5 — TC-5 global memory pressure (kswapd vs direct)

runs: off=3, on=3

| 指标 | MGLRU OFF 中位数 (min~max) | MGLRU ON 中位数 (min~max) |
|---|---|---|
| ops_per_cpu_s | 201,436 (188,783~239,144) | 204,605 (177,424~215,514) |
| ops_per_s | 206,512 (193,734~248,916) | 209,295 (181,473~220,445) |
| run_majflt | 98,697 (90,694~101,424) | 302,343 (288,370~345,405) |
| g_pgscan_kswapd | 2,088,925 (1,787,322~2,221,268) | 702,344 (675,177~869,196) |
| g_pgscan_direct | 582,974 (541,311~668,160) | 22,487 (17,600~23,802) |
| g_pgsteal_kswapd | 153,725 (150,796~172,145) | 339,621 (326,313~385,878) |
| g_pgsteal_direct | 14,671 (13,969~25,050) | 5,457 (3,981~7,319) |
| g_pswpin | 100,283 (91,739~101,614) | 301,625 (288,174~345,124) |
| g_pswpout | 129,595 (122,312~131,354) | 335,032 (319,300~382,084) |
| psi_memory_full_us | 627,927 (559,914~790,599) | 192,223 (158,085~192,524) |
| psi_memory_some_us | 630,418 (561,923~800,570) | 192,399 (158,213~192,796) |
| kswapd_jiffies | 311 (310~337) | 229 (215~234) |
| cpu_s | 92.36 (92.28~93.69) | 92.07 (92.06~92.07) |
| fill_majflt | 4 (4~4) | 0 (0~0) |
| fill_minflt | 1,177,605 (1,177,604~1,177,605) | 1,177,608 (1,177,607~1,177,609) |
| fill_s | 2.68 (2.53~3.89) | 2.31 (2.31~2.31) |
| g_allocstall_normal | 102 (60~108) | 6 (2~13) |
| g_compact_stall | 6 (3~26) | 14 (7~27) |
| g_pgactivate | 1,338,731 (1,027,644~1,354,632) | 1,920 (896~2,305) |
| g_pgdeactivate | 732,543 (569,330~920,845) | 0 (0~0) |
| g_pgrefill | 748,871 (583,688~937,820) | 3,436 (2,203~3,477) |
| g_pgscan_anon | 2,701,198 (2,333,713~2,715,667) | 711,597 (690,848~883,078) |
| g_pgscan_file | 41,418 (36,583~61,381) | 8,989 (6,816~10,882) |
| g_pgsteal_anon | 136,008 (135,174~140,148) | 339,795 (323,760~386,049) |
| g_pgsteal_file | 35,698 (31,686~51,642) | 6,876 (5,283~7,682) |
| g_thp_collapse_alloc | 0 (0~2) | 13 (2~15) |
| g_thp_fault_alloc | 15 (11~20) | 18 (17~22) |
| g_workingset_nodereclaim | 4 (0~108) | 0 (0~0) |
| g_workingset_refault_anon | 100,306 (91,735~101,608) | 302,475 (288,958~346,184) |

| 派生指标 | MGLRU OFF | MGLRU ON |
|---|---|---|
| kswapd 回收效率 | 7.4% | 48.4% |
| kswapd/direct 扫描占比 | 3.6 | 31.2 |

## tc6 — TC-6 pure random read over 5G dataset (no hot/scan split)

runs: off=3, on=3

| 指标 | MGLRU OFF 中位数 (min~max) | MGLRU ON 中位数 (min~max) |
|---|---|---|
| ops_per_cpu_s | 1,074 (786~1,142) | 1,089 (923~1,180) |
| ops_per_s | 608 (516~650) | 575 (540~619) |
| majflt | 11,654 (9,907~12,570) | 13,082 (13,030~14,204) |
| minflt | 23,562 (21,271~26,217) | 23,282 (23,221~26,117) |
| cg_pgscan | 18,281,612 (15,370,967~19,519,684) | 21,035,824 (20,784,644~22,789,046) |
| cg_pgsteal | 17,916,062 (15,064,947~19,147,628) | 20,568,293 (20,317,309~22,269,485) |
| cg_workingset_refault_file | 16,637,339 (14,010,773~18,093,415) | 19,514,043 (19,263,026~21,030,857) |
| psi_memory_full_us | 4,343,834 (3,759,395~4,492,724) | 3,924,483 (3,866,190~3,958,422) |
| psi_io_full_us | 16,758,770 (13,402,190~16,816,246) | 20,733,892 (18,018,374~20,751,817) |
| cg_current_end | 1,063,395,328 (1,063,251,968~1,063,677,952) | 1,063,313,408 (1,063,309,312~1,063,411,712) |
| cg_file | 1,051,000,832 (1,050,923,008~1,051,074,560) | 1,050,877,952 (1,050,853,376~1,051,017,216) |
| cg_pgactivate | 603 (564~656) | 206 (191~215) |
| cg_pgdeactivate | 1,749,807 (1,521,739~1,993,949) | 0 (0~0) |
| cg_pgfault | 35,270 (31,233~38,840) | 36,384 (36,376~40,394) |
| cg_pgmajfault | 11,655 (9,908~12,571) | 13,094 (13,042~14,216) |
| cg_pgrefill | 1,749,826 (1,521,755~1,993,972) | 1 (1~1) |
| cg_shmem | 4,096 (4,096~4,096) | 4,096 (4,096~4,096) |
| cg_slab_reclaimable | 12,325,456 (12,324,272~12,325,456) | 12,326,640 (12,323,088~12,326,640) |
| cg_slab_unreclaimable | 0 (0~1,848) | 1,608 (0~1,848) |
| cg_workingset_refault_anon | 0 (0~0) | 56 (56~61) |
| cg_workingset_restore_file | 851,198 (698,445~937,309) | 58 (48~69) |
| cpu_s | 35.87 (34.31~41.70) | 34.72 (33.84~39.92) |

## tc7 — TC-7 latency probe under GLOBAL pressure (min_ttl scope)

runs: off=3, on=3, ttl=3

| 指标 | MGLRU OFF 中位数 (min~max) | MGLRU ON 中位数 (min~max) | ON+min_ttl 中位数 (min~max) |
|---|---|---|---|
| lat.p99_us | 1,618 (1,522~2,379) | 2,033 (1,727~2,169) | 2,022 (1,882~2,151) |
| lat.p999_us | 3,728 (3,655~5,404) | 5,087 (3,986~6,765) | 4,602 (4,447~4,789) |
| lat.max_us | 77,482 (30,074~78,546) | 37,585 (20,999~70,379) | 113,954 (101,773~117,019) |
| lat.overruns | 7 (6~8) | 8 (1~16) | 6 (6~7) |
| hog.ops_per_cpu_s | 187,175 (185,600~200,655) | 179,830 (176,470~185,246) | 172,543 (168,502~181,654) |
| hog.run_majflt | 197,335 (192,772~201,719) | 331,082 (330,543~345,644) | 328,118 (302,070~329,784) |
| psi_memory_full_us | 800,766 (770,835~971,882) | 265,587 (220,948~297,568) | 308,821 (245,921~327,908) |
| psi_memory_some_us | 824,447 (779,606~983,485) | 273,681 (222,498~305,519) | 318,045 (247,446~341,164) |
| kswapd_jiffies | 461 (441~466) | 257 (253~281) | 263 (258~270) |
| g_allocstall_normal | 233 (168~361) | 62 (11~62) | 19 (17~29) |
| g_compact_stall | 14 (1~24) | 20 (8~26) | 8 (4~9) |
| g_pgactivate | 1,238,635 (1,217,551~1,283,535) | 1,982 (1,803~2,048) | 1,605 (1,242~1,858) |
| g_pgdeactivate | 895,393 (885,830~953,442) | 0 (0~0) | 0 (0~0) |
| g_pgrefill | 910,722 (904,841~972,508) | 2,450 (2,267~2,866) | 1,858 (1,592~2,179) |
| g_pgscan_anon | 2,779,400 (2,767,808~2,823,370) | 907,082 (870,365~945,100) | 872,599 (848,525~892,435) |
| g_pgscan_direct | 525,060 (483,699~593,204) | 57,982 (36,029~64,093) | 69,682 (62,538~75,439) |
| g_pgscan_file | 43,762 (41,940~43,913) | 8,928 (8,530~12,944) | 7,222 (6,964~9,640) |
| g_pgscan_kswapd | 2,298,102 (2,272,106~2,327,855) | 879,262 (825,327~889,294) | 819,061 (779,348~829,717) |
| g_pgsteal_anon | 250,213 (246,291~250,998) | 389,830 (389,153~402,899) | 392,882 (359,729~397,327) |
| g_pgsteal_direct | 22,406 (16,505~28,914) | 13,508 (8,259~14,083) | 15,306 (14,408~15,955) |
| g_pgsteal_file | 36,835 (34,853~37,426) | 7,272 (6,576~10,834) | 5,571 (5,303~7,001) |
| g_pgsteal_kswapd | 260,720 (256,937~271,090) | 385,904 (383,320~401,082) | 385,162 (348,906~387,324) |
| g_pswpin | 198,921 (193,071~202,489) | 337,034 (336,379~352,405) | 333,159 (306,600~335,555) |
| g_pswpout | 242,424 (233,702~243,202) | 385,674 (385,348~399,800) | 389,289 (354,237~395,111) |
| g_thp_collapse_alloc | 1 (0~2) | 13 (4~19) | 6 (2~7) |
| g_thp_fault_alloc | 26 (12~27) | 22 (18~24) | 16 (15~36) |

charts written to charts/

