Moins de RAM disponible qu'installé sur Centos 7

Je n'arrive pas à comprendre pourquoi ai-je less de RAM utilisable que installé. Je cours le 64 bits Centos 7 avec 1 module de RAM de 4096MB sur un Lenovo x230. Quelques informations de la machine en question:

$ free -m total used free shared buff/cache available Mem: 2439 1129 172 124 1137 857 Swap: 2087 41 2046 $ cat /etc/centos-release CentOS Linux release 7.2.1511 (Core) $ uname -m x86_64 $ dmidecode -t memory | grep -i size Size: 4096 MB Size: No Module Installed $ lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 4 On-line CPU(s) list: 0-3 Thread(s) per core: 2 Core(s) per socket: 2 Socket(s): 1 NUMA node(s): 1 Vendor ID: GenuineIntel CPU family: 6 Model: 58 Model name: Intel(R) Core(TM) i7-3520M CPU @ 2.90GHz Stepping: 9 CPU MHz: 1639.519 BogoMIPS: 5786.51 Virtualization: VT-x L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 4096K NUMA node0 CPU(s): 0-3 

Le BIOS affiche 4096 Mo de RAM à installer.

 $ dmesg | grep -C 3 -i mtrr [ 0.000000] e820: remove [mem 0x000a0000-0x000fffff] usable [ 0.000000] AGP: No AGP bridge found [ 0.000000] e820: last_pfn = 0x11e600 max_arch_pfn = 0x400000000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-BFFFF uncachable [ 0.000000] C0000-FFFFF write-protect [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 0FFC00000 mask FFFC00000 write-protect [ 0.000000] 1 base 000000000 mask F80000000 write-back [ 0.000000] 2 base 080000000 mask FC0000000 write-back $ dmesg | grep -C 3 -i e820 [ 0.000000] Initializing cgroup subsys cpuacct [ 0.000000] Linux version 3.10.0-327.13.1.el7.x86_64 ([email protected]) (gcc version 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC) ) #1 SMP Thu Mar 31 16:04:38 UTC 2016 [ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-3.10.0-327.13.1.el7.x86_64 root=/dev/mapper/centos00-root ro crashkernel=auto rd.lvm.lv=centos00/root rd.lvm.lv=centos00/swap rhgb quiet LANG=en_ZA.UTF-8 [ 0.000000] e820: BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d7ff] usable [ 0.000000] BIOS-e820: [mem 0x000000000009d800-0x000000000009ffff] reserved [ 0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved [ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000001fffffff] usable [ 0.000000] BIOS-e820: [mem 0x0000000020000000-0x00000000201fffff] reserved [ 0.000000] BIOS-e820: [mem 0x0000000020200000-0x0000000040003fff] usable [ 0.000000] BIOS-e820: [mem 0x0000000040004000-0x0000000040004fff] reserved [ 0.000000] BIOS-e820: [mem 0x0000000040005000-0x000000008c0a0fff] usable [ 0.000000] BIOS-e820: [mem 0x000000008c0a1000-0x00000000dae9efff] reserved [ 0.000000] BIOS-e820: [mem 0x00000000dae9f000-0x00000000daf9efff] ACPI NVS [ 0.000000] BIOS-e820: [mem 0x00000000daf9f000-0x00000000daffefff] ACPI data [ 0.000000] BIOS-e820: [mem 0x00000000dafff000-0x00000000df9fffff] reserved [ 0.000000] BIOS-e820: [mem 0x00000000f8000000-0x00000000fbffffff] reserved [ 0.000000] BIOS-e820: [mem 0x00000000fec00000-0x00000000fec00fff] reserved [ 0.000000] BIOS-e820: [mem 0x00000000fed08000-0x00000000fed08fff] reserved [ 0.000000] BIOS-e820: [mem 0x00000000fed10000-0x00000000fed19fff] reserved [ 0.000000] BIOS-e820: [mem 0x00000000fed1c000-0x00000000fed1ffff] reserved [ 0.000000] BIOS-e820: [mem 0x00000000fee00000-0x00000000fee00fff] reserved [ 0.000000] BIOS-e820: [mem 0x00000000ffc00000-0x00000000ffffffff] reserved [ 0.000000] BIOS-e820: [mem 0x0000000100000000-0x000000011e5fffff] usable [ 0.000000] NX (Execute Disable) protection: active [ 0.000000] SMBIOS 2.7 present. [ 0.000000] DMI: LENOVO 2325SRQ/2325SRQ, BIOS G2ETA5WW (2.65 ) 09/17/2015 [ 0.000000] e820: update [mem 0x00000000-0x00000fff] usable ==> reserved [ 0.000000] e820: remove [mem 0x000a0000-0x000fffff] usable [ 0.000000] AGP: No AGP bridge found [ 0.000000] e820: last_pfn = 0x11e600 max_arch_pfn = 0x400000000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back -- [ 0.000000] 8 base 11E800000 mask FFF800000 uncachable [ 0.000000] 9 base 11E600000 mask FFFE00000 uncachable [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] e820: last_pfn = 0x8c0a1 max_arch_pfn = 0x400000000 [ 0.000000] found SMP MP-table at [mem 0x000f0100-0x000f010f] mapped at [ffff8800000f0100] [ 0.000000] Base memory trampoline at [ffff880000097000] 97000 size 24576 [ 0.000000] init_memory_mapping: [mem 0x00000000-0x000fffff] -- [ 0.000000] PM: Registered nosave memory: [mem 0xfee00000-0xfee00fff] [ 0.000000] PM: Registered nosave memory: [mem 0xfee01000-0xffbfffff] [ 0.000000] PM: Registered nosave memory: [mem 0xffc00000-0xffffffff] [ 0.000000] e820: [mem 0xdfa00000-0xf7ffffff] available for PCI devices [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] setup_percpu: NR_CPUS:5120 nr_cpumask_bits:8 nr_cpu_ids:8 nr_node_ids:1 [ 0.000000] PERCPU: Embedded 31 pages/cpu @ffff88011e200000 s87168 r8192 d31616 u262144 -- [ 0.078755] ACPI: bus type PCI registered [ 0.078756] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5 [ 0.078931] PCI: MMCONFIG for domain 0000 [bus 00-3f] at [mem 0xf8000000-0xfbffffff] (base 0xf8000000) [ 0.078933] PCI: MMCONFIG at [mem 0xf8000000-0xfbffffff] reserved in E820 [ 0.079010] PCI: Using configuration type 1 for base access [ 0.079718] ACPI: Added _OSI(Module Device) [ 0.079720] ACPI: Added _OSI(Processor Device) -- [ 0.116705] usbcore: registered new device driver usb [ 0.116763] PCI: Using ACPI for IRQ routing [ 0.118451] PCI: pci_cache_line_size set to 64 bytes [ 0.118883] e820: reserve RAM buffer [mem 0x0009d800-0x0009ffff] [ 0.118884] e820: reserve RAM buffer [mem 0x40004000-0x43ffffff] [ 0.118885] e820: reserve RAM buffer [mem 0x8c0a1000-0x8fffffff] [ 0.118886] e820: reserve RAM buffer [mem 0x11e600000-0x11fffffff] [ 0.118961] NetLabel: Initializing [ 0.118962] NetLabel: domain hash size = 128 [ 0.118963] NetLabel: protocols = UNLABELED CIPSOv4 $ lspci -vnn | grep VGA -A 12 00:02.0 VGA compatible controller [0300]: Intel Corporation 3rd Gen Core processor Graphics Controller [8086:0166] (rev 09) (prog-if 00 [VGA controller]) Subsystem: Lenovo Device [17aa:21fa] Flags: bus master, fast devsel, latency 0, IRQ 27 Memory at f0000000 (64-bit, non-prefetchable) [size=4M] Memory at e0000000 (64-bit, prefetchable) [size=256M] I/O ports at 6000 [size=64] Expansion ROM at <unassigned> [disabled] Capabilities: [90] MSI: Enable+ Count=1/1 Maskable- 64bit- Capabilities: [d0] Power Management version 2 Capabilities: [a4] PCI Advanced Features Kernel driver in use: i915 00:14.0 USB controller [0c03]: Intel Corporation 7 Series/C210 Series Chipset Family USB xHCI Host Controller [8086:1e31] (rev 04) (prog-if 30 [XHCI]) 

