¿Cómo encontrar el tamaño de memoria virtual y el tamaño de caché de un sistema Linux?

11

¿Hay algún comando para obtener el tamaño de memoria virtual, el tamaño de caché y la velocidad del bus frontal de un sistema Linux? ¿Es el intercambio en Linux igual que la memoria virtual?

piña
fuente
2
swap == memoria virtual
Joakim Elofsson
Indique las especificaciones de su CPU. Abra la BIOS desde el inicio de su sistema para determinar el FSB de su CPU. O simplemente busca en Google el modelo de tu CPU. Si tiene una PC de escritorio, puede abrir la carcasa y mirar la CPU directamente para encontrar el modelo.
Jonno_FTW
55
No, el intercambio y la memoria virtual son completamente diferentes. Por ejemplo, la asignación de memoria de un archivo de 1 GB utiliza 1 GB adicional de memoria virtual pero no cambia el uso del intercambio. Swap es una forma de tienda de respaldo. Muchos usos de la memoria virtual no tienen nada que ver con la tienda de respaldo. (Y ha habido sistemas con memoria virtual y sin intercambio, así como sistemas con intercambio pero sin memoria virtual.)
David Schwartz
Memoria virtual = Memoria física + Espacio de intercambio
Pratik Khadloya

Respuestas:

11

Esta pregunta está completamente contenida en su pregunta anterior ¿ Cómo encontrar el tamaño de memoria virtual y el tamaño de caché de un sistema Linux? . Como señalé en mi respuesta a esa pregunta, el sudo dmidecode --type processorcomando te da la velocidad del "reloj externo", y la velocidad del FSB es un múltiplo (típicamente 2 o 4 veces) de esta velocidad.

Si esto no funcionó para usted, debe editar su pregunta original y decirnos qué resultado obtuvo o cuál fue el error. Cuanto más específico seas, mejor te ayudarán los demás.

Como señaló The Journeyman geek, normalmente puede obtener la misma medida de "Reloj externo" lshw, en el valor informado para "reloj" en la salida relacionada con la 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

Finalmente, puede encontrar la velocidad del reloj externo en la salida de dmesg, aunque de ninguna manera es una forma estándar de acceder a esta información. Puede encontrar la velocidad FSB a través de la configuración de su BIOS, o al buscar las especificaciones de su CPU, aunque no son específicas de Linux.

Comunidad
fuente
dmidecodesolo funciona en x86. Los procesadores ARM no tienen el comando, y a menudo devuelven valores inútiles, como BogMIPS incorrecto.
jww
1
Estoy un poco confundido sobre cómo se aceptó esto. Parece que solo responde parte de la pregunta
Gi0rgi0s
¿Por qué es esta la respuesta aceptada? no indica cómo determinar el tamaño de la memoria virtual.
jww
10

Sí, el intercambio es memoria virtual.

Tamaño de memoria virtual Use 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

Tamaño de caché Obtenga esto de / proc / cpuinfo . El campo " tamaño de caché " le proporciona el caché en la CPU. En las máquinas multinúcleo, verá una entrada por procesador, con su propio valor de caché.

$ 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:

Velocidad del bus frontal (FSB) Puede obtener esto de la utilidad dmidecode , con el argumento del procesador de tipo . Necesita permiso de sudo para ejecutar este comando. El FSB se indica mediante la velocidad informada para " Reloj externo ". La velocidad real es típicamente 4 veces la velocidad reportada, ya que esas muchas instrucciones se ejecutan por ciclo de reloj.

$ 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

fuente
Tengo Linux, no tiene el comando dmidecode / lshw
pineapple
¿Qué distribución estás ejecutando?
Además, ¿tiene acceso sudo para ejecutar estos comandos en la máquina?
El formato de salida swapon -s ahora está en desuso. En su lugar, use swapon --show
Waruna Ranasinghe
3

Creo que lshw tiene esa información. Sin embargo, no todas las distribuciones lo tienen (pista: la próxima vez POR FAVOR, mencione qué distribución y versión usa. Ayuda mucho. También ayuda a ser específico sobre lo que hizo hasta ahora. 'Algún comando como' no es lo suficientemente bueno)

Journeyman Geek
fuente
3

Pruebe esto en la máquina Linux: cat /proc/pal/cpu0/cache_info

Esto mostrará algo como:

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
Tom
fuente
3

Intente ulimit -a, en mi máquina mostrará algo como:

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

Ejecutar free, en mi máquina el resultado es así:

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

Escribí este código para probar cuántos hilos puede crear un proceso:

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

}

El resultado es así:

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
sunpy
fuente
2

vmstat

Los informes vmstat informan estadísticas de memoria virtual, que tiene información sobre procesos, intercambio, libre, memoria intermedia y memoria caché, espacio de paginación, actividad de E / S del disco, trampas, interrupciones, cambios de contexto y actividad de la CPU. Con el comando vmstat, los administradores pueden tener informes instantáneos sobre el uso de la memoria.

Sintaxis de vmstat

vmstat -[options] [delay count]

Ejemplo de uso de vmstat

vmstat

Encontrado aquí

joe
fuente
1 arriba, mejor que mi solución: D, da más información
monkey_p
2

El comando "gratis" le mostrará la utilización de la memoria, incluido lo que realmente se está utilizando frente a lo que está en las memorias intermedias / caché.

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

El comando "dmidecode" puede darle una idea de la velocidad del FSB.

perlguy9
fuente
0
swapon -s

El campo usado indicará la cantidad actualmente en uso

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

Tamaño de página :

$ getconf PAGESIZE

(o)

$ getconf PAGE_SIZE

Tratar

swapinfo or swapinfo -a 
joe
fuente