是否有命令可以获取 Linux 系统的虚拟内存大小、缓存大小和前端总线速度?Linux 中的交换区与虚拟内存相同吗?
答案1
这个问题完全包含在你之前的问题中如何查找 Linux 系统的虚拟内存大小和缓存大小?. 正如指出的我的答案对于这个问题,该sudo dmidecode --type processor
命令为您提供“外部时钟”速度,并且FSB 速度是(通常是这个速度的2倍或4倍)。
如果这对您不起作用,您应该编辑您的原始问题并告诉我们您得到了什么输出或错误是什么。您越具体,其他人就越能帮助您。
正如 The Journeyman geek 所指出的,您通常可以从中获得相同的“外部时钟”测量值lshw
,即在 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
最后,您可以在 的输出中找到外部时钟速度dmesg
,尽管这绝不是访问此信息的标准方式。您可以通过 BIOS 设置或查找 CPU 规格来找到 FSB 速度,尽管这些并不是 Linux 特有的。
答案2
是的,swap就是虚拟内存。
虚拟内存大小 使用swapon-s或者自由的
$ 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
缓存大小 获取来源/proc/cpu信息。 这 ”缓存大小“字段为您提供 CPU 上的缓存。在多核机器上,您将看到每个处理器一个条目,具有自己的缓存值。
$ 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:
前端总线 (FSB) 速度 您可以从解码实用程序,与--类型处理器参数。您需要 sudo 权限才能运行此命令。FSB 由报告的速度指示“外部时钟“。实际速度是通常报告速度为 4 倍,因为每个时钟周期都会执行许多指令。
$ 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
答案3
我相信 lshw 有这些信息。但是并非所有发行版都有这些信息(提示 - 下次请提及您使用的发行版和版本。这很有帮助。具体说明您到目前为止所做的事情也有帮助。“类似某些命令”还不够好)
答案4
尝试一下ulimit -a
,在我的计算机上它会显示类似这样的内容:
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
运行free
,在我的机器上结果是这样的:
total used free shared buffers cached
Mem: 4024900 606472 3418428 0 85768 366980
-/+ buffers/cache: 153724 3871176
Swap: 3998716 0 3998716
我编写了此代码来测试一个进程可以创建多少个线程:
#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;
}
结果是这样的:
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