Vérification si free -m n'est pas buggé:

 mount -t tmpfs -o size=80% none /tempRam dd if=/dev/zero of=/tempRam/testFile bs=1M count=3096 

sortie:

 dd: error writing '/tempRam/testFile': No space left on device 1952+0 records in 1951+0 records out 2046541824 bytes (2.0 GB) copyd, 4.74288 s, 431 MB/s 

Toute idée pourquoi ai-je seulement 2.4gb RAM disponible et comment être capable d'utiliser tous les 4 Go?

Il y a de nombreuses raisons possibles, et il est un peu impossible / impossible d'enquêter sur le problème à partir d'ici sans surveiller complètement le système.

Mais ici, je vais énumérer trois raisons possibles:

Premier

La raison peut différer en raison des tâches que vous avez sur votre système et ce que vous faites, cela peut différer si vous utilisez une virtualisation, si des process associés à faire des instantanés et à travers l'allocation memory COW (Copy-on-right) sont en cours d'exécution, les E / S de files mappés en memory, les objects partagés étant destinés à être partagés par les files exécutables et d'autres files objects partagés, la binding dynamic (binding tardive), etc.

En outre, sachez que vous ne pouvez pas toujours find votre memory totale réelle en ajoutant la memory utilisée par tous les process en cours d'exécution. De nombreuses applications semblent utiliser plus de memory que ce qui existe réellement sur la machine, en raison de l'object partagé et d'autres concepts liés à la RAM.

