Comment trouver la taille de la mémoire virtuelle et la taille du cache d'un système Linux?


11

Existe-t-il une commande pour obtenir la taille de la mémoire virtuelle, la taille du cache et la vitesse du bus frontal d'un système Linux? Le swap sous Linux est-il identique à la mémoire virtuelle?


2
swap == mémoire virtuelle
Joakim Elofsson

Veuillez donner les spécifications de votre CPU. Ouvrez le bios depuis le démarrage de votre système pour déterminer le FSB de votre CPU. Ou recherchez simplement le modèle de votre CPU sur Google. Si vous avez un PC de bureau, vous pouvez ouvrir le boîtier et regarder directement le processeur pour trouver le modèle.
Jonno_FTW

5
Non, le swap et la mémoire virtuelle sont complètement différents. Par exemple, le mappage de la mémoire d'un fichier de 1 Go utilise 1 Go supplémentaire de mémoire virtuelle mais n'a aucun changement dans l'utilisation du swap. Le swap est une forme de magasin de sauvegarde. De nombreuses utilisations de la mémoire virtuelle n'ont rien à voir avec le stockage de sauvegarde. (Et il y a eu des systèmes avec mémoire virtuelle et pas de swap ainsi que des systèmes avec swap mais pas de mémoire virtuelle.)
David Schwartz

Mémoire virtuelle = mémoire physique + espace d'échange
Pratik Khadloya

Réponses:


11

Cette question est entièrement contenue dans votre question précédente Comment trouver la taille de la mémoire virtuelle et la taille du cache d'un système Linux? . Comme indiqué dans ma réponse à cette question, la sudo dmidecode --type processorcommande vous donne la vitesse "Horloge externe", et la vitesse FSB est un multiple (généralement 2 ou 4 fois) de cette vitesse.

Si cela ne fonctionne pas pour vous, vous devez modifier votre question d'origine et nous dire quelle sortie vous avez obtenue ou quelle était l'erreur. Plus vous êtes précis, mieux les autres peuvent vous aider.

Comme le souligne The Journeyman geek, vous pouvez généralement obtenir la même mesure "External Clock" à partir lshwde la valeur indiquée pour "clock" dans la sortie liée au processeur.

 *-cpu
      description: CPU
      product: Genuine Intel(R) CPU           T2300  @ 1.66GHz
      vendor: Intel Corp.
      physical id: 400
      bus info: cpu@0
      version: 6.14.8
      serial: 0000-06E8-0000-0000-0000-0000
      slot: Microprocessor
      size: 1GHz
      capacity: 1800MHz
      width: 32 bits
      clock: 133MHz
      capabilities: fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx constant_tsc arch_perfmon bts pni monitor est tm2 xtpr pdcm cpufreq
      configuration: id=0

Enfin, vous pouvez trouver la vitesse d'horloge externe dans la sortie de dmesg, bien que ce ne soit en aucun cas un moyen standard d'accéder à ces informations. Vous pouvez trouver la vitesse du FSB via les paramètres de votre BIOS ou en recherchant les spécifications de votre processeur, bien que celles-ci ne soient pas spécifiques à Linux.


dmidecodene fonctionne que sur x86. Les processeurs ARM n'ont pas la commande et retournent souvent des valeurs inutiles, comme BogMIPS incorrect.
2016 à 2h13

1
Je suis un peu confus quant à la façon dont cela a été accepté. Il semble que cela ne réponde qu'à une partie de la question
Gi0rgi0s

Pourquoi est-ce la réponse acceptée? il n'indique pas comment déterminer la taille de la mémoire virtuelle.
JWW

10

Oui, le swap est de la mémoire virtuelle.

Taille de la mémoire virtuelle Utilisez swapon -s ou gratuit

$ swapon -s
Filename                Type        Size    Used    Priority
/dev/sda6                               partition   1004020 39620   -1

$ free
             total       used       free     shared    buffers     cached
Mem:       3087892    2879036     208856          0     394288     835052
-/+ buffers/cache:    1649696    1438196
Swap:      1004020      39620     964400

Taille du cache Obtenez ce de / proc / cpuinfo . Le champ " taille du cache " vous donne le cache sur le CPU. Sur les machines multicœurs, vous verrez une entrée par processeur, avec sa propre valeur de cache.

