##1. STREAM##
STREAM 是业界广为流行的综合性内存带宽实际性能 测量 工具之一。随着处理器处理核心数量的增多,内存带宽对于提升整个系统性能越发重要,如果某个系统不能够足够迅速地将内存中的数据传输到处理器当中,若干处理核心就会处于等待数据的闲置状态,而这其中所产生的闲置时间不仅会降低系统的效率还会抵消多核心和高主频所带来的性能提升因素。 STREAM 具有良好的空间局部性,是对 TLB 友好、Cache友好的一款测试。STREAM支持Copy 、Scale 、 Add、 Triad四种操作。
http://www.cs.virginia.edu/stream/stream2
tar -xvf stream
cd stream &&make
numactl -m 0 ./stream_c.exe
http://www.cs.virginia.edu/stream/FTP/Code/
http://blog.csdn.net/maray/article/details/6230912
LMbench 是一个使用 GPL 许可证发布的的免费和开源的自由软件。主要关注两个方面:带宽(bandwidth)和延迟(latency)。它还包含了很多简单的基准测试,覆盖了文档读写、内存操作、管道、系统调用、上下文切换、进程创建和销毁、网络等多方面的性能测试。由于是开源的,我们可以对其进行修改。
Bandwidth benchmarks
Latency benchmarks
Context switching. Networking: connection establishment, pipe, TCP, UDP, and RPC hot potato File system creates and deletes. Process creation. Signal handling System call overhead Memory read latency
Miscellanious
Processor clock rate calculation
http://www.bitmover.com/lmbench/
下载 https://sourceforge.net/projects/lmbench/
编译 make
执行默认测试 make results
查看测试结果
LMbench 根据配置文档执行完所需要的测试项之后,在results 目录下根据系统类型、系统名和操作系统类型等生成一个子目录,测试结果文档
按照“主机名+序列”的命令方式存放于该目录下,运行下面命令可以查看测试结果报告及其说明
make see
你也可以将两次测试结果放在一个地方,然后执行上面的命令可以查看比较的结果。
ps_mem 是一个可以帮助我们精准获取 Linux 中各个程序核心内存使用情况的简单 python 脚本。这个工具和其它的区别在于其精确显示核心内存使用情况。
redhat:
yum install ps_mem
source install
git clone https://github.com/pixelb/ps_mem.git && cd ps_mem
python ps_mem.py
$ ps_mem
$ ps_mem --help
ps_mem.py - Show process memory usage
-h Show this help
-w <N> Measure and show process memory every N seconds
-p <pid>[,pid2,...pidN] Only show memory usage PIDs in the specified list
-s, --show-cmdline Show complete program path with options
内核编译是一个比较综合的性能评测工具,它广为 Linux 开发者和开源的 VMM 开发者采用。这种方法即对处理器敏感也对内存和硬盘读写敏感。因此,在实践中,内核编译既被用来做内存虚拟化的性能评测工具,也被用作硬盘虚拟化的性能评测工具。
perf cpu 这篇文章中已经提了,这里不再叙述。
[root@vt-nfs kvm_blog]# free -m
total used free shared buff/cache available
Mem: 15886 1383 174 599 14328 13512
Swap: 8191 694 7497
第一行的信息(我们可以认为从操作系统层面看待)
total:总物理内存大小
used:已经分配的大小
free:没有被分配的大小
shared:共享内存的大小,主要用于IPC通信
buffers:用于块设备的缓冲
cached:用于文件内容缓冲,也就是缓存
“缓存”就是在内存中划分一块区域,作为进程和硬盘之间的缓冲区,进程将数据写入缓存中,当那些数据需要读取的时候,就直接去”高速路”缓存中读取,而不会去”土路”硬盘中读取,这样大大的加快性能
这里buffer实际上是存储了我们数据的元数据(包括目录名字,文件大小,文件存储块,修改时间,权限等),而cache则存放了我们最近读取过的文件。
第三行信息(我们可以认为从应用程序层面看待)
这里的-/+ buffers/cache分别为 -buffers/cache 和 +buffers/cache 两部分
-buffers/cache = used(第一行)-buffers-cached 实际上是当前程序上”真实使用”的”物理内存”
+buffers/cache = buffers+cached 意思就是暂时”借给”系统作为”缓冲区”使用的内存大小
used=(+buffers/cached)+(-buffers/cached)
所以从应用程序层面看,可用内存=free memory+buffers+cached
详细信息我们可以通过下面这种方式查看.
~ cat /proc/meminfo
MemTotal: 1020128 kB
MemFree: 670772 kB
Buffers: 97780 kB
Cached: 100980 kB
SwapCached: 0 kB
Active: 164988 kB
Inactive: 117296 kB
Active(anon): 83536 kB
Inactive(anon): 160 kB
Active(file): 81452 kB
Inactive(file): 117136 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 92 kB
Writeback: 0 kB
AnonPages: 83504 kB
Mapped: 17500 kB
Shmem: 172 kB
Slab: 46696 kB
SReclaimable: 28652 kB
SUnreclaim: 18044 kB
KernelStack: 1744 kB
PageTables: 2636 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 510064 kB
Committed_AS: 343800 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 7112 kB
VmallocChunk: 34359727304 kB
HardwareCorrupted: 0 kB
AnonHugePages: 36864 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 8184 kB
DirectMap2M: 1040384 kB