gpt4 book ai didi

Linux 内存分配 - 顺序更改为 1

转载 作者:太空宇宙 更新时间:2023-11-04 10:28:44 24 4
gpt4 key购买 nike

我会尽可能多地描述问题。不过,我无法发布所有相关代码。

案例如下,我对代码做了一些改动,它们都在用户空间中。我没有更改内核代码中的任何内容。
在使用此版本编译和工作了一段时间后,我突然注意到 Ephemeral ports范围已更改。
经过调查,我发现这是由于数量级的顺序发生变化(在内存分配中)引起的。但正如我之前所说,没有人碰过这段代码。

这是此更改前后的一些 linux 启动日志消息。您可以注意到我之前提到的顺序的变化。

变化后:

[000000.000] Determined physical RAM map:
[000000.000] memory: 0000000007000000 @ 0000000000c10000 (usable)
[000000.015] reserve bootmem for memoops 0000000000020000 @ 0000000007bf0000
[000000.019] Primary instruction cache 32kB, virtually tagged, 4 way, 64 sets, linesize 128 bytes.
[000000.019] Primary data cache 16kB, 64-way, 2 sets, linesize 128 bytes.
[000000.020] PID hash table entries: 512 (order: 9, 16384 bytes)
[000000.020] Using 500.000 MHz high precision timer.
[000000.227] Dentry cache hash table entries: 16384 (order: 5, 131072 bytes)
[000000.240] Inode-cache hash table entries: 8192 (order: 4, 65536 bytes)
[000000.266] Memory: 112408k/114688k available (2062k kernel code, 2136k reserved, 533k data, 200k init, 0k highmem)

变更前:

[000000.000] Determined physical RAM map:
[000000.000] memory: 0000000007400000 @ 0000000000c00000 (usable)
[000000.016] reserve bootmem for memoops 0000000000020000 @ 0000000007fe0000
[000000.020] Primary instruction cache 32kB, virtually tagged, 4 way, 64 sets, linesize 128 bytes.
[000000.020] Primary data cache 16kB, 64-way, 2 sets, linesize 128 bytes.
[000000.020] PID hash table entries: 1024 (order: 10, 32768 bytes)
[000000.228] Dentry cache hash table entries: 32768 (order: 6, 262144 bytes)
[000000.242] Inode-cache hash table entries: 16384 (order: 5, 131072 bytes)
[000000.269] Memory: 116280k/118784k available (2062k kernel code, 2344k reserved, 533k data, 200k init, 0k highmem)

注意:我已经尝试取消更改并重新编译,但由于某种原因问题仍然存在。

也许有人知道什么会影响这个?怎么会这样?

最佳答案

应用程序代码不会对内核的启动产生任何影响,因为它在内核启动后开始运行。

这个问题应该是你的物理内存变化引起的,你可以通过内核源代码验证:

mm/page_alloc.c
/* round applicable memory size up to nearest megabyte */
numentries = nr_kernel_pages;
numentries += (1UL << (20 - PAGE_SHIFT)) - 1;
numentries >>= 20 - PAGE_SHIFT;
numentries <<= 20 - PAGE_SHIFT;
....
log2qty = ilog2(numentries);
....
printk(KERN_INFO "%s hash table entries: %ld (order: %d, %lu bytes)\n",
tablename,
(1UL << log2qty),
ilog2(size) - PAGE_SHIFT,
size);

如果开机参数没有变化,可以检查:

  • 如果硬件保持不变
  • 您是否通过其他方法启动,例如从传统模式更改为 UEFI 模式
  • 如果您有多个具有相同配置(内存大小、cpu、芯片组等)的目标,您可以在另一 block 板上进行验证,以避免在这 block 板上出现硬件问题。

关于Linux 内存分配 - 顺序更改为 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40842153/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com