<div dir="ltr">Thanks! <br></div><br><div class="gmail_quote"><div dir="ltr">On Thu, Jan 10, 2019 at 12:51 AM Okash Khawaja <<a href="mailto:okash.khawaja@gmail.com">okash.khawaja@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Wed, Jan 9, 2019 at 3:17 PM Carter Cheng <<a href="mailto:cartercheng@gmail.com" target="_blank">cartercheng@gmail.com</a>> wrote:<br>
><br>
> Hi,<br>
><br>
> I am curious where in the kernel sources would I find the kmalloc implementation? I am curious how GFP_ATOMIC option is implemented.<br>
><br>
> Thanks,<br>
><br>
> Carter.<br>
<br>
Hi Carter,<br>
<br>
kmalloc() implementation can be found in include/linux/slab.h.<br>
Interesting part of kmalloc() is the use of kmem_cache. kmem_cache is<br>
basically a pool of memory. kmalloc() maintains a system of<br>
kmem_cache's and allocates memory from those caches to the caller. How<br>
it allocates that memory is determined by type of request (e.g.<br>
GFP_ATOMIC) and "buddy system" algorithm, which is an algorithm<br>
designed to minimise fragmentation and be cache efficient.<br>
<br>
>From what I remember, kmalloc system sets aside memory for "emergency"<br>
uses, like kmalloc calls with GFP_ATOMIC. So for normal memory<br>
allocation calls, execution may sleep until memory becomes available,<br>
even though there may be memory available in the emergence cache.<br>
<br>
Hope it helps :)<br>
<br>
Okash<br>
<br>
> _______________________________________________<br>
> Kernelnewbies mailing list<br>
> <a href="mailto:Kernelnewbies@kernelnewbies.org" target="_blank">Kernelnewbies@kernelnewbies.org</a><br>
> <a href="https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies" rel="noreferrer" target="_blank">https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies</a><br>
</blockquote></div>