diff options
author | A. Wilcox <AWilcox@Wilcox-Tech.com> | 2024-02-16 00:24:20 -0600 |
---|---|---|
committer | A. Wilcox <AWilcox@Wilcox-Tech.com> | 2024-11-29 05:22:46 -0600 |
commit | 89e582ada3e1a390a696ce4a6361ab4f3cc05f00 (patch) | |
tree | 0ba3f1e1a8145ac6f9fac577ace1426523d30d69 /system/easy-kernel/0400-reduce-pageblock-size-nonhugetlb.patch | |
parent | a9cdd056f977a136b2a5e6ce523ff393aa5e35d6 (diff) | |
download | packages-89e582ada3e1a390a696ce4a6361ab4f3cc05f00.tar.gz packages-89e582ada3e1a390a696ce4a6361ab4f3cc05f00.tar.bz2 packages-89e582ada3e1a390a696ce4a6361ab4f3cc05f00.tar.xz packages-89e582ada3e1a390a696ce4a6361ab4f3cc05f00.zip |
system/easy-kernel: Update to 6.6.6-mc1
Diffstat (limited to 'system/easy-kernel/0400-reduce-pageblock-size-nonhugetlb.patch')
-rw-r--r-- | system/easy-kernel/0400-reduce-pageblock-size-nonhugetlb.patch | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/system/easy-kernel/0400-reduce-pageblock-size-nonhugetlb.patch b/system/easy-kernel/0400-reduce-pageblock-size-nonhugetlb.patch new file mode 100644 index 000000000..b32f4ba76 --- /dev/null +++ b/system/easy-kernel/0400-reduce-pageblock-size-nonhugetlb.patch @@ -0,0 +1,44 @@ +From: Sultan Alsawaf <sultan@kerneltoast.com> +Date: Wed, 20 Oct 2021 20:50:11 -0700 +Subject: [PATCH 02/16] ZEN: mm: Lower the non-hugetlbpage pageblock size to + reduce scheduling delays + +The page allocator processes free pages in groups of pageblocks, where +the size of a pageblock is typically quite large (1024 pages without +hugetlbpage support). Pageblocks are processed atomically with the zone +lock held, which can cause severe scheduling delays on both the CPU +going through the pageblock and any other CPUs waiting to acquire the +zone lock. A frequent offender is move_freepages_block(), which is used +by rmqueue() for page allocation. + +As it turns out, there's no requirement for pageblocks to be so large, +so the pageblock order can simply be reduced to ease the scheduling +delays and zone lock contention. PAGE_ALLOC_COSTLY_ORDER is used as a +reasonable setting to ensure non-costly page allocation requests can +still be serviced without always needing to free up more than one +pageblock's worth of pages at a time. + +This has a noticeable effect on overall system latency when memory +pressure is elevated. The various mm functions which operate on +pageblocks no longer appear in the preemptoff tracer, where previously +they would spend up to 100 ms on a mobile arm64 CPU processing a +pageblock with preemption disabled and the zone lock held. + +Signed-off-by: Sultan Alsawaf <sultan@kerneltoast.com> +--- + include/linux/pageblock-flags.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/include/linux/pageblock-flags.h b/include/linux/pageblock-flags.h +index e83c4c095..21b8dfa5d 100644 +--- a/include/linux/pageblock-flags.h ++++ b/include/linux/pageblock-flags.h +@@ -48,7 +48,7 @@ extern unsigned int pageblock_order; + #else /* CONFIG_HUGETLB_PAGE */ + + /* If huge pages are not used, group by MAX_ORDER_NR_PAGES */ +-#define pageblock_order MAX_ORDER ++#define pageblock_order PAGE_ALLOC_COSTLY_ORDER + + #endif /* CONFIG_HUGETLB_PAGE */ + |