$ cat /proc/cpuinfo
processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 14
model name  : Genuine Intel(R) CPU           T2300  @ 1.66GHz
stepping    : 8
cpu MHz     : 1000.000
cache size  : 2048 KB
physical id : 0
siblings    : 2
core id     : 0
cpu cores   : 2
apicid      : 0
initial apicid  : 0
fdiv_bug    : no
hlt_bug     : no
f00f_bug    : no
coma_bug    : no
fpu     : yes
fpu_exception   : yes
cpuid level : 10
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx constant_tsc arch_perfmon bts pni monitor est tm2 xtpr pdcm
bogomips    : 3324.64
clflush size    : 64
power management:

Vitesse du bus frontal (FSB) Vous pouvez l'obtenir à partir de l' utilitaire dmidecode , avec l' argument du processeur --type . Vous avez besoin de l'autorisation sudo pour exécuter cette commande. Le FSB est indiqué par la vitesse indiquée pour " Horloge externe ". La vitesse réelle est généralement 4 fois la vitesse indiquée, car ces nombreuses instructions sont exécutées par cycle d'horloge.

$ sudo dmidecode --type processor
# dmidecode 2.9
SMBIOS 2.4 present.

Handle 0x0400, DMI type 4, 32 bytes
Processor Information

Socket Designation: Microprocessor
Type: Central Processor
Family: Pentium M
Manufacturer: Intel
ID: E8 06 00 00 FF FB E9 BF
Signature: Type 0, Family 6, Model 14, Stepping 8
Flags:
    FPU (Floating-point unit on-chip)
    VME (Virtual mode extension)
    DE (Debugging extension)
    PSE (Page size extension)
    TSC (Time stamp counter)
    MSR (Model specific registers)
    PAE (Physical address extension)
    MCE (Machine check exception)
    CX8 (CMPXCHG8 instruction supported)
    APIC (On-chip APIC hardware supported)
    SEP (Fast system call)
    MTRR (Memory type range registers)
    PGE (Page global enable)
    MCA (Machine check architecture)
    CMOV (Conditional move instruction supported)
    PAT (Page attribute table)
    CLFSH (CLFLUSH instruction supported)
    DS (Debug store)
    ACPI (ACPI supported)
    MMX (MMX technology supported)
    FXSR (Fast floating-point save and restore)
    SSE (Streaming SIMD extensions)
    SSE2 (Streaming SIMD extensions 2)
    SS (Self-snoop)
    HTT (Hyper-threading technology)
    TM (Thermal monitor supported)
    PBE (Pending break enabled)
Version: Not Specified
Voltage: 3.3 V
External Clock: 133 MHz
Max Speed: 1800 MHz
Current Speed: 1000 MHz
Status: Populated, Enabled
Upgrade: None
L1 Cache Handle: 0x0700
L2 Cache Handle: 0x0701
L3 Cache Handle: Not Provided

J'ai linux, il n'a pas de commande dmidecode / lshw
ananas

Quelle distribution utilisez-vous?

De plus, avez-vous un accès sudo pour exécuter ces commandes sur la machine?

le format de sortie de swapon -s est désormais obsolète. Utilisez plutôt swapon --show
Waruna Ranasinghe

3

Je crois que lshw a cette information. Cependant, toutes les distributions ne l'ont pas (indice - la prochaine fois S'IL VOUS PLAÎT, mentionnez la distribution et la version que vous utilisez. Cela aide beaucoup. Aide également à être précis sur ce que vous avez fait jusqu'à présent. 'Une commande comme' n'est pas assez bonne)


3

Essayez ceci sur la machine Linux: cat /proc/pal/cpu0/cache_info

Cela montrera quelque chose comme:

Cache levels  : 3
Unique caches : 5

Data Cache level 1:
        Size           : 16384 bytes
        Attributes     : WriteThrough
        Associativity  : 4
        Line size      : 64 bytes
        Stride         : 128 bytes
        Store latency  : 0 cycle(s)
        Load latency   : 1 cycle(s)
        Store hints    :
        Load hints     : [Temporal, level 1]
        Alias boundary : 4096 byte(s)
        Tag LSB        : 12
        Tag MSB        : 49
Instruction Cache level 1:
        Size           : 16384 bytes
        Attributes     :
        Associativity  : 4
        Line size      : 64 bytes
        Stride         : 128 bytes
        Store latency  : N/A
        Load latency   : 1 cycle(s)
        Store hints    :
        Load hints     : [Temporal, level 1]
        Alias boundary : 4096 byte(s)
        Tag LSB        : 12
        Tag MSB        : 49
