Linux sisteminin sanal bellek ve önbellek boyutu nasıl bulunur?


11

Linux sisteminin sanal bellek boyutunu, önbellek boyutunu ve ön veri yolu hızını almak için herhangi bir komut var mı? Linux'ta takas sanal bellek ile aynı mıdır?


2
takas == sanal bellek
Joakim Elofsson

Lütfen CPU'nuzun özelliklerini belirtin. CPU'nuzun FSB'sini belirlemek için sisteminizin başlangıcından itibaren bios'u açın. Veya sadece CPU modelinizi google. Bir masaüstü bilgisayarınız varsa, kasayı açabilir ve modeli bulmak için doğrudan cpu'ya bakabilirsiniz.
Jonno_FTW

5
Hayır, takas ve sanal bellek tamamen farklıdır. Örneğin, 1GB'lık bir dosyanın bellek eşlemesi ek 1GB'lık bir sanal bellek kullanır, ancak takas kullanımında bir değişiklik olmaz. Takas, bir destek mağazasının bir şeklidir. Sanal belleğin birçok kullanımının destek deposuyla ilgisi yoktur. (Ve sanal bellek ve takas olmayan sistemler olduğu gibi takas ancak sanal bellek olmayan sistemler de vardır.)
David Schwartz

Sanal Bellek = Fiziksel Bellek + Takas Alanı
Pratik Khadloya

Yanıtlar:


11

Bu soru tamamen önceki sorunuzda bulunmaktadır Bir linux sisteminin sanal bellek boyutu ve önbellek boyutu nasıl bulunur? . Bu soruya cevabımda belirtildiği gibi , sudo dmidecode --type processorkomut size "Harici Saat" hızını verir ve FSB hızı, bu hızın bir katıdır (genellikle 2 veya 4 kez).

Bu sizin için işe yaramadıysa, orijinal sorunuzu düzenlemeli ve bize hangi çıktıyı aldığınızı veya hatanın ne olduğunu söylemelisiniz. Ne kadar spesifik olursanız, diğerleri size daha iyi yardımcı olabilir.

The Journeyman geek'in işaret ettiği gibi lshw, cpu ile ilgili çıkışta "clock" için bildirilen değerde genellikle aynı "External Clock" ölçüsünü alabilirsiniz .

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

Son olarak, harici saat hızını çıkışında bulabilirsiniz dmesg, ancak bu hiçbir şekilde bu bilgilere erişmenin standart bir yolu değildir. FSB hızını BIOS ayarlarınız aracılığıyla veya CPU spesifikasyonunuza bakarak bulabilirsiniz, ancak bunlar Linux'a özgü değildir.


dmidecodesadece x86 üzerinde çalışır. ARM işlemcilerin komutu yoktur ve yanlış BogMIPS gibi genellikle işe yaramaz değerler döndürür.
jww

1
Bunun nasıl kabul edildiği konusunda biraz kafam karıştı. Görünüşe göre sorunun sadece bir kısmını cevapladı
Gi0rgi0s

Bu neden kabul edilen cevap? sanal bellek boyutunun nasıl belirleneceğini belirtmez.
jww

10

Evet, takas sanal bellektir.

Sanal bellek boyutu Takas veya ücretsiz kullanın

$ 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

Önbellek boyutu Bunu / proc / cpuinfo sitesinden alın . " Önbellek boyutu " alanı size CPU'daki önbelleği verir. Çok çekirdekli makinelerde, işlemci başına kendi önbellek değerine sahip bir giriş görürsünüz.

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

Ön taraf veri yolu (FSB) hızı Bunu --type işlemci bağımsız değişkeni ile dmidecode yardımcı programından alabilirsiniz . Bu komutu çalıştırmak için sudo iznine ihtiyacınız var. FSB, " Harici Saat " için bildirilen hız ile gösterilir . Gerçek hız tipik olarak raporlanan hızın 4 katıdır, çünkü saat döngüsü başına bu kadar çok komut yürütülür.

$ 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

Linux'um var, dmidecode / lshw komutu yok
ananas

Hangi dağıtımı yapıyorsunuz?

Ayrıca, bu komutları makinede çalıştırmak için sudo erişiminiz var mı?

swapon -s çıktı biçimi artık kullanımdan kaldırıldı. Bunun yerine swapon
show

3

Ben lshw bu bilgiye sahip olduğuna inanıyorum. Ancak tüm dağıtımlar buna sahip değildir (bir dahaki sefere LÜTFEN hangi dağıtım ve sürümü kullandığınızı belirtin.


3

Bunu Linux makinesinde deneyin: cat /proc/pal/cpu0/cache_info

Bu şöyle bir şey gösterecektir:

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

Deneyin ulimit -a, makinemde şöyle bir şey gösterilecek:

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

Çalıştır free, makinemde sonuç şöyle:

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

Bir işlemin kaç tane iş parçacığı oluşturabileceğini sınamak için bu kodu yazdım:

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

}

Sonuç şöyledir:

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

vmstat raporları, işlemler, takas, boş, arabellek ve önbellek, disk belleği alanı, disk G / Ç etkinliği, tuzaklar, kesmeler, bağlam anahtarları ve CPU etkinliği hakkında bilgi içeren sanal bellek istatistiklerini raporlar. Vmstat komutuyla yöneticilerin bellek kullanımı hakkında anlık raporları olabilir.

Vmstat sözdizimi

vmstat -[options] [delay count]

Vmstat örneği kullanımı

vmstat

Burada bulundu


1 yukarı, benim
çözümümden

2

"Free" komutu, gerçekte kullanılanlar ve tamponlar / önbellekdekiler de dahil olmak üzere bellek kullanımını gösterir .

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

"Dmidecode" komutu size FSB hızı hakkında bir fikir verebilir.


0
swapon -s

Kullanılan alan, kullanımda olan miktarı gösterir

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

-1

Sayfa boyutu :

$ getconf PAGESIZE

(veya)

$ getconf PAGE_SIZE

Deneyin

swapinfo or swapinfo -a 
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.