Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitf000565

Browse files
aagittorvalds
authored andcommitted
thp: set recommended min free kbytes
If transparent hugepage is enabled initialize min_free_kbytes to anoptimal value by default. This moves the hugeadm algorithm in kernel.Signed-off-by: Andrea Arcangeli <aarcange@redhat.com>Signed-off-by: Andrew Morton <akpm@linux-foundation.org>Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parentcd7548a commitf000565

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed

‎mm/huge_memory.c‎

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,47 @@ struct khugepaged_scan {
8585
.mm_head=LIST_HEAD_INIT(khugepaged_scan.mm_head),
8686
};
8787

88+
89+
staticintset_recommended_min_free_kbytes(void)
90+
{
91+
structzone*zone;
92+
intnr_zones=0;
93+
unsigned longrecommended_min;
94+
externintmin_free_kbytes;
95+
96+
if (!test_bit(TRANSPARENT_HUGEPAGE_FLAG,
97+
&transparent_hugepage_flags)&&
98+
!test_bit(TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG,
99+
&transparent_hugepage_flags))
100+
return0;
101+
102+
for_each_populated_zone(zone)
103+
nr_zones++;
104+
105+
/* Make sure at least 2 hugepages are free for MIGRATE_RESERVE */
106+
recommended_min=pageblock_nr_pages*nr_zones*2;
107+
108+
/*
109+
* Make sure that on average at least two pageblocks are almost free
110+
* of another type, one for a migratetype to fall back to and a
111+
* second to avoid subsequent fallbacks of other types There are 3
112+
* MIGRATE_TYPES we care about.
113+
*/
114+
recommended_min+=pageblock_nr_pages*nr_zones*
115+
MIGRATE_PCPTYPES*MIGRATE_PCPTYPES;
116+
117+
/* don't ever allow to reserve more than 5% of the lowmem */
118+
recommended_min=min(recommended_min,
119+
(unsigned long)nr_free_buffer_pages() /20);
120+
recommended_min <<= (PAGE_SHIFT-10);
121+
122+
if (recommended_min>min_free_kbytes)
123+
min_free_kbytes=recommended_min;
124+
setup_per_zone_wmarks();
125+
return0;
126+
}
127+
late_initcall(set_recommended_min_free_kbytes);
128+
88129
staticintstart_khugepaged(void)
89130
{
90131
interr=0;
@@ -108,6 +149,8 @@ static int start_khugepaged(void)
108149
mutex_unlock(&khugepaged_mutex);
109150
if (wakeup)
110151
wake_up_interruptible(&khugepaged_wait);
152+
153+
set_recommended_min_free_kbytes();
111154
}else
112155
/* wakeup to exit */
113156
wake_up_interruptible(&khugepaged_wait);
@@ -177,6 +220,13 @@ static ssize_t enabled_store(struct kobject *kobj,
177220
ret=err;
178221
}
179222

223+
if (ret>0&&
224+
(test_bit(TRANSPARENT_HUGEPAGE_FLAG,
225+
&transparent_hugepage_flags)||
226+
test_bit(TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG,
227+
&transparent_hugepage_flags)))
228+
set_recommended_min_free_kbytes();
229+
180230
returnret;
181231
}
182232
staticstructkobj_attributeenabled_attr=
@@ -464,6 +514,8 @@ static int __init hugepage_init(void)
464514

465515
start_khugepaged();
466516

517+
set_recommended_min_free_kbytes();
518+
467519
out:
468520
returnerr;
469521
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp