【问题标题】:Redhat 7.1 kernel process stack size from 8K to 16KBRedhat 7.1 内核进程堆栈大小从 8K 到 16KB
【发布时间】:2015-05-05 22:06:16
【问题描述】:

阅读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.

我知道内核进程堆栈是常驻内存,并且在创建进程时进行分配并且内存需要是连续的,在x86_64页面大小为4096字节的情况下,内核需要找到4个页面进程堆栈的 2 页。

这个功能在内核内存碎片化的时候会出问题吗? 一个进程的内核栈大小,在内存碎片化的情况下会更容易出现进程创建问题吗?

【问题讨论】:

  • 您的问题似乎不清楚,与编程无关。
  • 关于linux内核进程栈
  • 好的。我会回答你的问题。然后你就会明白为什么你的问题有问题了。
  • 谢谢,我会在我的问题中添加一些内容。
  • 我看不出这与编程有什么关系。这也不是问题。构成内核堆栈的页面在物理 RAM 中不需要是连续的。它们需要在虚拟地址空间中是连续的,但 64 位内核虚拟地址空间很大,有 128 TB,因此碎片永远不是问题。

标签: c linux linux-kernel redhat


【解决方案1】:

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

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

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

【讨论】:

  • 这就是我要找的。​​span>
【解决方案2】:

是的。

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

【讨论】:

  • 内核进程栈是否必须驻留在连续的物理内存中?
猜你喜欢
  • 2014-09-24
  • 1970-01-01
  • 2012-09-09
  • 1970-01-01
  • 1970-01-01
  • 2010-09-16
  • 2020-04-24
  • 1970-01-01
  • 2017-12-11
相关资源
最近更新 更多