Ubuntu'da L1, L2, L3 önbellek ve RAM'in boyutunu bilmenin bir yolu var mı?


Yanıtlar:


12

CPU bilgileri

Lscpu komutunu kullanın :

$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                2
On-line CPU(s) list:   0,1
Thread(s) per core:    1
Core(s) per socket:    2
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            15
Model:                 6
Stepping:              5
CPU MHz:               2400.000
BogoMIPS:              6000.33
L1d cache:             16K
L2 cache:              2048K
NUMA node0 CPU(s):     0,1

Listelenen bilgiler CPU çekirdeğine göre verilmiştir.

Bellek bilgileri

Orada serbest (Okunabilir biçimde sonuçları, yani GiB ziyade bayt verir -h) komutu:

$ free -h
             total       used       free     shared    buffers     cached
Mem:          2.0G       390M       1.6G        10M        15M       160M
-/+ buffers/cache:       215M       1.7G
Swap:         2.0G         0B       2.0G

3

Bu size önbellek bilgilerinizi verecektir. Soket Ataması, bölümde hangi önbelleğe başvurulduğunu size söyleyecektir.

sudo dmidecode -t cache

RAM için bakılması gereken birkaç şey var ama meminfo bunu yapmalı. Burada sadece toplam / ücretsiz göstermek için grep kullandım ama her şeyi görmek için daha az veya kedi kullanabilirsiniz. Bellek boyutu ve kullanımı hakkında yalnızca boyuttan çok daha fazla bilgi gösterir.

grep Mem /proc/meminfo

1

Dayanarak jkabrams komutu takip ederek ondan "önbellek" filtreleme ile cevap, sahip olduğunuz her önbellek öğesi gösterilir.

lscpu | grep cache

ve RAM:

free -h

RAM, süreçler ve daha fazlası hakkında daha fazla bilgi için dağıtımınızda htop kullanabilirsiniz. Ubuntu'ya böyle yükleyin.

sudo apt-get install htop

0

sysfs

for d in /sys/devices/system/cpu/cpu0/cache/index*;
  do tail -c+1 $d/{level,type,size}
  echo
done

verir:

==> /sys/devices/system/cpu/cpu0/cache/index0/level <==
1

==> /sys/devices/system/cpu/cpu0/cache/index0/type <==
Data

==> /sys/devices/system/cpu/cpu0/cache/index0/size <==
32K

==> /sys/devices/system/cpu/cpu0/cache/index1/level <==
1

==> /sys/devices/system/cpu/cpu0/cache/index1/type <==
Instruction

==> /sys/devices/system/cpu/cpu0/cache/index1/size <==
32K

==> /sys/devices/system/cpu/cpu0/cache/index2/level <==
2

==> /sys/devices/system/cpu/cpu0/cache/index2/type <==
Unified

==> /sys/devices/system/cpu/cpu0/cache/index2/size <==
256K

==> /sys/devices/system/cpu/cpu0/cache/index3/level <==
3

==> /sys/devices/system/cpu/cpu0/cache/index3/type <==
Unified

==> /sys/devices/system/cpu/cpu0/cache/index3/size <==
8192K

getconf

getconf -a | grep CACHE

verir:

LEVEL1_ICACHE_SIZE                 32768
LEVEL1_ICACHE_ASSOC                8
LEVEL1_ICACHE_LINESIZE             64
LEVEL1_DCACHE_SIZE                 32768
LEVEL1_DCACHE_ASSOC                8
LEVEL1_DCACHE_LINESIZE             64
LEVEL2_CACHE_SIZE                  262144
LEVEL2_CACHE_ASSOC                 8
LEVEL2_CACHE_LINESIZE              64
LEVEL3_CACHE_SIZE                  20971520
LEVEL3_CACHE_ASSOC                 20
LEVEL3_CACHE_LINESIZE              64
LEVEL4_CACHE_SIZE                  0
LEVEL4_CACHE_ASSOC                 0
LEVEL4_CACHE_LINESIZE              0

Veya tek bir seviye için:

getconf LEVEL2_CACHE_SIZE

Bu arayüzle ilgili en güzel şey, sadece POSIX sysconfC işlevi etrafında bir sarıcı olmasıdır (önbellek bağımsız değişkenleri POSIX olmayan uzantılardır) ve bu nedenle C kodundan da kullanılabilir.

Ubuntu 16.04'te test edildi.

x86 CPUID komutu

CPUID x86 talimatı ayrıca önbellek bilgileri sunar ve doğrudan kullanıcı tarafından erişilebilir: https://en.wikipedia.org/wiki/CPUID

glibc bu yöntemi x86 için kullanıyor gibi görünüyor. Adım hata ayıklama / komut izleme ile doğrulanmadı, ancak 2.28 için kaynak sysdeps/x86/cacheinfo.cbunu yapar:

__cpuid (2, eax, ebx, ecx, edx);

Minimal C örnek oluşturmak YAPILACAK, tembel şimdi de sordu: /programming/14283171/how-to-receive-l1-l2-l3-cache-size-using-cpuid-instruction-in-x86

ARM ayrıca Önbellek Boyutu Kimlik Kaydı (CCSIDR) gibi kayıtlar aracılığıyla önbellek boyutlarını bulmak için mimari tanımlı bir mekanizmaya sahiptir, genel bakış için ARMv8 Programcı El Kitabı 11.6 "Önbellek keşfi" bölümüne bakın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.