64 비트 데비안에서 3.2GB의 4GB RAM 만 감지 00000000cfe00000 (reserved) [ 0.000000]

데비안 스퀴즈 (x64)를 실행 중입니다.

# uname -srvmo
Linux 2.6.32-5-amd64 #1 SMP Mon Jan 16 16:22:28 UTC 2012 x86_64 GNU/Linux

G31M-S 마더 보드 에 2 개의 호환 가능한 2GB DDR2 스틱이 있습니다. 최대 8GB를 지원합니다.

여기에 이미지 설명을 입력하십시오

이것은 서버이기 때문에 그래픽에 관심이 없습니다. 그래서 가장 낮게 설정했습니다.

Internal Graphics Mode Select: Auto
                               Enabled, 1MB   <--
                               Enabled, 8MB
DVMT Mode Select:              Fixed Mode     <--
                               Auto
    DVMT/FIXED Memory:         128MB          <--
                               256MB

그러나 Linux는 3.19GiB의 메모리 만 감지합니다.

# cat /proc/meminfo
MemTotal:        3350712 kB
...

상기 찾고 E820지도 :

[    0.000000] BIOS-provided physical RAM map:
[    0.000000]  BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
[    0.000000]  BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
[    0.000000]  BIOS-e820: 00000000000e6000 - 0000000000100000 (reserved)
[    0.000000]  BIOS-e820: 0000000000100000 - 00000000cfdb0000 (usable)
[    0.000000]  BIOS-e820: 00000000cfdb0000 - 00000000cfdc0000 (ACPI data)
[    0.000000]  BIOS-e820: 00000000cfdc0000 - 00000000cfdf0000 (ACPI NVS)
[    0.000000]  BIOS-e820: 00000000cfdf0000 - 00000000cfe00000 (reserved)
[    0.000000]  BIOS-e820: 00000000fed00000 - 00000000fed00400 (reserved)
[    0.000000]  BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved)
[    0.000000]  BIOS-e820: 00000000ff380000 - 0000000100000000 (reserved)
[    0.000000] DMI present.
[    0.000000] AMI BIOS detected: BIOS may corrupt low RAM, working around it.
[    0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved)

그리고 약간의 수학을하는 :

>>> ((0x9F800 - 0x10000) + (0xCF6B0000 - 0x100000)) / 1024.0 / 1024.0 / 1024.0
3.240476608276367

우리는 거의 같은 대답을 얻습니다.

내가 무엇을 놓치고 있습니까?


“PCI 주소 공간”인수를 완전히 구매하지는 않습니다. 2GB 2 개 중 하나를 꺼내면 설정 화면에 2048MB가 표시됩니다.

# cat /proc/meminfo
MemTotal:        2058432 kB

1.96GB입니다.

다시 E820지도 :

[    0.000000] BIOS-provided physical RAM map:
[    0.000000]  BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
[    0.000000]  BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
[    0.000000]  BIOS-e820: 00000000000e6000 - 0000000000100000 (reserved)
[    0.000000]  BIOS-e820: 0000000000100000 - 000000007fdb0000 (usable)
[    0.000000]  BIOS-e820: 000000007fdb0000 - 000000007fdc0000 (ACPI data)
[    0.000000]  BIOS-e820: 000000007fdc0000 - 000000007fdf0000 (ACPI NVS)
[    0.000000]  BIOS-e820: 000000007fdf0000 - 000000007fe00000 (reserved)
[    0.000000]  BIOS-e820: 00000000fed00000 - 00000000fed00400 (reserved)
[    0.000000]  BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved)
[    0.000000]  BIOS-e820: 00000000ff380000 - 0000000100000000 (reserved)
[    0.000000] DMI present.
[    0.000000] AMI BIOS detected: BIOS may corrupt low RAM, working around it.
[    0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved)

그리고 수학은 …

>>> ((0x9F800 - 0x10000) + (0x7fdb0000 - 0x100000)) / 1024.0 / 1024.0 / 1024.0
1.9973125457763672

그래서 2GB / 2GB를 얻었습니다. /proc/cpuinfo내 프로세서가 36 비트 물리적 주소 지정을 지원함을 보여줍니다. 2 ^ 36 = 64GB로, 가까운 곳에 있지 않습니다.


# ./smem -R 4G -w
Area                           Used      Cache   Noncache
firmware/hardware            843592          0     843592
kernel image                      0          0          0
kernel dynamic memory        181116     134616      46500
userspace memory             287784      19736     268048
free memory                 2881812    2881812          0


답변

당신은 메모리 다시 매핑 설정해야 ON을 BIOS에서. 그렇지 않으면 4GB 경계를 초과하여 메모리를 다시 매핑하지 않으며 일부 메모리는 하드웨어 매핑으로 덮여 있습니다.


답변

PCI는 또한 일부 주소 공간을 사용합니다. PCI 카드와 PCI 장치는 모두 마더 보드 (예 : 칩셋)에 구축됩니다.

이것은 온보드 RAM이 많은 최신 GPU를 사용하지 않더라도 4GB 중 3¼에서 3½GB까지만 사용할 수 있음을 의미했습니다.


답변

누락 된 RAM이 펌웨어에서 사용됩니다.

# ./smem -R 4G -w
Area                           Used      Cache   Noncache
firmware/hardware            843592          0     843592
kernel image                      0          0          0
kernel dynamic memory        181116     134616      46500
userspace memory             287784      19736     268048
free memory                 2881812    2881812          0

합산:

echo $((181116 + 287784 + 2881812 + 843592))
4194304

보시다시피 최대 4GB입니다. 그리고 ~ 800M이 누락 된 것으로보고합니다.

firmware/hardware            843592          0     843592

답변