Data Cache level 2:
        Size           : 262144 bytes
        Attributes     : WriteBack
        Associativity  : 8
        Line size      : 128 bytes
        Stride         : 128 bytes
        Store latency  : 7 cycle(s)
        Load latency   : 5 cycle(s)
        Store hints    : [Temporal, level 1][Non-temporal, all levels]
        Load hints     : [Temporal, level 1][Non-temporal, level 1][Non-temporal, all levels]
        Alias boundary : 4096 byte(s)
        Tag LSB        : 15
        Tag MSB        : 49
Instruction Cache level 2:
        Size           : 524288 bytes
        Attributes     :
        Associativity  : 8
        Line size      : 128 bytes
        Stride         : 128 bytes
        Store latency  : N/A
        Load latency   : 7 cycle(s)
        Store hints    :
        Load hints     : [Temporal, level 1][Non-temporal, level 1][Non-temporal, all levels]
        Alias boundary : 4096 byte(s)
        Tag LSB        : 16
        Tag MSB        : 49
Data/Instruction Cache level 3:
        Size           : 4194304 bytes
        Attributes     : Unified WriteBack
        Associativity  : 8
        Line size      : 128 bytes
        Stride         : 128 bytes
        Store latency  : 7 cycle(s)
        Load latency   : 14 cycle(s)
        Store hints    : [Temporal, level 1]
        Load hints     : [Temporal, level 1][Non-temporal, level 1]
        Alias boundary : 4096 byte(s)
        Tag LSB        : 19
        Tag MSB        : 49

3

Essayez ulimit -a, sur ma machine, il affichera quelque chose comme:

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 31321
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 31321
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Exécutez free, sur ma machine, le résultat est le suivant:

             total       used       free     shared    buffers     cached
Mem:       4024900     606472    3418428          0      85768     366980
-/+ buffers/cache:     153724    3871176
Swap:      3998716          0    3998716

J'ai écrit ce code pour tester le nombre de threads qu'un processus peut créer:

#include<iostream>
#include<pthread.h>
#include<unistd.h>
#include<stdio.h>
using namespace std;

#define MAX_THREAD_NUM 1100
void * threadTest(void* arg){
        while(true){
                sleep(5);
        }
        pthread_exit(NULL);
}

int main(){
        for(int i = 0;i< MAX_THREAD_NUM;i++){
                pthread_t tid;
                cout<<"create thread "<< i <<"... "<<endl;
                int ret = pthread_create(&tid,NULL,&threadTest,NULL);
                if(ret !=0){
                        perror("pthread_create error");
                }
                pthread_detach(tid);
        }
        while(true){
                sleep(5);
        }
        return 0;

}

Le résultat est comme ceci:

create thread 378...
create thread 379...
create thread 380...
create thread 381...
create thread 382...
pthread_create error: Cannot allocate memory
create thread 383...
pthread_create error: Cannot allocate memory
create thread 384...
pthread_create error: Cannot allocate memory
create thread 385...
pthread_create error: Cannot allocate memory
create thread 386...
pthread_create error: Cannot allocate memory

2

vmstat

Les rapports vmstat rapportent des statistiques de mémoire virtuelle, qui contiennent des informations sur les processus, swap, free, buffer et cache memory, paging space, disk IO activity, traps, interrupts, context switches and CPU activity. Avec la commande vmstat, les administrateurs peuvent avoir des rapports instantanés sur l'utilisation de la mémoire.

Syntaxe de vmstat

vmstat -[options] [delay count]

Exemple d'utilisation de vmstat

vmstat

Trouvé ici


1 place, mieux que ma solution: D, donne plus d'informations
monkey_p

2

La commande "free" vous montrera l'utilisation de la mémoire, y compris ce qui est réellement utilisé par rapport à ce qui est dans les tampons / cache.

    # free
             total       used       free     shared    buffers     cached
Mem:       3896252    3779044     117208          0      65788    1363972
-/+ buffers/cache:    2349284    1546968
Swap:      2097144     886836    1210308

La commande "dmidecode" peut vous donner un aperçu de la vitesse du FSB.


0
swapon -s

Le champ utilisé indiquera le montant actuellement utilisé

Filename      Type           Size       Used    Priority
/dev/sda5     partition      859436     0       -1

-1

Taille de la page :

$ getconf PAGESIZE

(ou)

$ getconf PAGE_SIZE

Essayer

swapinfo or swapinfo -a 
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.