Re: How to understand lowmem_reserve in a zone?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On Sat, Aug 18, 2012 at 9:06 PM, Parmenides <mobile.parmenides@xxxxxxxxx> wrote:
Hi,

    I have a question about the reseved page frames in a zone. The
physical memory is splitted into some node, which is  further divied
into some zone. For each zone, the kernel try to reserve some page
frames to statisfy requests on low memory condition. There is a
lowmem_reserve[] in a zone descriptor, its defined like:

     struct zone {
                    ....
                    unsigned long lowmem_reserve[MAX_NR_ZONES];
                    ...
     };

It is obvious that lowmem_reserve[] contains MAX_NR_ZONES elements.

for mem, MAX_NR_ZONES is 4, which therefore mean 4 zone exists, and for each zone there is a lowmem_reserve value, make sense?

The function:    setup_per_zone_lowmem_reserve(void) will setup the value, which is user-definable via a sysctl called "lowmem_reserve_ratio".

cat /proc/sys/vm/lowmem_reserve_ratio 
256 256 32

and read the source code for explanation:

mm/page_alloc.c:

/*
 * results with 256, 32 in the lowmem_reserve sysctl:
 *      1G machine -> (16M dma, 800M-16M normal, 1G-800M high)
 *      1G machine -> (16M dma, 784M normal, 224M high)
 *      NORMAL allocation will leave 784M/256 of ram reserved in the ZONE_DMA
 *      HIGHMEM allocation will leave 224M/32 of ram reserved in ZONE_NORMAL
 *      HIGHMEM allocation will (224M+784M)/256 of ram reserved in ZONE_DMA
 *
 * TBD: should special case ZONE_DMA32 machines here - in those we normally
 * don't need any ZONE_NORMAL reservation
 */
int sysctl_lowmem_reserve_ratio[MAX_NR_ZONES-1] = {

 
But, I think just a interger is enough to record the number of  a
zone's reserved page frames. Why do we have to use a
array?

for each zone, and the zone name is defined in mm/page_alloc.c as well.
 
Furthermore, lowmem_reserve[] merely stand for the amount. How
does the kernel mark a page frame to be reserved?

API is SetPageReserved(page), and queried with PageReserved(page) etc.
 
This API will use just one bit to store the reservation information for one page.   

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies



--
Regards,
Peter Teoh
_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux