Score:0

CentOS 8 misses a significant amount of RAM on VPS

us flag

CentOS 8 is running on a VPS having 1GB RAM.

dmesg shows:

Memory: 216012K/1048040K available

So I believe BIOS sees 1,073,192,960 bytes. Then, as free -b reads, RAM has 997,236,736 bytes in total.

That way, we can see a gap 75,956,224=1,073,192,960-997,236,736 bytes. In other words, 72+ MiB of 'unusable' memory.

How to bring that memory back to OS? Or how to learn where it is 'hidden?'

BTW, kdump is disabled: cat /sys/kernel/kexec_crash_size

0

UPD:
The beginning of dmesg concerning memory:

BIOS-provided physical RAM map:
BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable
BIOS-e820: [mem 0x000000000009fc00-0x000000000009ffff] reserved
BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved
BIOS-e820: [mem 0x0000000000100000-0x000000003ffdbfff] usable
BIOS-e820: [mem 0x000000003ffdc000-0x000000003fffffff] reserved
BIOS-e820: [mem 0x00000000feffc000-0x00000000feffffff] reserved
BIOS-e820: [mem 0x00000000fffc0000-0x00000000ffffffff] reserved
NX (Execute Disable) protection: active
SMBIOS 2.8 present.
DMI: Red Hat KVM, BIOS 1.11.0-2.el7 04/01/2014
Hypervisor detected: KVM
kvm-clock: Using msrs 4b564d01 and 4b564d00
kvm-clock: cpu 0, msr a001001, primary cpu clock
kvm-clock: using sched offset of 7965121487 cycles
clocksource: kvm-clock: mask: 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns
tsc: Detected 2199.996 MHz processor
e820: update [mem 0x00000000-0x00000fff] usable ==> reserved
e820: remove [mem 0x000a0000-0x000fffff] usable
last_pfn = 0x3ffdc max_arch_pfn = 0x400000000
MTRR default type: write-back
MTRR fixed ranges enabled:
  00000-9FFFF write-back
  A0000-BFFFF uncachable
  C0000-FFFFF write-protect
MTRR variable ranges enabled:
  0 base 000080000000 mask 3FFF80000000 uncachable
  1 disabled
  2 disabled
  3 disabled
  4 disabled
  5 disabled
  6 disabled
  7 disabled
x86/PAT: Configuration [0-7]: WB  WC  UC- UC  WB  WP  UC- WT
kexec: Reserving the low 1M of memory for crashkernel
Using GB pages for direct mapping
BRK [0x0a201000, 0x0a201fff] PGTABLE
BRK [0x0a202000, 0x0a202fff] PGTABLE
BRK [0x0a203000, 0x0a203fff] PGTABLE
BRK [0x0a204000, 0x0a204fff] PGTABLE
BRK [0x0a205000, 0x0a205fff] PGTABLE
RAMDISK: [mem 0x3506f000-0x3682ffff]
ACPI: Early table checksum verification disabled
ACPI: RSDP 0x00000000000F6280 000014 (v00 BOCHS )
ACPI: RSDT 0x000000003FFE348A 00002C (v01 BOCHS  BXPCRSDT 00000001 BXPC 00000001)
ACPI: FACP 0x000000003FFE30EE 000074 (v01 BOCHS  BXPCFACP 00000001 BXPC 00000001)
ACPI: DSDT 0x000000003FFE0040 0030AE (v01 BOCHS  BXPCDSDT 00000001 BXPC 00000001)
ACPI: FACS 0x000000003FFE0000 000040
ACPI: APIC 0x000000003FFE3162 000328 (v01 BOCHS  BXPCAPIC 00000001 BXPC 00000001)
ACPI: Local APIC address 0xfee00000
No NUMA configuration found
Faking a node at [mem 0x0000000000000000-0x000000003ffdbfff]
NODE_DATA(0) allocated [mem 0x3ffb2000-0x3ffdbfff]
crashkernel: memory value expected
Zone ranges:
  DMA      [mem 0x0000000000001000-0x0000000000ffffff]
  DMA32    [mem 0x0000000001000000-0x000000003ffdbfff]
  Normal   empty
  Device   empty
Movable zone start for each node
Early memory node ranges
  node   0: [mem 0x0000000000001000-0x000000000009efff]
  node   0: [mem 0x0000000000100000-0x000000003ffdbfff]
Zeroed struct page in unavailable ranges: 134 pages
Initmem setup node 0 [mem 0x0000000000001000-0x000000003ffdbfff]
On node 0 totalpages: 262010
  DMA zone: 64 pages used for memmap
  DMA zone: 158 pages reserved
  DMA zone: 3998 pages, LIFO batch:0
  DMA32 zone: 4032 pages used for memmap
  DMA32 zone: 258012 pages, LIFO batch:63
ACPI: PM-Timer IO Port: 0x608
ACPI: Local APIC address 0xfee00000
ACPI: LAPIC_NMI (acpi_id[0xff] dfl dfl lint[0x1])
IOAPIC[0]: apic_id 0, version 17, address 0xfec00000, GSI 0-23
ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)
ACPI: INT_SRC_OVR (bus 0 bus_irq 5 global_irq 5 high level)
ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)
ACPI: INT_SRC_OVR (bus 0 bus_irq 10 global_irq 10 high level)
ACPI: INT_SRC_OVR (bus 0 bus_irq 11 global_irq 11 high level)
ACPI: IRQ0 used by override.
ACPI: IRQ5 used by override.
ACPI: IRQ9 used by override.
ACPI: IRQ10 used by override.
ACPI: IRQ11 used by override.
Using ACPI (MADT) for SMP configuration information
smpboot: Allowing 87 CPUs, 86 hotplug CPUs
PM: Registered nosave memory: [mem 0x00000000-0x00000fff]
PM: Registered nosave memory: [mem 0x0009f000-0x0009ffff]
PM: Registered nosave memory: [mem 0x000a0000-0x000effff]
PM: Registered nosave memory: [mem 0x000f0000-0x000fffff]
[mem 0x40000000-0xfeffbfff] available for PCI devices
...
Memory: 216012K/1048040K available (12293K kernel code, 2225K rwdata, 7708K rodata, 2480K init, 14048K bss, 105512K reserved, 0K cma-reserved)
SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=87, Nodes=1
Kernel/User page tables isolation: enabled
ftrace: allocating 38570 entries in 151 pages
ftrace: allocated 151 pages with 5 groups
John Mahowald avatar
cn flag
Which architecture, x86, ARM? Probably not POWER if you refer to BIOS.
Nikita Kipriyanov avatar
za flag
When system boots, it first prints out the usage of memory as the "firmware" reports it to the OS. To see that, read the very beginning of `dmesg`. That might explain the memory as it is seen by Linux and how it uses that memory. If you put that here into the question, I'll try to explain that for you.
us flag
@JohnMahowald, x86.
us flag
@NikitaKipriyanov, I've updated the post with `dmesg` output.
Score:0
ar flag

Some memory is kept for reserve by the operating system to perform low level tasks. Please try dmesg | grep "Memory: "` command to check the reserved memory and other details.

Check this documentation for further reading -

https://github.com/torvalds/linux/blob/master/Documentation/devicetree/bindings/reserved-memory/reserved-memory.txt

us flag
Memory: 216012K/1048040K available (12293K kernel code, 2225K rwdata, 7708K rodata, 2480K init, 14048K bss, 105512K reserved, 0K cma-reserved) I have no idea how to get 72 M out of these figures.
Nikita Kipriyanov avatar
za flag
the *reserved memory* described in that document is not reserved by the Linux. It should be understood as reserved memory *address ranges*. That space is reserved by the *hardware* and dedicated for some memory mapped devices. When you write to these addresses, the system puts data to the PCI bus (or AMBA, or whatever your architecture uses) instead sending it to the RAM. This communication with devices is expected to be performed by the OS device drivers. Often those memory ranges aren't cached (CPU always reads directly from the device and never retains that data inside cache lines).
mangohost

Post an answer

Most people don’t grasp that asking a lot of questions unlocks learning and improves interpersonal bonding. In Alison’s studies, for example, though people could accurately recall how many questions had been asked in their conversations, they didn’t intuit the link between questions and liking. Across four studies, in which participants were engaged in conversations themselves or read transcripts of others’ conversations, people tended not to realize that question asking would influence—or had influenced—the level of amity between the conversationalists.