Ⅰ 磁碟性能壓測二三事之——性能參數和指標
摘要: 本文就將通過對磁碟性能測試指標及參數的介紹,來理解以上兩個原因為什麼會對測試結果有影響。
近日工作中遇到了一個磁碟壓測時性能上不去的問題,經排查,發現原因有以下幾個方面:
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進行測試。