[no subject]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



>
> > With Barry's mthp test program V2:
> >
> > Without:
> > $ ./thp_swap_allocator_test -a
> > Iteration 1: swpout inc: 32, swpout fallback inc: 192, Fallback percentage: 85.71%
> > Iteration 2: swpout inc: 0, swpout fallback inc: 231, Fallback percentage: 100.00%
> > Iteration 3: swpout inc: 0, swpout fallback inc: 227, Fallback percentage: 100.00%
> > ...
> > Iteration 98: swpout inc: 0, swpout fallback inc: 224, Fallback percentage: 100.00%
> > Iteration 99: swpout inc: 0, swpout fallback inc: 215, Fallback percentage: 100.00%
> > Iteration 100: swpout inc: 0, swpout fallback inc: 222, Fallback percentage: 100.00%
> >
> > $ ./thp_swap_allocator_test -a -s
> > Iteration 1: swpout inc: 0, swpout fallback inc: 224, Fallback percentage: 100.00%
> > Iteration 2: swpout inc: 0, swpout fallback inc: 218, Fallback percentage: 100.00%
> > Iteration 3: swpout inc: 0, swpout fallback inc: 222, Fallback percentage: 100.00%
> > ..
> > Iteration 98: swpout inc: 0, swpout fallback inc: 228, Fallback percentage: 100.00%
> > Iteration 99: swpout inc: 0, swpout fallback inc: 230, Fallback percentage: 100.00%
> > Iteration 100: swpout inc: 0, swpout fallback inc: 229, Fallback percentage: 100.00%
> >
> > $ ./thp_swap_allocator_test -s
> > Iteration 1: swpout inc: 0, swpout fallback inc: 224, Fallback percentage: 100.00%
> > Iteration 2: swpout inc: 0, swpout fallback inc: 218, Fallback percentage: 100.00%
> > Iteration 3: swpout inc: 0, swpout fallback inc: 222, Fallback percentage: 100.00%
> > ..
> > Iteration 98: swpout inc: 0, swpout fallback inc: 228, Fallback percentage: 100.00%
> > Iteration 99: swpout inc: 0, swpout fallback inc: 230, Fallback percentage: 100.00%
> > Iteration 100: swpout inc: 0, swpout fallback inc: 229, Fallback percentage: 100.00%
> >
> > $ ./thp_swap_allocator_test
> > Iteration 1: swpout inc: 0, swpout fallback inc: 224, Fallback percentage: 100.00%
> > Iteration 2: swpout inc: 0, swpout fallback inc: 218, Fallback percentage: 100.00%
> > Iteration 3: swpout inc: 0, swpout fallback inc: 222, Fallback percentage: 100.00%
> > ..
> > Iteration 98: swpout inc: 0, swpout fallback inc: 228, Fallback percentage: 100.00%
> > Iteration 99: swpout inc: 0, swpout fallback inc: 230, Fallback percentage: 100.00%
> > Iteration 100: swpout inc: 0, swpout fallback inc: 229, Fallback percentage: 100.00%
> >
> > With: # with all 0.00% filter out
> > $ ./thp_swap_allocator_test -a | grep -v "0.00%"
> > $ # all result are 0.00%
> >
> > $ ./thp_swap_allocator_test -a -s | grep -v "0.00%"
> > ./thp_swap_allocator_test -a -s | grep -v "0.00%"
> > Iteration 14: swpout inc: 223, swpout fallback inc: 3, Fallback percentage: 1.33%
> > Iteration 19: swpout inc: 219, swpout fallback inc: 7, Fallback percentage: 3.10%
> > Iteration 28: swpout inc: 225, swpout fallback inc: 1, Fallback percentage: 0.44%
> > Iteration 29: swpout inc: 227, swpout fallback inc: 1, Fallback percentage: 0.44%
> > Iteration 34: swpout inc: 220, swpout fallback inc: 8, Fallback percentage: 3.51%
> > Iteration 35: swpout inc: 222, swpout fallback inc: 11, Fallback percentage: 4.72%
> > Iteration 38: swpout inc: 217, swpout fallback inc: 4, Fallback percentage: 1.81%
> > Iteration 40: swpout inc: 222, swpout fallback inc: 6, Fallback percentage: 2.63%
> > Iteration 42: swpout inc: 221, swpout fallback inc: 2, Fallback percentage: 0.90%
> > Iteration 43: swpout inc: 215, swpout fallback inc: 7, Fallback percentage: 3.15%
> > Iteration 47: swpout inc: 226, swpout fallback inc: 2, Fallback percentage: 0.88%
> > Iteration 49: swpout inc: 217, swpout fallback inc: 1, Fallback percentage: 0.46%
> > Iteration 52: swpout inc: 221, swpout fallback inc: 8, Fallback percentage: 3.49%
> > Iteration 56: swpout inc: 224, swpout fallback inc: 4, Fallback percentage: 1.75%
> > Iteration 58: swpout inc: 214, swpout fallback inc: 5, Fallback percentage: 2.28%
> > Iteration 62: swpout inc: 220, swpout fallback inc: 3, Fallback percentage: 1.35%
> > Iteration 64: swpout inc: 224, swpout fallback inc: 1, Fallback percentage: 0.44%
> > Iteration 67: swpout inc: 221, swpout fallback inc: 1, Fallback percentage: 0.45%
> > Iteration 75: swpout inc: 220, swpout fallback inc: 9, Fallback percentage: 3.93%
> > Iteration 82: swpout inc: 227, swpout fallback inc: 1, Fallback percentage: 0.44%
> > Iteration 86: swpout inc: 211, swpout fallback inc: 12, Fallback percentage: 5.38%
> > Iteration 89: swpout inc: 226, swpout fallback inc: 2, Fallback percentage: 0.88%
> > Iteration 93: swpout inc: 220, swpout fallback inc: 1, Fallback percentage: 0.45%
> > Iteration 94: swpout inc: 224, swpout fallback inc: 1, Fallback percentage: 0.44%
> > Iteration 96: swpout inc: 221, swpout fallback inc: 6, Fallback percentage: 2.64%
> > Iteration 98: swpout inc: 227, swpout fallback inc: 1, Fallback percentage: 0.44%
> > Iteration 99: swpout inc: 227, swpout fallback inc: 3, Fallback percentage: 1.30%
> >
> > $ ./thp_swap_allocator_test
> > ./thp_swap_allocator_test
> > Iteration 1: swpout inc: 233, swpout fallback inc: 0, Fallback percentage: 0.00%
> > Iteration 2: swpout inc: 131, swpout fallback inc: 101, Fallback percentage: 43.53%
> > Iteration 3: swpout inc: 71, swpout fallback inc: 155, Fallback percentage: 68.58%
> > Iteration 4: swpout inc: 55, swpout fallback inc: 168, Fallback percentage: 75.34%
> > Iteration 5: swpout inc: 35, swpout fallback inc: 191, Fallback percentage: 84.51%
> > Iteration 6: swpout inc: 25, swpout fallback inc: 199, Fallback percentage: 88.84%
> > Iteration 7: swpout inc: 23, swpout fallback inc: 205, Fallback percentage: 89.91%
> > Iteration 8: swpout inc: 9, swpout fallback inc: 219, Fallback percentage: 96.05%
> > Iteration 9: swpout inc: 13, swpout fallback inc: 213, Fallback percentage: 94.25%
> > Iteration 10: swpout inc: 12, swpout fallback inc: 216, Fallback percentage: 94.74%
> > Iteration 11: swpout inc: 16, swpout fallback inc: 213, Fallback percentage: 93.01%
> > Iteration 12: swpout inc: 10, swpout fallback inc: 210, Fallback percentage: 95.45%
> > Iteration 13: swpout inc: 16, swpout fallback inc: 212, Fallback percentage: 92.98%
> > Iteration 14: swpout inc: 12, swpout fallback inc: 212, Fallback percentage: 94.64%
> > Iteration 15: swpout inc: 15, swpout fallback inc: 211, Fallback percentage: 93.36%
> > Iteration 16: swpout inc: 15, swpout fallback inc: 200, Fallback percentage: 93.02%
> > Iteration 17: swpout inc: 9, swpout fallback inc: 220, Fallback percentage: 96.07%
> >
> > $ ./thp_swap_allocator_test -s
> >  ./thp_swap_allocator_test -s
> > Iteration 1: swpout inc: 233, swpout fallback inc: 0, Fallback percentage: 0.00%
> > Iteration 2: swpout inc: 97, swpout fallback inc: 135, Fallback percentage: 58.19%
> > Iteration 3: swpout inc: 42, swpout fallback inc: 192, Fallback percentage: 82.05%
> > Iteration 4: swpout inc: 19, swpout fallback inc: 214, Fallback percentage: 91.85%
> > Iteration 5: swpout inc: 12, swpout fallback inc: 213, Fallback percentage: 94.67%
> > Iteration 6: swpout inc: 11, swpout fallback inc: 217, Fallback percentage: 95.18%
> > Iteration 7: swpout inc: 9, swpout fallback inc: 214, Fallback percentage: 95.96%
> > Iteration 8: swpout inc: 8, swpout fallback inc: 213, Fallback percentage: 96.38%
> > Iteration 9: swpout inc: 2, swpout fallback inc: 223, Fallback percentage: 99.11%
> > Iteration 10: swpout inc: 2, swpout fallback inc: 228, Fallback percentage: 99.13%
> > Iteration 11: swpout inc: 4, swpout fallback inc: 214, Fallback percentage: 98.17%
> > Iteration 12: swpout inc: 5, swpout fallback inc: 226, Fallback percentage: 97.84%
> > Iteration 13: swpout inc: 3, swpout fallback inc: 212, Fallback percentage: 98.60%
> > Iteration 14: swpout inc: 0, swpout fallback inc: 222, Fallback percentage: 100.00%
> > Iteration 15: swpout inc: 3, swpout fallback inc: 222, Fallback percentage: 98.67%
> > Iteration 16: swpout inc: 4, swpout fallback inc: 223, Fallback percentage: 98.24%
> >
> > =========
> > Kernel compile under tmpfs with cgroup memory.max = 470M.
> > 12 core 24 hyperthreading, 32 jobs. 10 Run each group
> >
> > SSD swap 10 runs average, 20G swap partition:
> > With:
> > user    2929.064
> > system  1479.381 : 1376.89 1398.22 1444.64 1477.39 1479.04 1497.27
> > 1504.47 1531.4 1532.92 1551.57
> > real    1441.324
> >
> > Without:
> > user    2910.872
> > system  1482.732 : 1440.01 1451.4 1462.01 1467.47 1467.51 1469.3
> > 1470.19 1496.32 1544.1 1559.01
> > real    1580.822
> >
> > Two zram swap: zram0 3.0G zram1 20G.
> >
> > The idea is forcing the zram0 almost full then overflow to zram1:
> >
> > With:
> > user    4320.301
> > system  4272.403 : 4236.24 4262.81 4264.75 4269.13 4269.44 4273.06
> > 4279.85 4285.98 4289.64 4293.13
> > real    431.759
> >
> > Without
> > user    4301.393
> > system  4387.672 : 4374.47 4378.3 4380.95 4382.84 4383.06 4388.05

