RAMの予約:メインメモリを予約する理由を確認してください。

RAMの予約:メインメモリを予約する理由を確認してください。

サーバーでは、Linuxカーネルは起動時にRAM設定を通知します。これは、物理512GiB RAM(536409480kiB)のうち約503GiB RAM(527942676kiB)しか使用できないことを示しています。

root@ada:~# dmesg | grep Memory:
[    5.891484] Memory: 527942676K/536409480K available (10252K kernel code, 1241K rwdata, 3320K rodata, 1592K init, 2272K bss, 8466804K reserved, 0K cma-reserved)

BIOSが予約したIO領域を考慮すると、一部のメモリが利用できないことが予想されます。

root@ada:~# dmesg | grep reserved
[    0.000000] BIOS-e820: [mem 0x000000000009c000-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x000000004f66f000-0x0000000057677fff] reserved
[    0.000000] BIOS-e820: [mem 0x000000006cdcf000-0x000000006efcefff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000070000000-0x000000008fffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000e0000000-0x00000000ffffffff] reserved
[    0.000000] BIOS-e820: [mem 0x000000107f380000-0x000000107fffffff] reserved
[    0.000000] BIOS-e820: [mem 0x000000207ff80000-0x000000207fffffff] reserved
[    0.000000] BIOS-e820: [mem 0x000000307ff80000-0x000000307fffffff] reserved
[    0.000000] BIOS-e820: [mem 0x000000407ff80000-0x000000407fffffff] reserved
[    0.000000] BIOS-e820: [mem 0x000000507ff80000-0x000000507fffffff] reserved
[    0.000000] BIOS-e820: [mem 0x000000607ff80000-0x000000607fffffff] reserved
[    0.000000] BIOS-e820: [mem 0x000000707ff80000-0x000000707fffffff] reserved
[    0.000000] BIOS-e820: [mem 0x000000807ff80000-0x000000807fffffff] reserved

ただし、合計サイズは100MiBを超えません。

このメモリが予約されている原因をどのように調べることができるか疑問に思います。なぜですか?

予約されたメモリがどの用途に使用されるのかわからない場合は、〜9GiBのメモリ損失のように見えます。システムが仮想化ホストとして機能することを考慮すると、各仮想化ゲストシステムは順番に専用RAMの同様の部分を「予約」するため、これらの「損失」はさらに悪化します。

~からその他の問題誰かがそのようなメモリをグラフィックスカードの「共有メモリ」のために予約することができると提案しましたが、探していましたが、現在のアダプタは最大50MiBしか使用していないようです。

root@ada:~# lspci  | grep -i vga
03:00.0 VGA compatible controller: Matrox Electronics Systems Ltd. Integrated Matrox G200eW3 Graphics Controller (rev 04)
root@ada:~# lspci -s 03:00.0 -vvv
03:00.0 VGA compatible controller: Matrox Electronics Systems Ltd. Integrated Matrox G200eW3 Graphics Controller (rev 04) (prog-if 00 [VGA controller])
        Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
        Status: Cap+ 66MHz+ UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
        Latency: 0 (4000ns min, 8000ns max)
        Interrupt: pin A routed to IRQ 243
        NUMA node: 0
        Region 0: Memory at eb000000 (32-bit, prefetchable) [size=16M]
        Region 1: Memory at f9808000 (32-bit, non-prefetchable) [size=16K]
        Region 2: Memory at f9000000 (32-bit, non-prefetchable) [size=8M]
        [virtual] Expansion ROM at 000c0000 [disabled] [size=128K]
        Capabilities: [dc] Power Management version 3
                Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
                Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
        Kernel driver in use: mgag200
        Kernel modules: mgag200

修正する

ここ完全なdmesg出力です

修正する BIOSモード(非UEFI)で起動されたDell Poweredgeサーバー。

修正する

これが出力です/proc/iomem

修正する

ここで評価された出力/proc/iomem

root@ada:~# cat /proc/iomem | tr [a-z] [A-Z] | while IFS='-: ' read AD1 AD2 REST;
> do echo "$(( $(echo "obase=10; ibase=16; ( $AD2 - $AD1 ) " | bc) >> 20))MB for  $REST" ; 
> done | sort -h  

