@@ -78,9 +78,12 @@ struct text_region {
78
78
79
79
static const size_t hps = 2L * 1024 * 1024 ;
80
80
81
+ static void PrintWarning (const char * warn) {
82
+ fprintf (stderr, " Hugepages WARNING: %s\n " , warn);
83
+ }
84
+
81
85
static void PrintSystemError (int error) {
82
- fprintf (stderr, " Hugepages WARNING: %s\n " , strerror (error));
83
- return ;
86
+ PrintWarning (strerror (error));
84
87
}
85
88
86
89
inline uintptr_t hugepage_align_up (uintptr_t addr) {
@@ -94,7 +97,7 @@ inline uintptr_t hugepage_align_down(uintptr_t addr) {
94
97
// The format of the maps file is the following
95
98
// address perms offset dev inode pathname
96
99
// 00400000-00452000 r-xp 00000000 08:02 173521 /usr/bin/dbus-daemon
97
- // This is also handling the case where the first line is not the binary
100
+ // This is also handling the case where the first line is not the binary.
98
101
99
102
static struct text_region FindNodeTextRegion () {
100
103
#if defined(__linux__)
@@ -110,7 +113,7 @@ static struct text_region FindNodeTextRegion() {
110
113
111
114
ifs.open (" /proc/self/maps" );
112
115
if (!ifs) {
113
- fprintf (stderr, " Could not open /proc/self/maps\n " );
116
+ PrintWarning ( " could not open /proc/self/maps" );
114
117
return nregion;
115
118
}
116
119
@@ -178,7 +181,7 @@ static struct text_region FindNodeTextRegion() {
178
181
return nregion;
179
182
}
180
183
181
- // for struct kinfo_vmentry
184
+ // Enough for struct kinfo_vmentry.
182
185
numpg = numpg * 4 / 3 ;
183
186
auto alg = std::vector<char >(numpg);
184
187
@@ -262,39 +265,29 @@ static bool IsTransparentHugePagesEnabled() {
262
265
263
266
ifs.open (" /sys/kernel/mm/transparent_hugepage/enabled" );
264
267
if (!ifs) {
265
- fprintf (stderr, " Could not open file: " \
266
- " /sys/kernel/mm/transparent_hugepage/enabled\n " );
268
+ PrintWarning (" could not open /sys/kernel/mm/transparent_hugepage/enabled" );
267
269
return false ;
268
270
}
269
271
270
- std::string always, madvise, never ;
272
+ std::string always, madvise;
271
273
if (ifs.is_open ()) {
272
- while (ifs >> always >> madvise >> never ) {}
274
+ while (ifs >> always >> madvise) {}
273
275
}
274
-
275
- int ret_status = false ;
276
-
277
- if (always.compare (" [always]" ) == 0 )
278
- ret_status = true ;
279
- else if (madvise.compare (" [madvise]" ) == 0 )
280
- ret_status = true ;
281
- else if (never.compare (" [never]" ) == 0 )
282
- ret_status = false ;
283
-
284
276
ifs.close ();
285
- return ret_status;
277
+
278
+ return always == " [always]" || madvise == " [madvise]" ;
286
279
}
287
280
#elif defined(__FreeBSD__)
288
281
static bool IsSuperPagesEnabled () {
289
- // It is enabled by default on amd64
282
+ // It is enabled by default on amd64.
290
283
unsigned int super_pages = 0 ;
291
284
size_t super_pages_length = sizeof (super_pages);
292
- if ( sysctlbyname (" vm.pmap.pg_ps_enabled" , &super_pages ,
293
- &super_pages_length, nullptr , 0 ) == - 1 ||
294
- super_pages < 1 ) {
295
- return false ;
296
- }
297
- return true ;
285
+ return sysctlbyname (" vm.pmap.pg_ps_enabled" ,
286
+ &super_pages,
287
+ &super_pages_length,
288
+ nullptr ,
289
+ 0 ) != - 1 &&
290
+ super_pages >= 1 ;
298
291
}
299
292
#endif
300
293
@@ -326,7 +319,7 @@ MoveTextRegionToLargePages(const text_region& r) {
326
319
size_t size = r.to - r.from ;
327
320
void * start = r.from ;
328
321
329
- // Allocate temporary region preparing for copy
322
+ // Allocate temporary region preparing for copy.
330
323
nmem = mmap (nullptr , size,
331
324
PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1 , 0 );
332
325
if (nmem == MAP_FAILED) {
@@ -413,11 +406,11 @@ MoveTextRegionToLargePages(const text_region& r) {
413
406
return ret;
414
407
}
415
408
416
- // This is the primary API called from main
409
+ // This is the primary API called from main.
417
410
int MapStaticCodeToLargePages () {
418
411
struct text_region r = FindNodeTextRegion ();
419
412
if (r.found_text_region == false ) {
420
- fprintf (stderr, " Hugepages WARNING: failed to find text region\n " );
413
+ PrintWarning ( " failed to find text region" );
421
414
return -1 ;
422
415
}
423
416
0 commit comments