On Mon 23-10-17 18:46:59, C.Wehrmeyer wrote:
On 23-10-17 18:13, Michal Hocko wrote:
On Mon 23-10-17 16:00:13, C.Wehrmeyer wrote:
And just to be very sure I've added:
if (madvise(buf1,ALLOC_SIZE_1,MADV_HUGEPAGE)) {
errno_tmp = errno;
fprintf(stderr,"madvise: %u\n",errno_tmp);
goto out;
}
/*Make sure the mapping is actually used*/
memset(buf1,'!',ALLOC_SIZE_1);
Is the buffer aligned to 2MB?
When I omit MAP_HUGETLB for the flags that mmap receives - no.
#define ALLOC_SIZE_1 (2 * 1024 * 1024)
[...]
buf1 = mmap (
NULL,
ALLOC_SIZE_1,
prot, /*PROT_READ | PROT_WRITE*/
flags /*MAP_PRIVATE | MAP_ANONYMOUS*/,
-1,
0
);
In such a case buf1 usually contains addresses which are aligned to 4 KiBs,
such as 0x7f07d76e9000. 2-MiB-aligned addresses, such as 0x7f89f5e00000, are
only produced with MAP_HUGETLB - which, if I understood the documentation
correctly, is not the point of THPs as they are supposed to be transparent.
yes. You can use posix_memalign
or you can mmap a larger block and
munmap the initial unaligned part.