IO系統性能之一:衡量性能的幾個指標(中)。

  IOPS(IO per Second)
  IOPS,IO系統每秒所執行IO操作的次數,是一個重要的用來衡量系統IO能力的一個參數。對於單個磁盤組成的IO系統來說,計算它的IOPS不是一件很難的事情,只要我們知道了系統完成一次IO所需要的時間的話我們就能推算出系統IOPS來。
  現在我們就來推算一下磁盤的IOPS,假設磁盤的轉速(Rotational Speed)爲15K RPM,平均尋道時間爲5ms,最大傳輸速率爲40MB/s(這裏將讀寫速度視爲一樣,實際會差別比較大)。
  對於磁盤來說一個完整的IO操作是這樣進行的:當控制器對磁盤發出一個IO操作命令的時候,磁盤的驅動臂(Actuator Arm)帶讀寫磁頭(Head)離開着陸區(Landing Zone,位於內圈沒有數據的區域),移動到要操作的初始數據塊所在的磁道(Track)的正上方,這個過程被稱爲尋址(Seeking),對應消耗的時間被稱爲尋址時間(Seek Time);但是找到對應磁道還不能馬上讀取數據,這時候磁頭要等到磁盤盤片(Platter)旋轉到初始數據塊所在的扇區(Sector)落在讀寫磁頭正上方的之後才能開始讀取數據,在這個等待盤片旋轉到可操作扇區的過程中消耗的時間稱爲旋轉延時(Rotational Delay);接下來就隨着盤片的旋轉,磁頭不斷的讀/寫相應的數據塊,直到完成這次IO所需要操作的全部數據,這個過程稱爲數據傳送(Data Transfer),對應的時間稱爲傳送時間(Transfer Time)。完成這三個步驟之後一次IO操作也就完成了。
  在我們看硬盤廠商的宣傳單的時候我們經常能看到3個參數,分別是平均尋址時間、盤片旋轉速度以及最大傳送速度,這三個參數就可以提供給我們計算上述三個步驟的時間。
  第一個尋址時間,考慮到被讀寫的數據可能在磁盤的任意一個磁道,既有可能在磁盤的最內圈(尋址時間最短),也可能在磁盤的最外圈(尋址時間最長),所以在計算中我們只考慮平均尋址時間,也就是磁盤參數中標明的那個平均尋址時間,這裏就採用當前最多的10krmp硬盤的5ms。
  第二個旋轉延時,和尋址一樣,當磁頭定位到磁道之後有可能正好在要讀寫扇區之上,這時候是不需要額外額延時就可以立刻讀寫到數據,但是最壞的情況確實要磁盤旋轉整整一圈之後磁頭才能讀取到數據,所以這裏我們也考慮的是平均旋轉延時,對於10krpm的磁盤就是(60s/15k)*(1/2) = 2ms。
  第三個傳送時間,磁盤參數提供我們的最大的傳輸速度,當然要達到這種速度是很有難度的,但是這個速度卻是磁盤純讀寫磁盤的速度,因此只要給定了單次 IO的大小,我們就知道磁盤需要花費多少時間在數據傳送上,這個時間就是IO Chunk Size / Max Transfer Rate。
 IOPS計算公式
  現在我們就可以得出這樣的計算單次IO時間的公式:
  IO Time = Seek Time + 60 sec/Rotational Speed/2 + IO Chunk Size/Transfer Rate
  於是我們可以這樣計算出IOPS
  IOPS = 1/IO Time = 1/(Seek Time + 60 sec/Rotational Speed/2 + IO Chunk Size/Transfer Rate)
  對於給定不同的IO大小我們可以得出下面的一系列的數據
  4K (1/7.1 ms = 140 IOPS)
  5ms + (60sec/15000RPM/2) + 4K/40MB = 5 + 2 + 0.1 = 7.1
  8k (1/7.2 ms = 139 IOPS)
  5ms + (60sec/15000RPM/2) + 8K/40MB = 5 + 2 + 0.2 = 7.2
  16K (1/7.4 ms = 135 IOPS)
  5ms + (60sec/15000RPM/2) + 16K/40MB = 5 + 2 + 0.4 = 7.4
  32K (1/7.8 ms = 128 IOPS)
  5ms + (60sec/15000RPM/2) + 32K/40MB = 5 + 2 + 0.8 = 7.8
  64K (1/8.6 ms = 116 IOPS)
  5ms + (60sec/15000RPM/2) + 64K/40MB = 5 + 2 + 1.6 = 8.6
  從上面的數據可以看出,當單次IO越小的時候,單次IO所耗費的時間也越少,相應的IOPS也就越大。
  上面我們的數據都是在一個比較理想的假設下得出來的,這裏的理想的情況就是磁盤要花費平均大小的尋址時間和平均的旋轉延時,這個假設其實是比較符合我們實際情況中的隨機讀寫,在隨機讀寫中,每次IO操作的尋址時間和旋轉延時都不能忽略不計,有了這兩個時間的存在也就限制了IOPS的大小。現在我們考慮一種相對極端的順序讀寫操作,比如說在讀取一個很大的存儲連續分佈在磁盤的的文件,因爲文件的存儲的分佈是連續的,磁頭在完成一個讀IO操作之後,不需要從新的尋址,也不需要旋轉延時,在這種情況下我們能到一個很大的IOPS值,如下
  4K (1/0.1 ms = 10000 IOPS)
  0ms + 0ms + 4K/40MB = 0.1
  8k (1/0.2 ms = 5000 IOPS)
  0ms + 0ms + 8K/40MB = 0.2
  16K (1/0.4 ms = 2500 IOPS)
  0ms + 0ms + 16K/40MB = 0.4
  32K (1/0.8 ms = 1250 IOPS)
  0ms + 0ms + 32K/40MB = 0.8
  64K (1/1.6 ms = 625 IOPS)

  0ms + 0ms + 64K/40MB = 1.6
  相比第一組數據來說差距是非常的大的,因此當我們要用IOPS來衡量一個IO系統的系能的時候我們一定要說清楚是在什麼情況的IOPS,也就是要說明讀寫的方式以及單次IO的大小,當然在實際當中,特別是在OLTP的系統的,隨機的小IO的讀寫是最有說服力的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章