[...]
14MB for  ACPI NON-VOLATILE STORAGE                                                                                                        
15MB for  0000:03:00.0
15MB for  MGADRMFB_VRAM
15MB for  PCI BUS 0000:02
15MB for  PCI BUS 0000:03
33MB for  RESERVED
128MB for  RESERVED
207MB for  PCI BUS 0000:20
207MB for  PCI BUS 0000:40
207MB for  PCI BUS 0000:60
207MB for  PCI BUS 0000:80
207MB for  PCI BUS 0000:A0
207MB for  PCI BUS 0000:C0
207MB for  PCI BUS 0000:E0
255MB for  PCI MMCONFIG 0000 [BUS 00-FF]
255MB for  PNP 00:00
315MB for  PCI BUS 0000:00
343MB for  SYSTEM RAM
511MB for  RESERVED
543MB for  RESERVED
1269MB for  SYSTEM RAM
63475MB for  SYSTEM RAM
65535MB for  SYSTEM RAM
65535MB for  SYSTEM RAM
65535MB for  SYSTEM RAM
65535MB for  SYSTEM RAM
65535MB for  SYSTEM RAM
65535MB for  SYSTEM RAM
65535MB for  SYSTEM RAM
915967MB for  PCI BUS 0000:00
915967MB for  PCI BUS 0000:20
915967MB for  PCI BUS 0000:40
915967MB for  PCI BUS 0000:60
915967MB for  PCI BUS 0000:80
915967MB for  PCI BUS 0000:A0
915967MB for  PCI BUS 0000:C0
915967MB for  PCI BUS 0000:E0

私のシステムのdmidecode出力は次のとおりです(RAMの可用性状況に合わせて)。

Getting SMBIOS data from sysfs.
SMBIOS 3.2 present.
81 structures occupying 6778 bytes.
Table at 0x6E8AD000.

Handle 0xDA00, DMI type 218, 11 bytes
OEM-specific Type
        Header and Data:
                DA 0B 00 DA B2 00 17 20 0E 10 03

Handle 0x0000, DMI type 0, 26 bytes
BIOS Information
        Vendor: Dell Inc.
        Version: 1.14.3
        Release Date: 07/17/2020
        Address: 0xF0000
        Runtime Size: 64 kB
        ROM Size: 0 MB
        Characteristics:
                ISA is supported
                PCI is supported
                PNP is supported
                BIOS is upgradeable
                BIOS shadowing is allowed
                Boot from CD is supported
                Selectable boot is supported
                EDD is supported
                Japanese floppy for Toshiba 1.2 MB is supported (int 13h)
                5.25"/360 kB floppy services are supported (int 13h)
                5.25"/1.2 MB floppy services are supported (int 13h)
                3.5"/720 kB floppy services are supported (int 13h)
                8042 keyboard services are supported (int 9h)
                Serial services are supported (int 14h)
                CGA/mono video services are supported (int 10h)
                ACPI is supported
                USB legacy is supported
                BIOS boot specification is supported
                Function key-initiated network boot is supported
                Targeted content distribution is supported
                UEFI is supported
            BIOS Revision: 1.14
    
    Handle 0x0100, DMI type 1, 27 bytes
    System Information
            Manufacturer: Dell Inc.
            Product Name: PowerEdge R7425
            Version: Not Specified
            Serial Number: XXXXXX
            UUID: XXXXXXXX-XXXX-4a10-8048-c3c04f593533
            Wake-up Type: Power Switch
            SKU Number: SKU=NotProvided;ModelName=PowerEdge R7425
        Family: PowerEdge

完全なdmidecodeおよび約9GiB RAMの不可解な使用不可に関する可能な情報は、ここで見ることができる。https://pastebin.com/nHYyuH7h

ここに画像の説明を入力してください。

ベストアンサー1

私は答えを知っていると思います(しかし100%確かではありません)。

struct pageLinuxにはメモリページに関連する構造があります。構造のサイズはアーキテクチャによって異なります。 32ビットx86 Linuxでは40バイト、64ビットではより大きなポインタサイズのため、64バイトと考えられます。

ここで見つけることができます: https://elixir.bootlin.com/linux/v6.1/source/include/linux/mm_types.h

これらの構造はさまざまな方法で構成できます(参照:https://lwn.net/Articles/789304/)、しかし最終的にはシステムのすべてのメモリページがそのような構造を持つようになります。

つまり、カーネルは4096バイト(ページサイズ)ごとに64バイトを予約する必要があり、これは512Gの場合((512×1024³)/4096)×64 = 8589934592バイトまたは8388608K(8G)を予約することを意味します。

これをコードro / rwdata、init、bssセクションに追加すると、ここで説明したい8466804Kに非常に近い8407285Kが得られます。

mem=256Gカーネルパラメータなどを使用してサーバーを起動することもできます。これにより、利用可能なメモリサイズが256Gに制限され、予約されたサイズがほぼ2倍に減少することがわかります。これは上記の理論とも関連しています。残念ながら、その構造に情報がどれだけ含まれており、それほど重要であるかを考えると、そのメモリを他の目的に使用する方法はありません。

おすすめ記事