Como encontrar o tamanho da memória virtual e o tamanho do cache de um sistema Linux?

11

Existe algum comando para obter o tamanho da memória virtual, o tamanho do cache e a velocidade do barramento frontal de um sistema Linux? A troca no linux é igual à memória virtual?

abacaxi
fonte
2
swap == memória virtual #
Joakim Elofsson
Por favor, dê as especificações da sua CPU. Abra o BIOS da inicialização do seu sistema para determinar o FSB da sua CPU. Ou apenas pesquise no Google o modelo da sua CPU. Se você possui um PC de mesa, pode abrir o gabinete e olhar diretamente para a CPU para encontrar o modelo.
Jonno_FTW
5
Não, a troca e a memória virtual são completamente diferentes. Por exemplo, o mapeamento de memória de um arquivo de 1 GB usa 1 GB adicional de memória virtual, mas não altera o uso de troca. Swap é uma forma de loja de apoio. Muitos usos da memória virtual não têm nada a ver com o armazenamento de backup. (E tem havido sistemas com memória virtual e nenhuma troca, bem como sistemas com troca, mas sem memória virtual.)
David Schwartz
Memória virtual = memória física + espaço de troca
Pratik Khadloya

Respostas:

11

Esta questão está completamente contida na sua pergunta anterior Como encontrar o tamanho da memória virtual e o tamanho do cache de um sistema Linux? . Conforme apontado na minha resposta a essa pergunta, o sudo dmidecode --type processorcomando fornece a velocidade do "Relógio externo" e a velocidade do FSB é uma multiplicidade (normalmente 2 ou 4 vezes) dessa velocidade.

Se isso não funcionar para você, edite sua pergunta original e informe-nos qual foi a saída obtida ou qual foi o erro. Quanto mais específico você for, melhor os outros poderão ajudá-lo.

Conforme apontado pelo geek do The Journeyman, normalmente você pode obter a mesma medida de "Relógio externo" lshwno valor relatado para "relógio" na saída relacionada à 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, você pode encontrar a velocidade do relógio externo na saída de dmesg, embora essa não seja a maneira padrão de acessar essas informações. Você pode encontrar a velocidade do FSB através das configurações do BIOS ou consultando as especificações da CPU, embora elas não sejam específicas do Linux.

Comunidade
fonte
dmidecodesó funciona em x86. Os processadores ARM não têm o comando e geralmente retornam valores inúteis, como BogMIPS incorreto.
JWW
1
Estou um pouco confuso sobre como isso foi aceito. Parece que ele só responde parte da pergunta
Gi0rgi0s
Por que essa é a resposta aceita? não indica como determinar o tamanho da memória virtual.
JWW
10

Sim, swap é memória virtual.

Tamanho da memória virtual Use swapon -s ou free

$ 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

Tamanho do cache Obtenha isso em / proc / cpuinfo . O campo " tamanho do cache " fornece o cache na CPU. Em máquinas com vários núcleos, você verá uma entrada por processador, com seu próprio valor 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:

Velocidade do barramento frontal (FSB) Você pode obter isso no utilitário dmidecode , com o argumento do processador --type . Você precisa de permissão sudo para executar este comando. O FSB é indicado pela velocidade relatada para " Relógio externo ". A velocidade real é tipicamente 4 vezes a velocidade relatada, pois muitas instruções são executadas por ciclo de 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

fonte
Eu tenho linux, ele não tem dmidecode / lshw comando
abacaxi
Qual distro você está executando?
Além disso, você tem acesso ao sudo para executar esses comandos na máquina?
O formato de saída swapon -s agora está obsoleto. Em vez disso, use swapon --show
Waruna Ranasinghe
3

Eu acredito que o lshw tem essa informação. No entanto, nem todas as distros o possuem (dica - da próxima vez, mencione qual distro e versão você usa. Ajuda muito. Também ajuda a ser específico sobre o que você fez até agora. 'Algum comando como' não é bom o suficiente)

Journeyman Geek
fonte
3

Tente isso na máquina Linux: cat /proc/pal/cpu0/cache_info

Isso 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
fonte
3

Tente ulimit -a, na minha máquina, ele 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

Corra free, na minha máquina o resultado é o seguinte:

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

Eu escrevi este código para testar quantos threads um processo pode criar:

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

}

O resultado é assim:

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
ensolarado
fonte
2

vmstat

Os relatórios vmstat relatam estatísticas de memória virtual, que contêm informações sobre processos, troca, livre, memória buffer e cache, espaço de paginação, atividade de E / S de disco, traps, interrupções, comutadores de contexto e atividade da CPU. Com o comando vmstat, os administradores podem ter relatórios instantâneos sobre o uso da memória.

Sintaxe de vmstat

vmstat -[options] [delay count]

Exemplo de uso de vmstat

vmstat

Encontrado aqui

Joe
fonte
1 para cima, melhor do que a minha solução: D, dá mais informações
monkey_p
2

O comando "free" mostra a utilização da memória, incluindo o que realmente está sendo usado versus o que está no buffer / cache.

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

O comando "dmidecode" pode fornecer algumas dicas sobre a velocidade do FSB.

perlguy9
fonte
0
swapon -s

O campo usado indicará a quantidade atualmente em uso

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

Tamanho da página :

$ getconf PAGESIZE

(ou)

$ getconf PAGE_SIZE

Tentar

swapinfo or swapinfo -a 
Joe
fonte