64 비트 데비안에서 3.2GB의 4GB RAM 만 감지


9

데비안 스퀴즈 (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

BIOS에서 메모리 다시 매핑이 켜져 있는지 확인하십시오 .
David Schwartz

@DavidSchwartz 나는 그것을 켜려고 시도했고 커널은 부팅시 당황했다. 그래도 라이브 CD로 시도해 볼 수 있습니다.
Jonathon Reinhart

@DavidSchwartz 당신은 절대적으로 맞습니다. 메모리 리매핑을 켜면 트릭을 수행 한 것 같습니다. 켜져 있지 않으면 Memtest86 +는 ~ 3300MB를보고합니다. 켜져 있으면 4086MB를보고합니다. 그 대답을한다면 기꺼이 받아들입니다.
Jonathon Reinhart

답변:


5

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


이것이 문제였습니다. 메모리 리매핑을 켜면 트릭을 수행 한 것 같습니다. 켜져 있지 않으면 Memtest86 +는 ~ 3300MB를보고합니다. 켜져 있으면 4086MB를보고합니다.
Jonathon Reinhart

Memory Hole Remapping마찬가지로, (AMIBIOS) 를 활성화하기 전에 POST는 약 3.3GiB를보고하는 반면 DMI는 여전히 2GiB의 두 모듈을 나열합니다.
njsg

5

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

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


나는 그 사실을 거의 무시했습니다 ... 0.8GB를 의미합니까? 그러나 e820지도의 상단은 0x100000000 == 1<<32입니다. 그렇다면 왜 BIOS가 나머지 RAM을 1 << 32 이상으로 매핑하지 않습니까? Celeron E3400이며 64GB에 적합해야 /proc/cpuinfo한다고 말합니다 address sizes : 36 bits physical, 48 bits virtual. ( (1<<36) / (1024*1024*1024) == 64)
Jonathon Reinhart

내 오래된 Tyan 마더 보드의 매뉴얼은 4GB RAM을 지원하지만 OS에 전혀 노출되지 않을 것임을 경고하는 유일한 것입니다. 사용 된 확장 카드 (일반 PCI, 66Mhz, 64 비트)에 따라 약 3.3GB의 사용 가능한 공간이 노출됩니다. 나는 512MB의 RAM이 내가 감당할 수있는 전부라고 테스트하지 않았다. (이 듀얼 CPU 마더 보드가 여전히 두 개의 물리적 CPU를 사용한다는 의미로 돌아 왔습니다. 그 이후로 상황이 바뀌었을 수도 있고 PCIe의 제한이 같지 않을 수도 있지만 대부분의 마더 보드에는 여전히 PCI와 PCIe가 있습니다).
Hennes

내 편집을 참조하십시오. 문제는 BIOS가에 대한 메모리보고를 거부 하거나이 1<<32커널이 그것을 이해하는 방법을 모른다는 것입니다.
Jonathon Reinhart

내부 그래픽에서 사용하는 공유 메모리를 고려 했습니까? smem설치 한 경우 smem -R 4G -w사용 가능한 / 사용 된 메모리에 대한 일반적인 개요를 시도하십시오 .
Izzy

1
@Hennes이 답변은 이것이 32 비트 시스템이라면 완벽 할 것입니다. 그러나 64 비트 (36 비트 실제 메모리 주소 지정)에는 해당되지 않습니다.
Jonathon Reinhart

2

누락 된 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

예, 그리고 나는 그것에 놀라지 않습니다. 문제는 왜 BIOS가 800MB 이상의 램을보고하지 않는 것 0x100000000 (1<<32)입니까? 마치 32 비트 시스템 인 것처럼 동작합니다.
Jonathon Reinhart

네,이 답변은 유효하다고 생각하지만, 그 마지막 질문은 남아 있습니다 :-)
Jonathon Reinhart

그렇다면 smem -R 2G -w기계에서 2G로만 무엇을 말 합니까 (특히 펌웨어 / 하드웨어와 관련하여 "800M 누락"이 4G로 진행된 섹션 인 것 같습니다)? 펌웨어가 더 이상 800M을 더 이상 필요로하지 않으면 꽤 재밌을 것입니다 ...
Izzy

그것은 함께 할 필요가 없습니다 AMI BIOS detected: BIOS may corrupt low RAM, working around it."때때로 BIOS가 버그가 잘못 예약 된 메모리를보고이 보고서 오류, Memtest 같은 메모리 테스트 소프트웨어를 일으킬 수 있습니다.."(당신의 e820link에서)과 위키 백과의 말 - ? 편집 : 아, 아니오-그것은 800M이 아닌 64k를 설명합니다 ...
Izzy

집에 돌아 왔을 때 확인할 수 있지만 같은 말을한다고 가정합니다. 2GB는 E820 맵을보십시오. 관찰에 따르면, 예약 된 / ACPI 범위가 가산기 공간 (일부)에서 더 낮다는 점을 제외하면 거의 동일하게 보입니다.
Jonathon Reinhart
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.