Redhat 7.1内核进程堆栈大小从8K到16KB

时间:2015-05-05 22:06:16

标签: c linux linux-kernel redhat

阅读Redhat 7.1的发行说明,我读到了这个:

Process Stack Size Increased from 8KB to 16KB
Since Red Hat Enterprise Linux 7.1, the kernel process stack size has been increased from 8KB to 16KB to help large processes that use stack space.

我知道内核进程堆栈是常驻内存,并且在创建进程并且内存需要连续时进行分配。在页面大小为4096字节的x86_64中,内核需要查找4页打算使用2页进程。

当内核内存碎片化时,此功能可能会出现问题? 使用一个进程内核堆栈大小,当内存被分段时,更容易产生进程创建问题吗?

2 个答案:

答案 0 :(得分:1)

内核通常需要分配一组物理上连续的一个或多个页面。在分配缓冲区(驱动程序需要数据传输,如DMA)或创建进程堆栈时,这可能是必要的。

通常,为了满足这些要求,内核尝试通过分配物理连续的页面来避免碎片,并且另外释放的页面被合并/分组成更大的物理连续页面组(如果可用)。这由内存管理子系统和伙伴分配器处理。现在,当程序开始执行时,会创建堆栈(RHEL7中的8k16k)。

如果内核无法获取或分配所请求的一组物理上连续的页面(2个用于8k堆栈,或者4个用于16k堆栈,假设4k页面大小),那么这可能会导致page allocation failures, order:2。 (即2 ^ 2 = 4页* 4K)。订单取决于您请求的物理连续页面的大小。我们可以在页面分配失败的时候观察/proc/buddyinfo文件,它可能会显示物理内存碎片的迹象。

答案 1 :(得分:0)

当内存碎片化时,发现堆栈空间可能是个问题。