Ⅰ 磁盘性能压测二三事之——性能参数和指标
摘要: 本文就将通过对磁盘性能测试指标及参数的介绍,来理解以上两个原因为什么会对测试结果有影响。
近日工作中遇到了一个磁盘压测时性能上不去的问题,经排查,发现原因有以下几个方面:
1 测试参数春渗的选择
2 业务逻辑未关闭
本文就将通过对磁盘性能测试指标及参数的介绍,来理解以上两个原因为什么会对测试结果有影响。
首先来介绍一下磁盘性能的测试指标。
最常用的磁盘性能评价指标有两个:IOPS和吞吐量(throughput)。IOPS是Input/Output Per Second的缩写,它表示单位时间内系统能处理的I/O请求数量,即每秒钟系统能处理的读写次数。
吞吐量衡量单位时间内系统能处理的数据的体量,即每秒钟磁盘上能读写出的数据量的大小,通常以kB/s或MB/s为单位。
两个指标相互独立,又相互关联,在不同业务场景下,侧重关注的指标也有所不同。
对于文件尺寸小,随机读写比较多的场合,比如在线交易处理系统,我们倾向于更关注IOPS,因为我们更在乎的是每秒钟能处理多少条交易。
而对于文件尺寸较大,顺序读写比较多的场合,比如视频播放服务,数据吞吐量将会成为我们主要的考量指标。
举个例子来帮助我们更好的理解这两个指标。磁盘IO就相当于我们有货物(数据)需要从A处(系统)与B处(磁盘)之间往返。货物(数据量)有多有少,因此运货车也有大有小。B处有装卸工人负责将货物卸载到仓库的指定位置,或者从仓库指定位置提取货物装载到货车上。
每次货车运输一趟货物就相当于处理一个IO请求,工人装卸货物就相当于磁盘对IO的读写处理。在工人数量和工人装卸货物速度(磁盘数据处理速度)保持一定的情况下,装卸大车上货物的时间一定会比小车上的时间长,装卸一大车货物的时间,可能已经够小车运输若干趟货物(IOPS高)。但是小车由于多次往返,其花在路上的时间要比大车多,同时每次装卸货物工人需要寻找正确的位置存取货物(磁盘寻址时间),比起大车的一次寻址,小车运货就也浪费了更多时间。因此在相同时间内,采用大车运输的货物总量是比小车要多的(吞吐量高)。
这也是为什么我们在做磁盘性能测试的时候,通常一次只关注一个指标,追求IOPS,就用小车运输少量货物,多次往返。追求吞吐量,就用大车运送大量货物,节省路上及寻址所花费的时间。
下面再说一下磁盘测试的影响因素。
实际测量中,IOPS会受到很多因素的影响,比如:
1 数据块大小
相当于我们前面说的大车和小车运货的情况
2 顺序和随机
顺序就是我们的货物都按顺序安排在仓库的一处,随机则意味着货物随机的分配在仓库的不同地点,可以想见,货物地点存放比较随机的情况下,存取货物一定是更费时间的。
3 队列深度
如果我们每次只发一辆货车在AB之间往返,那么当货车在A处处理货物或者在AB之间的路上跑的时候,B处的工人就处于闲置的状态,压力测试时,我们绝对不希望这种情况发生,我们需要工人(磁盘)一直工作,从而得出磁盘的最高性能。想实现这一点,我们可以通过一次发多辆车来解决,保持始终有车辆在等待处理的队伍里,这样装卸工人就一直有工作可做了。
队列深度就是等待处理的队伍里的货车以及正在被装卸的货车的总数量。
4 线程数
测试时,增加线程数也可以增加并发度,从而使装卸工人一直处于有工作可做的状态。
5 读写比例
读操作相当于我们将货从B中的仓库取出来,运到A处就结束了。而写操作意味着货物在A处经过一番处理之后还要再运回B处并存储在仓库中。因此不同的读写比例也会造成测试结果的不同。
正是由于这些不同影响因素的存在,我们在对磁盘进行性能测试时,需要仔细选择测试参数,否则将无法测出磁盘的最优性能。同时应将测试参数和方扒慎脊法定性定量,否则测试结果将失去比较的价值。
以 云盘参数和性能测试方法:
https://help.aliyun.com/document_detail/25382.html
一孝搏文中介绍的测试IOPS的方法为例,我们来看一下linux常用测试工具fio的参数如何体现以上影响因素。
测试随机写IOPS:fio-direct=1-iodepth=128-rw=randwrite-ioengine=lio-bs=4k-size=1G-numjobs=1-runtime=1000-group_reporting-filename=/dev/[device]-name=Rand_Write_Testing测试随机读IOPS:fio-direct=1-iodepth=128-rw=randread-ioengine=lio-bs=4k-size=1G-numjobs=1-runtime=1000-group_reporting-filename=/dev/[device]-name=Rand_Read_Testing测试写吞吐量:fio-direct=1-iodepth=64-rw=write-ioengine=lio-bs=1024k-size=1G-numjobs=1-runtime=1000-group_reporting-filename=/dev/[device]-name=Write_PPS_Testing测试读吞吐量:fio-direct=1-iodepth=64-rw=read-ioengine=lio-bs=1024k-size=1G-numjobs=1-runtime=1000-group_reporting-filename=/dev/[device]-name=Read_PPS_Testing
其中:
iodepth:队列深度。异步引擎下起作用。
rw: 读写模式,可选模式有顺序写write、顺序读read、随机写randwrite、随机读randread、混合随机读写randrw。
ioengine: 负载引擎。lio引擎用于发起异步IO请求。
bs: IO块大小。
numjobs 测试线程数。
对比四个测试方法的参数我们可以看到,测试IOPS时我们采用小数据块(bs=4k),测试吞吐量时则用大数据块(bs=1024k)。这和我们前面说到的大货车小货车的选择原理是一致的。
队列深度对IOPS的影响要大于对吞吐量的影响,因为我们测试IOPS时选择的iodepth更大。但iodepth也不是越大越好,因为当装卸工人数量、装卸货物速度、仓库寻址时间一定之后,单位时间内所能处理的最大货物量也就确定了,即磁盘的能力确定了。一味增加队列深度,增加的只能是货物在队列里的等待时间,即平均IO响应时间。
我们可以通过查看装卸工人的忙碌程度来决定是否要增加队列深度。如果磁盘的busy%为100%,那就表示所有工人都在一刻不停歇的装卸货物了,已经不再有提升的空间,此时再增加队列深度或是数据量大小对测试结果都将是徒劳。反之,则表示磁盘压力尚未到极限,得出的数据不能代表磁盘性能最高水平。
磁盘压测时如果有其他业务逻辑在运行会怎样呢?这种情况就相当于有一部分货车装运的是业务逻辑的数据,而这些货车也会占用我们的队列和装卸工人,测试引擎将无法百分之百的使用全部队列和装卸工人,那么我们的测试结果将不能体现整个磁盘的能力。尤其是当业务逻辑所涉及的IO是同步(synchronous)请求的时候,对测试结果的影响将更大,因为同步IO就相当于前面说到的一次只让一辆车在路上跑,只有等它跑完才会发下一辆车。因此在压力测试的时候,我们需要将业务逻辑关闭的。
原文链接
Ⅱ 在 Linux 上检测硬盘速度
在Linux中可以用 hdparm 命令来测试硬盘速度。
为了检测更精准,这个操作应该 重复2-3次 。这显示了无需访问磁盘,直接从 Linux 缓冲区缓存中读取的速度。这个测量实际上是被测系统的处理器、高速缓存和存储器的吞吐量的指标。这是一个 for 循环的例子,连续运行测试 5 次:
Ⅲ LINUX下如何用DD命令来测试存储的读写性能
通常就是 计算读写一定大小的块耗费的时间 ,本身有速度输出
基本的测试如下
磁盘读速度
sync;time dd if=[mountpoint] of=/dev/null bs=4096k count=2000
测试数据大小为:4096k×2000
磁盘写速度
sync;time dd if=/dev/zero of=[mountpoint] bs=4096k count=2000
测试数据大小为:4096k×2000
[mountpoint]替换为你实际的挂载点
以上都是测试 2000个 4M块的速度 可以通过改变 bs大小来分析不同级别块的性能
可以通过写更详细的脚本来实现更详细的输出
Ⅳ 我想做linux的磁盘io性能测试,有什么好的工具和方法推荐吗,感谢
除了fio测试工具和iostat,其他工具的测试结果基本上都是扯淡,跟直观感受毁镇距离太远,尤其是随机IO。
而且测试结果都不能反如戚映真实负载纤橡粗,如果依据这个结果去预估负载,更是差的远。
Ⅳ 如何使用DD命令测试Linux磁盘的性能
首先要了解两个特殊的设备:
/dev/null:回收站、无底洞
/dev/zero:产生字符
Ø 测试磁盘写能力
1
time dd if=/dev/zero of=/test.dbf bs=64k count=16k
因为/dev/zero是一个伪设备,它只产生空字符流,对它不会产生IO,所以,IO都会集中在of文件中,of文件只用于写,所以这个命令相当于测试磁盘的写能力。
这个很不准确的,因为命令结束的时候数据还没有真正写到磁盘上去。
1
time dd if=/dev/zero of=/test.dbf bs=64k count=16k conv=fsync
这个还算准确,数据已经写入磁盘。
1
time dd if=/dev/zero of=/test.dbf bs=64k count=4k oflag=dsync
这个可以当成是模拟数据库插入操作,所以很慢。
Ø 测试磁盘读能力
1
time dd if=/dev/sdb1 of=/dev/null bs=8k
因为/dev/sdb1是一个物理分区,对它的读取会产生IO,/dev/null是伪设备,相当于黑洞,of到该设备不会产生IO,所以,这个命令的IO只发生在/dev/sdb1上,也相当于测试磁盘的读能力。
Ø 测试同时读写能力
1
time dd if=/dev/sdb1 of=/test1.dbf bs=8k
这个命令下,一个是物理分区,一个是实际的文件,对它们的读写都会产生IO(对/dev/sdb1是读,对/test1.dbf是写),假设他们都在一个磁盘中,这个命令就相当于测试磁盘的同时读写能力
Ⅵ 如何测试Linux服务器的性能
################### cpu性能查看 ############################################################
1、查看物理cpu个数:
cat /proc/cpuinfo |grep "physical id"|sort|uniq|wc -l
2、查看每个物理cpu中的core个数:
cat /proc/cpuinfo |grep "cpu cores"|wc -l
3、逻辑cpu的个数:
cat /proc/cpuinfo |grep "processor"|wc -l
物理cpu个数*核数=逻辑cpu个数(不支持超线程技术的情况下)
########################### 内存查看 ################################################################
1、查看内存使用情况:
free -m
total used free shared buffers cached
Mem: 3949 2519 1430 0 189 1619
-/+ buffers/cache: 710 3239
Swap: 3576 0 3576
total:内存总数
used:已经使用的内存数
free:空闲内存数
shared:多个进程共享的内存总额
- buffers/cache:(已用)的内存数,即used-buffers-cached
+ buffers/cache:(可用)的内存数,即free+buffers+cached
Buffer Cache用于针对磁盘块的读写;Page Cache用于针对文件inode的读写,这些Cache能有效地缩短I/O系统调用的时间。
对于操作系统来说free/used是系统可用/占用的内存;而对于应用程序来说-/+ buffers/cache是可用/占用内存,因为buffers/cache很快就会被使用。我们工作时候应该从应用角度来看。
################# 硬盘查看 ##########################################################################
1、查看硬盘及分区信息:
fdisk -l
2、查看文件系统的磁盘空间占用情况:
df -h
3、查看硬盘的I/O性能(每隔一秒显示一次,显示5次):
iostat -x 1 5
iostat是含在套装systat中的,可以用yum -y install systat来安装。
常关注的参数:
如果%util接近100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。
如果idle小于70%,I/O的压力就比较大了,说明读取进程中有较多的wait。
4、查看linux系统中某目录的大小:
-sh /root
如发现某个分区空间接近用完,可以进入该分区的挂载点,用以下命令找出占用空间最多的文件或目录,然后按照从大到小的顺序,找出系统中占用最多空间的前10个文件或目录:
-cksh *|sort -rn|head -n 10
############################################ 查看平均负载 ####################################
有时候系统响应很慢,但又找不到原因,这时就要查看平均负载了,看它是否有大量的进程在排队等待。
最简单的命令:
uptime
查看过去的1分钟、5分钟和15分钟内进程队列中的平均进程数量。
还有动态命令:
top
我们只关心以下部分:
top - 21:33:09 up 1:00, 1 user, load average: 0.00, 0.01, 0.05
如果每个逻辑cpu当前的活动进程不大于3,则系统性能良好;
如果每个逻辑cpu当前的活动进程不大于4,表示可以接受;
如果每个逻辑cpu当前的活动进程大于5,则系统性能问题严重。
一般计算方法:负载值/逻辑cpu个数
还可以结合vmstat命令来判断系统是否繁忙,其中:
procs
r:等待运行的进程数。
b:处在非中断睡眠状态的进程数。
w:被交换出去的可运行的进程数。
memeory
swpd:虚拟内存使用情况,单位为KB。
free:空闲的内存,单位为KB。
buff:被用来作为缓存的内存数,单位为KB。
swap
si:从磁盘交换到内存的交换页数量,单位为KB。
so:从内存交换到磁盘的交换页数量,单位为KB。
io
bi:发送到块设备的块数,单位为KB。
bo:从块设备接受的块数,单位为KB。
system
in:每秒的中断数,包括时钟中断。
cs:每秒的环境切换次数。
cpu
按cpu的总使用百分比来显示。
us:cpu使用时间。
sy:cpu系统使用时间。
id:闲置时间。
标准情况下r和b的值应该为:
r<5,b=0
假设输出的信息中:
如果r经常大于3或4,且id经常少于50,表示cpu的负荷过重。
pi、po长期不等于0,表示内存不足。
bi经常不等于0,且在b中的队列大于2或3,表示io的性能不好。
################################# 其他参数 #####################################
查看内核版本号:
uname -a
简化命令:
uname -r
查看系统是32位还是64位的:
file /sbin/init
查看发行版:
cat /etc/issue
或lsb_release -a
查看系统已载入的相关模块:
lsmod
查看pci设置:
lspci
Ⅶ Linux 如何测试 IO 性能(磁盘读写速度
linux下测试磁盘IO读写速度
[root@node3 /]# time dd if=/dev/sda2 of=/dev/null bs=8k count=524288
524288+0 records in
524288+0 records out
4294967296 bytes (4.3 GB) copied, 37.4222 seconds, 115 MB/s
real 0m37.497s
user 0m0.036s
sys 0m1.320s
了4.3G的数据,平均速度为115M/s
[root@node3 /]# hdparm -t /dev/sda2
/dev/sda2:
Timing buffered disk reads: 284 MB in 3.00 seconds = 94.55 MB/sec
[root@node3 /]# hdparm -t /dev/sda2
/dev/sda2:
Timing buffered disk reads: 292 MB in 3.02 seconds = 96.82 MB/sec
读了将近300M的数据,平均速度大约为95M/s
经过以上的测试数据大体估算该磁盘的性能大约为100M/s
Ⅷ Linux如何查看与测试磁盘IO性能
top命令的其他参数代表的含义详见top命令详解
sar 命令是分析系统瓶颈的神器,可以用来查看 CPU 、内存、磁盘、网络等性能。
sar 命令查看当前磁盘性能的命令为:
Ⅸ 服务器硬盘,怎么测试,要最简单的。高分求教
如果只测SATA硬盘,直接用台式机应该就可以。
如果有SAS,需要相应的SAS控制器。建议使用SAS HBA卡,不要使用SAS RAID卡。
完成硬件的连接后,Windows 下,推荐使用IOMeter软件进行测试,应该可以BAIDU或者GOOGLE到下载源,此外也可以如上面那位朋友所说的 HD Tune,比较简单; HD Tach也不错。 Linux下,最简单的可以使用dd指令直接进行读写测试,业界比较通用的有bonnie, 专业一些的可以使用 Orion 或者FIO进行测试。