Come trovare la dimensione della memoria virtuale e la dimensione della cache di un sistema Linux?


11

Esiste un comando per ottenere la dimensione della memoria virtuale, la dimensione della cache e la velocità del bus frontale di un sistema Linux? Lo swap in linux è uguale alla memoria virtuale?


2
swap == memoria virtuale
Joakim Elofsson

Fornisci le specifiche della tua CPU. Apri il BIOS dall'avvio del sistema per determinare l'FSB della tua CPU. O semplicemente google il modello della tua CPU. Se hai un PC desktop, puoi aprire il case e guardare direttamente la cpu per trovare il modello.
Jonno_FTW,

5
No, lo scambio e la memoria virtuale sono completamente diversi. Ad esempio, la mappatura della memoria di un file da 1 GB utilizza un ulteriore 1 GB di memoria virtuale ma non ha alcun cambiamento nell'uso di swap. Lo swap è una forma di negozio di supporto. Molti usi della memoria virtuale non hanno nulla a che fare con l'archivio di backup. (E ci sono stati sistemi con memoria virtuale e senza scambio, nonché sistemi con scambio ma senza memoria virtuale.)
David Schwartz

Memoria virtuale = memoria fisica + spazio di scambio
Pratik Khadloya,

Risposte:


11

Questa domanda è completamente contenuta nella domanda precedente Come trovare la dimensione della memoria virtuale e la dimensione della cache di un sistema Linux? . Come indicato nella mia risposta a questa domanda, il sudo dmidecode --type processorcomando fornisce la velocità "Clock esterno" e la velocità dell'FSB è un multiplo (in genere 2 o 4 volte) di questa velocità.

Se questo non ha funzionato per te, dovresti modificare la domanda originale e comunicarci quale output hai ottenuto o qual è stato l'errore. Più sei specifico, meglio gli altri possono aiutarti.

Come sottolineato da The Journeyman geek, in genere è possibile ottenere la stessa misura "External Clock" da lshw, nel valore riportato per "clock" nell'output relativo alla CPU.

 *-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

Infine, potresti trovare la velocità di clock esterna nell'output di dmesg, sebbene questo non sia affatto un modo standard per accedere a queste informazioni. È possibile trovare la velocità di FSB tramite le impostazioni del BIOS o cercando le specifiche della CPU, sebbene non siano specifiche di Linux.


dmidecodefunziona solo su x86. I processori ARM non hanno il comando e spesso restituiscono valori inutili, come BogMIPS errato.
jww

1
Sono un po 'confuso su come questo è stato accettato. Sembra che risponda solo a una parte della domanda
Gi0rgi0s

Perché questa è la risposta accettata? non indica come determinare la dimensione della memoria virtuale.
jww

10

Sì, lo swap è memoria virtuale.

Dimensione della memoria virtuale Usa swapon -s o gratis

$ 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

Dimensione della cache Ottieni questo da / proc / cpuinfo . Il campo " dimensione cache " fornisce la cache sulla CPU. Su macchine multi-core, vedrai una voce per processore, con il suo valore di 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:

Velocità bus lato anteriore (FSB) È possibile ottenerlo dall'utilità dmidecode , con l' argomento del processore --type . È necessario il permesso sudo per eseguire questo comando. L'FSB è indicato dalla velocità indicata per " Clock esterno ". La velocità effettiva è in genere 4 volte la velocità riportata, poiché vengono eseguite molte istruzioni per ciclo di clock.

$ 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

Ho Linux, non ha il comando dmidecode / lshw
pineapple

Quale distro stai correndo?

Inoltre, hai accesso sudo per eseguire questi comandi sulla macchina?

Il formato di output di swapon è ora obsoleto. Invece usa swapon --show
Waruna Ranasinghe il

3

Credo che lshw abbia queste informazioni. Tuttavia non tutte le distribuzioni lo hanno (suggerimento- la prossima volta PER FAVORE menziona quale distro e versione usi. Aiuta molto. Inoltre aiuta ad essere specifico su ciò che hai fatto finora. 'Alcuni comandi come' non sono abbastanza buoni)


3

Prova questo sul computer Linux: cat /proc/pal/cpu0/cache_info

Questo mostrerà qualcosa di simile:

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

Prova ulimit -a, sulla mia macchina mostrerà qualcosa del tipo:

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

Esegui free, sulla mia macchina il risultato è così:

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

Ho scritto questo codice per verificare quanti thread può creare un processo:

#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;

}

Il risultato è così:

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

I rapporti vmstat riportano statistiche sulla memoria virtuale, che contiene informazioni su processi, scambio, memoria di buffer e cache libera, spazio di paginazione, attività di I / O del disco, trap, interruzioni, switch di contesto e attività della CPU. Con il comando vmstat, gli amministratori possono disporre di rapporti istantanei sull'utilizzo della memoria.

Sintassi di vmstat

vmstat -[options] [delay count]

Esempio di utilizzo di vmstat

vmstat

Trovato qui


1 in su, meglio della mia soluzione: D, fornisce maggiori informazioni
monkey_p

2

Il comando "gratuito" mostrerà l'utilizzo della memoria, incluso ciò che viene effettivamente utilizzato rispetto a ciò che è in buffer / cache.

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

Il comando "dmidecode" potrebbe darti un'idea della velocità di FSB.


0
swapon -s

Il campo utilizzato indicherà l'importo attualmente in uso

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

-1

Dimensioni della pagina :

$ getconf PAGESIZE

(o)

$ getconf PAGE_SIZE

Provare

swapinfo or swapinfo -a 
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.