En outre, la memory libre est tout au sujet de la memory physique qui n'a pas de données logiques mappées. Oui, nous devrions être conscients que la partie memory inutilisée a certaines données mappées mais pas dans un état actif et utilisé par un process en cours d'exécution.

BTW, Remarquez que les systèmes Unix-like veulent avoir – et montrer – aussi peu de memory libre que possible, pas toute la memory libre! Ainsi, d'après ce que vous auriez pu deviner, ils utilisent la memory qui n'est pas activement mappée aux process de la machine en cours d'exécution pour des choses comme les tampons pour diverses opérations de transfert d'E / S et caches.

Seconde

Votre BIOS est peut-être bogué, MAIS puisqu'il montre la quantité exacte de RAM, nous pouvons dire qu'il n'y a rien de mal avec le BIOS, et le fait est que le kernel ne l'utilise pas.

Le dernier

La dernière chose que je vais énumérer, est en quelque sorte la première chose qui vient à l'esprit de tout le monde, et c'est de la RAM réservée pour les trucs liés au GPU, spécialement si vous avez un GPU embarqué. Mais depuis la sortie de votre dmesg | grep -C 3 -i e820 dmesg | grep -C 3 -i e820 ne montre rien de mal, donc, ce n'est pas votre problème.

Il est vraiment difficile de dire quel est votre problème puisque nous n'avons aucune compréhension profonde de votre server, mais tout ce que vous avez mentionné dans votre question et vos commentaires, et je pense que nous ne pouvons rien faire d'autre ici.

Je vous recommand ⟼ Faites un test, par exemple, téléchargez memtest86+ en exécutant yum install memtest86+ et essayez de tester votre memory et voyez quel est votre code de sortie. Et surveillez la memory de votre système pendant un certain time, en utilisant des commands telles que vmstat -a , vmstat -s , cat /proc/meminfo , top , htop , sar -r etc, et voyez si vous voyez quelque chose de bizarre.

Si la recommandation ci-dessus n'a pas aidé ↴

Deux autres options finales: Tout d'abord, replacez votre RAM, ce support Lenovo peut vous aider. Ensuite, reconstruisez et installez un nouveau kernel.

J'espère que cela pourrait être une aide.

Vous findez peut-être cette page extrêmement utile.

TL; DR: La configuration de l'ordinateur portable spécifie probablement less que ce qui est réellement disponible. Cela peut être changé dans /boot/grub/grub.conf .

Vous devez savoir comment recomstackr un kernel avant d'essayer de faire quelque chose avec.

  1. allez dans le directory du kernel Linux (généralement "/ usr / src / linux")
  2. lancez make menuconfig (ou faites make xconfig, gconfig etc …)
  3. aller à -> Types et fonctionnalités du processeur
  4. aller à -> Support memory élevé
  5. Sélectionnez ensuite l'option appropriée sur votre machine (l'option "off" active le support ne fait que less de 4 Go)
  6. recomstackr le kernel make && make modules && make modules_install
  7. n'oubliez pas de reconfigurer votre chargeur de démarrage