system time 4272 vs 4387. That is about a 2% difference.

Chris

> > 4389.76 4397.16 4398.23 4403.9
> > real    433.979
> >
> > ------ more test result from Kaiui ----------
> >
> > Test with build linux kernel using a 4G ZRAM, 1G memory.max limit on top of shmem:
> >
> > System info: 32 Core AMD Zen2, 64G total memory.
> >
> > Test 3 times using only 4K pages:
> > =================================
> >
> > With:
> > -----
> > 1838.74user 2411.21system 2:37.86elapsed 2692%CPU (0avgtext+0avgdata 847060maxresident)k
> > 1839.86user 2465.77system 2:39.35elapsed 2701%CPU (0avgtext+0avgdata 847060maxresident)k
> > 1840.26user 2454.68system 2:39.43elapsed 2693%CPU (0avgtext+0avgdata 847060maxresident)k
> >
> > Summary (~4.6% improment of system time):
> > User: 1839.62
> > System: 2443.89: 2465.77 2454.68 2411.21
> > Real: 158.88
> >
> > Without:
> > --------
> > 1837.99user 2575.95system 2:43.09elapsed 2706%CPU (0avgtext+0avgdata 846520maxresident)k
> > 1838.32user 2555.15system 2:42.52elapsed 2709%CPU (0avgtext+0avgdata 846520maxresident)k
> > 1843.02user 2561.55system 2:43.35elapsed 2702%CPU (0avgtext+0avgdata 846520maxresident)k
> >
> > Summary:
> > User: 1839.78
> > System: 2564.22: 2575.95 2555.15 2561.55
> > Real: 162.99
> >
> > Test 5 times using enabled all mTHP pages:
> > ==========================================
> >
> > With:
> > -----
> > 1796.44user 2937.33system 2:59.09elapsed 2643%CPU (0avgtext+0avgdata 846936maxresident)k
> > 1802.55user 3002.32system 2:54.68elapsed 2750%CPU (0avgtext+0avgdata 847072maxresident)k
> > 1806.59user 2986.53system 2:55.17elapsed 2736%CPU (0avgtext+0avgdata 847092maxresident)k
> > 1803.27user 2982.40system 2:54.49elapsed 2742%CPU (0avgtext+0avgdata 846796maxresident)k
> > 1807.43user 3036.08system 2:56.06elapsed 2751%CPU (0avgtext+0avgdata 846488maxresident)k
> >
> > Summary (~8.4% improvement of system time):
> > User: 1803.25
> > System: 2988.93: 2937.33 3002.32 2986.53 2982.40 3036.08
> > Real: 175.90
> >
> > mTHP swapout status:
> > /sys/kernel/mm/transparent_hugepage/hugepages-32kB/stats/swpout:347721
> > /sys/kernel/mm/transparent_hugepage/hugepages-32kB/stats/swpout_fallback:3110
> > /sys/kernel/mm/transparent_hugepage/hugepages-512kB/stats/swpout:3365
> > /sys/kernel/mm/transparent_hugepage/hugepages-512kB/stats/swpout_fallback:8269
> > /sys/kernel/mm/transparent_hugepage/hugepages-2048kB/stats/swpout:24
> > /sys/kernel/mm/transparent_hugepage/hugepages-2048kB/stats/swpout_fallback:3341
> > /sys/kernel/mm/transparent_hugepage/hugepages-1024kB/stats/swpout:145
> > /sys/kernel/mm/transparent_hugepage/hugepages-1024kB/stats/swpout_fallback:5038
> > /sys/kernel/mm/transparent_hugepage/hugepages-64kB/stats/swpout:322737
> > /sys/kernel/mm/transparent_hugepage/hugepages-64kB/stats/swpout_fallback:36808
> > /sys/kernel/mm/transparent_hugepage/hugepages-16kB/stats/swpout:380455
> > /sys/kernel/mm/transparent_hugepage/hugepages-16kB/stats/swpout_fallback:1010
> > /sys/kernel/mm/transparent_hugepage/hugepages-256kB/stats/swpout:24973
> > /sys/kernel/mm/transparent_hugepage/hugepages-256kB/stats/swpout_fallback:13223
> > /sys/kernel/mm/transparent_hugepage/hugepages-128kB/stats/swpout:197348
> > /sys/kernel/mm/transparent_hugepage/hugepages-128kB/stats/swpout_fallback:80541
> >
> > Without:
> > --------
> > 1794.41user 3151.29system 3:05.97elapsed 2659%CPU (0avgtext+0avgdata 846704maxresident)k
> > 1810.27user 3304.48system 3:05.38elapsed 2759%CPU (0avgtext+0avgdata 846636maxresident)k
> > 1809.84user 3254.85system 3:03.83elapsed 2755%CPU (0avgtext+0avgdata 846952maxresident)k
> > 1813.54user 3259.56system 3:04.28elapsed 2752%CPU (0avgtext+0avgdata 846848maxresident)k
> > 1829.97user 3338.40system 3:07.32elapsed 2759%CPU (0avgtext+0avgdata 847024maxresident)k
> >
> > Summary:
> > User: 1811.61
> > System: 3261.72 : 3151.29 3304.48 3254.85 3259.56 3338.40
> > Real: 185.356
> >
> > mTHP swapout status:
> > hugepages-32kB/stats/swpout:35630
> > hugepages-32kB/stats/swpout_fallback:1809908
> > hugepages-512kB/stats/swpout:523
> > hugepages-512kB/stats/swpout_fallback:55235
> > hugepages-2048kB/stats/swpout:53
> > hugepages-2048kB/stats/swpout_fallback:17264
> > hugepages-1024kB/stats/swpout:85
> > hugepages-1024kB/stats/swpout_fallback:24979
> > hugepages-64kB/stats/swpout:30117
> > hugepages-64kB/stats/swpout_fallback:1825399
> > hugepages-16kB/stats/swpout:42775
> > hugepages-16kB/stats/swpout_fallback:1951123
> > hugepages-256kB/stats/swpout:2326
> > hugepages-256kB/stats/swpout_fallback:170165
> > hugepages-128kB/stats/swpout:17925
> > hugepages-128kB/stats/swpout_fallback:1309757
> >
> > Reported-by: Barry Song <21cnbao@xxxxxxxxx>
> > Signed-off-by: Chris Li <chrisl@xxxxxxxxxx>
> > ---
> > Changes in v5:
> > - Suggestion and fix up from v4 discussion thread from Yinm and Ryan.
> > - Adding Kairui's swap cache reclaim patches on top of patch 3.
> > - Link to v4: https://lore.kernel.org/r/20240711-swap-allocator-v4-0-0295a4d4c7aa@xxxxxxxxxx
> >
> > Changes in v4:
> > - Remove a warning in patch 2.
> > - Allocating from the free cluster list before the nonfull list. Revert the v3 behavior.
> > - Add cluster_index and cluster_offset function.
> > - Patch 3 has a new allocating path for SSD.
> > - HDD swap allocation does not need to consider clusters any more.
> >
> > Changes in v3:
> > - Using V1 as base.
> > - Rename "next" to "list" for the list field, suggested by Ying.
> > - Update comment for the locking rules for cluster fields and list,
> >   suggested by Ying.
> > - Allocate from the nonfull list before attempting free list, suggested
> >   by Kairui.
> > - Link to v2: https://lore.kernel.org/r/20240614-swap-allocator-v2-0-2a513b4a7f2f@xxxxxxxxxx
> >
> > Changes in v2:
> > - Abandoned.
> > - Link to v1: https://lore.kernel.org/r/20240524-swap-allocator-v1-0-47861b423b26@xxxxxxxxxx
> >
> > ---
> > Chris Li (3):
> >       mm: swap: swap cluster switch to double link list
> >       mm: swap: mTHP allocate swap entries from nonfull list
> >       mm: swap: separate SSD allocation from scan_swap_map_slots()
> >
> > Kairui Song (6):
> >       mm: swap: clean up initialization helper
> >       mm: swap: skip slot cache on freeing for mTHP
> >       mm: swap: allow cache reclaim to skip slot cache
> >       mm: swap: add a fragment cluster list
> >       mm: swap: relaim the cached parts that got scanned
> >       mm: swap: add a adaptive full cluster cache reclaim
> >
> >  include/linux/swap.h |  34 ++-
> >  mm/swapfile.c        | 840 ++++++++++++++++++++++++++++++---------------------
> >  2 files changed, 514 insertions(+), 360 deletions(-)
> > ---
> > base-commit: ff3a648ecb9409aff1448cf4f6aa41d78c69a3bc
> > change-id: 20240523-swap-allocator-1534c480ece4
> >
>
> --
> Best Regards,
> Huang, Ying





[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux