[PATCH v4 2/3] powerpc/mm/hugetlb: Add support for reserving gigantic huge pages via kernel command line

Christophe LEROY christophe.leroy at c-s.fr
Wed Aug 2 18:10:14 AEST 2017



Le 02/08/2017 à 09:31, Aneesh Kumar K.V a écrit :
> Christophe LEROY <christophe.leroy at c-s.fr> writes:
> 
>> Hi,
>>
>> Le 28/07/2017 à 07:01, Aneesh Kumar K.V a écrit :
>>> With commit aa888a74977a8 ("hugetlb: support larger than MAX_ORDER") we added
>>> support for allocating gigantic hugepages via kernel command line. Switch
>>> ppc64 arch specific code to use that.
>>>
>>> W.r.t FSL support, we now limit our allocation range using BOOTMEM_ALLOC_ACCESSIBLE.
>>>
>>> We use the kernel command line to do reservation of hugetlb pages on powernv
>>> platforms. On pseries hash mmu mode the supported gigantic huge page size is
>>> 16GB and that can only be allocated with hypervisor assist. For pseries the
>>> command line option doesn't do the allocation. Instead pseries does gigantic
>>> hugepage allocation based on hypervisor hint that is specified via
>>> "ibm,expected#pages" property of the memory node.
>>
>> It looks like it doesn't work on the 8xx:
>>
>> root at vgoip:~# dmesg | grep -i huge
>> [    0.000000] Kernel command line: console=ttyCPM0,115200N8
>> ip=172.25.231.25:172.25.231.1::255.0.0.0:vgoip:eth0:off hugepagesz=8M
>> hugepages=4
>> [    0.416722] HugeTLB registered 8.00 MiB page size, pre-allocated 4 pages
>> [    0.423184] HugeTLB registered 512 KiB page size, pre-allocated 0 pages
>> root at vgoip:~# cat /proc/meminfo
>> MemTotal:         123388 kB
>> MemFree:           77900 kB
>> MemAvailable:      78412 kB
>> Buffers:               0 kB
>> Cached:             3964 kB
>> SwapCached:            0 kB
>> Active:             3788 kB
>> Inactive:           1680 kB
>> Active(anon):       1636 kB
>> Inactive(anon):       20 kB
>> Active(file):       2152 kB
>> Inactive(file):     1660 kB
>> Unevictable:           0 kB
>> Mlocked:               0 kB
>> SwapTotal:             0 kB
>> SwapFree:              0 kB
>> Dirty:                 0 kB
>> Writeback:             0 kB
>> AnonPages:          1552 kB
>> Mapped:             2404 kB
>> Shmem:               152 kB
>> Slab:                  0 kB
>> SReclaimable:          0 kB
>> SUnreclaim:            0 kB
>> KernelStack:         304 kB
>> PageTables:          208 kB
>> NFS_Unstable:          0 kB
>> Bounce:                0 kB
>> WritebackTmp:          0 kB
>> CommitLimit:       45308 kB
>> Committed_AS:      16664 kB
>> VmallocTotal:     866304 kB
>> VmallocUsed:           0 kB
>> VmallocChunk:          0 kB
>> HugePages_Total:       0
>> HugePages_Free:        0
>> HugePages_Rsvd:        0
>> HugePages_Surp:        0
>> Hugepagesize:        512 kB
> 
> But you are printing above the default hugepaeg details. You haven't
> changed that in kernel command line. What does
> /sys/kernel/mm/hugepages/<hugepages-size>/nr_hugepages show ?

It says 4, so indeed it seems to work.

> 
> To change the default hugepage size you may want to use
> default_hugepagesz=8M
> 

Ah ? Documentation/admin-guide/kernel-parameters.txt says it is the same 
as hugepagesz:

	default_hugepagesz=
		[same as hugepagesz=] The size of the default
		HugeTLB page size. This is the size represented by
		the legacy /proc/ hugepages APIs, used for SHM, and
		default size when mounting hugetlbfs filesystems.
		Defaults to the default architecture's huge page size
		if not specified.


You are right, with default_hugepagesz instead of hugepagesz I get the 
following in 16k page sizes mode (ie 8M is < MAX_ORDER)

root at vgoip:~# dmesg | grep -i huge
[    0.000000] Kernel command line: console=ttyCPM0,115200N8 
ip=172.25.231.25:172.25.231.1::255.0.0.0:vgoip:eth0:off 
default_hugepagesz=8M hugepages=4
[    0.410451] HugeTLB registered 512 KiB page size, pre-allocated 0 pages
[    0.417091] HugeTLB registered 8.00 MiB page size, pre-allocated 4 pages
root at vgoip:~# cat /proc/meminfo
MemTotal:         123968 kB
MemFree:           73248 kB
MemAvailable:      75120 kB
Buffers:               0 kB
Cached:             5936 kB
SwapCached:            0 kB
Active:             6912 kB
Inactive:           2496 kB
Active(anon):       3664 kB
Inactive(anon):       80 kB
Active(file):       3248 kB
Inactive(file):     2416 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:          3536 kB
Mapped:             3216 kB
Shmem:               272 kB
Slab:                  0 kB
SReclaimable:          0 kB
SUnreclaim:            0 kB
KernelStack:         304 kB
PageTables:          672 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:       45600 kB
Committed_AS:      18528 kB
VmallocTotal:     866304 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
HugePages_Total:       4
HugePages_Free:        4
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       8192 kB

However, in 4K pages mode, ie (8M > MAX_ORDER), I get

root at vgoip:~# dmesg | grep -i huge
[    0.000000] Kernel command line: console=ttyCPM0,115200N8 
ip=172.25.231.25:172.25.231.1::255.0.0.0:vgoip:eth0:off 
default_hugepagesz=8M hugepages=4
[    0.413274] HugeTLB registered 512 KiB page size, pre-allocated 0 pages
[    0.419844] HugeTLB registered 8.00 MiB page size, pre-allocated 0 pages

root at vgoip:~# cat /proc/meminfo
...
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       8192 kB

Looks like for gigantic pages, we have to specify both 
default_hugepagesz=8M and hugepagesz=8M. When we do it it works back:

[    0.000000] Kernel command line: console=ttyCPM0,115200N8 
ip=172.25.231.25:172.25.231.1::255.0.0.0:vgoip:eth0:off 
default_hugepagesz=8M hugepagesz=8M hugepages=4
[    0.420093] HugeTLB registered 8.00 MiB page size, pre-allocated 4 pages
[    0.426538] HugeTLB registered 512 KiB page size, pre-allocated 0 pages

Christophe


More information about the Linuxppc-dev mailing list