2010年3月18日 星期四

ZFS-NAS測試數據 Part 6 - 測試ZFS系統CPU使用E1500下進行CIFS的極限

ZFS-NAS測試數據 Part 6 - 測試ZFS系統CPU使用E1500下進行CIFS的極限

測試日期20091102

    zpool組態
    XD


    mirror


    c2t2d0


    c2t3d0

    mirror


    c2t4d0


    c2t5d0
     
    zpool
    狀態
    項目 動作 使用程式或動作 大小
    (GB)
    時間
    (sec)
    速度
    (MB/sec)
    NAS CPU
    使用率(%)
    zPool
    Bandwidth
    (MB/sec)
    normal 登入
    ZFS-NAS
    寫入 raidz time (mkfile test) 1 190
    寫入 raidz time (mkfile test) 5 41.2s 151
    寫入 raidz time (mkfile test) 10 1m30s 112
    寫入 raidz time (mkfile test) 20 3m4s 110.9
    讀取 raidz time (cp test /dev/null) 1 5.008s 204.4
    讀取 raidz time (cp test /dev/null) 2 9.942s 205.9
    讀取 raidz time (cp test /dev/null) 5 24.853s 206
    讀取 raidz time (cp test /dev/null) 10 51.561s 198.5
    讀取 raidz time (cp test /dev/null) 20 1m44s 196.7
    讀取寫入 raidz zpool scrub 110 110
  1. 以結果來看,只要CPU夠力,單純的連率讀取和寫入,ZFS都可以把單顆硬碟跑到上限
  2. 分配到兩個mirror的寫入動作由ZFS的檔案系統掌握,大致上會平均分配在pool中,但不是100%的平均分配。
  3. mirror的寫入速度是單顆硬碟,但是讀取速度卻是接近兩顆硬碟合併,mirror讀取時會各讀取一半,再各自檢查chksum,ok就還原資料
  4. 接著把c2t2d0 offline,pool變成degrade狀態



    XD

    degrade

    mirror
    degrade


    c2t2d0 offline


    c2t3d0 online

    mirror
    online


    c2t4d0 online


    c2t5d0 online
       

    zpool
    狀態
    項目 動作 使用程式或動作 大小
    (GB)
    時間
    (sec)
    速度
    (MB/sec)
    degrade
    (c2t2d0
    offline)
    登入
    ZFS-NAS
    讀取 raidz time (cp test /dev/null) 1 8.3s 123.3
    讀取 raidz time (cp test /dev/null) 2 17s 120
    讀取 raidz time (cp test /dev/null) 5 43s 118.9
    讀取 raidz time (cp test /dev/null) 10 1m27s 117
    讀取 raidz time (cp test /dev/null) 20 2m53s 118
    寫入 raidz time (mkfile test) 1 8.65s 118.3
    寫入 raidz time (mkfile test) 2 24.1 84.74
    寫入 raidz time (mkfile test) 5 1m20s 63.25
    寫入 raidz time (mkfile test) 10 2m49s 60.44
    寫入 raidz time (mkfile test) 20 5m51s 58.22
  5. degrade中我先測讀取再測寫入
  6. 因為之前資料平均分配在兩組mirror中,所以讀取速度受限於degrade的那組mirror,結果就是接近兩顆硬碟合併的速度。
  7. degrade寫入的結果可以發現,用zpool iostat觀察,ZFS不會把資料寫入degrade中的那組mirror,所以速度受限於單一組mirror。
  8. 但是因為只會寫入正常狀態的mirror,所以degrade中新增加的資料還是會受到mirror的保護。
  9. 原本分佈再兩組mirror中的資料,因為用mkfile指令全部復蓋過去了,所以現在只集中再正常的那組mirror裡。
    zpool
    狀態
    項目 動作 使用程式或動作 大小
    (GB)
    時間
    (sec)
    速度
    (MB/sec)
    normal
    (c2t2d0
    online)
    登入
    ZFS-NAS

    resilver
    0s
    normal 登入
    ZFS-NAS
    讀取 raidz time (cp test /dev/null) 1 8.8s 115
    讀取 raidz time (cp test /dev/null) 2 18.9s 107.8
    讀取 raidz time (cp test /dev/null) 5 47.6s 107.3
    讀取 raidz time (cp test /dev/null) 10 1m34s 108.9
    讀取 raidz time (cp test /dev/null) 20 3m11s 107.2
    寫入 raidz time (mkfile test) 1 5.5s 184
    寫入 raidz time (mkfile test) 2 14.8s 138
    寫入 raidz time (mkfile test) 5 43.6s 117.2
    寫入 raidz time (mkfile test) 10 1m31s 112.1
    寫入 raidz time (mkfile test) 20 3m2s 112.1
  1. resilver如預期,因資料全部在正常的那組mirror中,所以瞬間完成。
  2. 雖然resilver完成了,但是resilver只是確保資料有正確同步,mirror的備援正常,但是不會把檔案重新分配再兩組mirror中
  3. 所以剛剛的資料還是在單個mirror中,讀取的測試結果相同,就是單組mirror的效能。
  4. 接著進行寫入測試的結果就不同了,因為兩組mirror都是正常的,所以資料會分割成兩組,分別寫入兩組mirror
  5. iostat的觀察結果相同。

3 則留言:

THI 提到...

LOUISZZZ兄,剛剛在重讀你的文章時,發現這邊好像有點問題。若兩組mirror組成pool,應該會變成Raid10,寫入pool的資料會以Raid0的模式至各vdev,每組vdev再以Raid1模式寫入硬碟,如果我沒弄錯的話。

今天若寫入資料到pool中,再將其中一組vdev offline,那剩下的那組vdev應該只有部份的資料,或者說整個pool都會有問題,那你測試中的資料是如何讀取出來的?

louiszzz 提到...

你沒有弄錯。

只是因為,這裡的測試中只有把mirror vdev的其中一顆硬碟c2t2d0 offline,而不是把mirror vdev offline,所以這組mirror vdev只是失去備援能力而進入degrade狀態,還是能夠讀寫,所以pool還是能夠讀取資料。

假如同一個mirror vdev中的兩個硬碟都offline,vdev確實就會變成unavail了,整個pool也會一起變unavail沒錯。

THI 提到...

抱歉!是我看錯了。我以為是整組vdev offline…