在经过分配user/kernel按1G/3G方式使用4G的逻辑空间后,在内核下做测试申请2G的内核会失败。经查是由于NUMAQ引起的,由于PHYSICAL_START被设置为从0x100000开始,而我的内存分布如下表所示:
BIOS-e820: 0000000000000000 - 000000000009ec00 (usable)
BIOS-e820: 000000000009ec00 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000e5000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 000000007f780000 (usable)
BIOS-e820: 000000007f78e000 - 000000007f790000 type 9
BIOS-e820: 000000007f790000 - 000000007f79e000 (ACPI data)
BIOS-e820: 000000007f79e000 - 000000007f7d0000 (ACPI NVS)
BIOS-e820: 000000007f7d0000 - 000000007f7e0000 (reserved)
BIOS-e820: 000000007f7ed000 - 0000000080000000 (reserved)
BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved)
BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved)
BIOS-e820: 00000000ffe00000 - 0000000100000000 (reserved)
BIOS-e820: 0000000100000000 - 0000000380000000 (usable)
请注意这一句BIOS-e820: 0000000000100000 - 000000007f780000 (usable) 从0x100000开始的连续内存仅有2038M(2G),而做内存映射花300M左右(通过free查看),所以我无法在内核中分配2G的内存空间。
若要真正的使用3G的内核内存,则需要将PHYSICAL_START设置为0x100000000(4G)
修改方法可以在make menuconfig 中的Physical address where the kernel is loaded将0x100000改为0x100000000,我以为就可以分配3G,但是从测试的结果来看这是相当然的方法,我还没有成功。修改这个参数只是将内核加载到了0x100000000处。
阅读(2194) | 评论(1) | 转发(0) |