tft每日頭條

 > 生活

 > freenas動态分配磁盤

freenas動态分配磁盤

生活 更新时间:2024-11-30 11:02:08
簡介

FIO是測試IOPS的非常好的工具,用來對硬件進行壓力測試和驗證。磁盤IO是檢查磁盤性能的重要指标,可以按照負載情況分成照順序讀寫,随機讀寫兩大類。

目前主流的第三方IO測試工具有fio、iometer 、 Orion,這三種工具各有千秋,在linux 下也可以使用dd 進行簡單的磁盤(文件系統)測試(文末補充)。

fio在Linux系統下使用比較方便,iometer在window系統下使用比較方便,Orion是oracle的IO測試軟件,可在沒有安裝oracle數據庫的情況下模拟oracle數據庫場景的讀寫。

Multithreaded IO generation tool , FIO 是一個多線程io生成工具,可以生成多種IO模式,用來測試磁盤設備的性能(也包含文件系統:如針對網絡文件系統 NFS 的IO測試);

Description : fio is an I/O tool that will spawn a number of threads or processes doing

: a particular type of io action as specified by the user. fio takes a

: number of global parameters, each inherited by the thread unless

: otherwise parameters given to them overriding that setting is given.

: The typical use of fio is to write a job file matching the io load

: one wants to simulate.

安裝

測試磁盤之前,磁盤最好是空的,也就是格式化的,如果磁盤已經有了内容, 需要卸載-格式化-挂載 # 卸載磁盤 umount /mnt/datadir1 # 格式化磁盤 mkfs.ext4 /dev/sdd # 挂載磁盤 mount -t ext4 /dev/sdd /mnt/datadir1 # 自動挂載,在裡面添加該盤 vim /etc/fstab (見下圖,可以在該文件下設置挂載) 安裝fio yum install fio

freenas動态分配磁盤(使用FIO測試磁盤與網絡情況)1

使用簡介

從測試角度出發,一般有如下的測試設計:

序号

模塊

用例

結果

1

磁盤IO測試

1M順序寫吞吐量

IOPS=353, BW=353MiB/s (371MB/s)(50.0GiB/144874msec)

2

磁盤IO測試

1M順序讀吞吐量

IOPS=1349, BW=1350MiB/s (1415 MB/s)(50.0GiB/37937msec)

3

磁盤IO測試

4K随機寫IOPS

IOPS=6057, BW=23.7MiB/s (24.8MB/s)(10.0GiB/432743msec)

4

磁盤IO測試

4K随機讀IOPS

IOPS=20.0k, BW=81.9MiB/s (85.9MB/s)(10.0GiB/125065msec)

說明

  1. IOPS IOPS(Input/Output Operations Per Second)每秒讀寫的次數

2. 50.0GiB/144874msec=353MiB/s=371MB/s

MiB/s的意思是每秒中傳輸2^20 byte的數據,不太常用,一般需要轉換成MB/S,MB/s=MiB/s *1.024

測試命令:

fio -direct=1 -iodepth=32 -rw=write -ioengine=libaio -bs=1024k -size=50G -numjobs=1 -runtime=600 -group_reporting -filename=/mnt/test/fiotest.txt -name=Write_BandWidth_Test

fio -direct=1 -iodepth=32 -rw=read -ioengine=libaio -bs=1024k -size=50G -numjobs=1 -runtime=600 -group_reporting -filename=/mnt/test/fiotest.txt -name=Read_BandWidth_Test

fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=4k -size=10G -numjobs=1 -runtime=600 -group_reporting -filename=/mnt/test/fiotest.txt -name=Rand_Write_IOPS_Test

fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4k -size=10G -numjobs=1 -runtime=600 -group_reporting -filename=/mnt/test/fiotest.txt -name=Rand_Read_IOPS_Test

命令參數說明:

filename=/dev/sdb1 測試文件名稱,通常選擇需要測試的盤的data目錄。direct=1 是否使用directIO,測試過程繞過OS自帶的buffer,使測試磁盤的結果更真實。

  • Linux讀寫的時候,内核維護了緩存,數據先寫到緩存,後面再後台寫到SSD。讀的時候也優先讀緩存裡的數據。這樣速度可以加快,但是一旦掉電緩存裡的數據就沒了。所以有一種模式叫做DirectIO,跳過緩存,直接讀寫SSD。

rw=

  • randwrite 測試随機寫的I/O
  • randrw 測試随機寫和讀的I/O
  • write 順序寫
  • read 順序讀

bs=1024k 單次io的塊文件大小為1024kbsrange=512-2048 同上,提定數據塊的大小範圍

size=50G 每個線程讀寫的數據量是50GB。numjobs=1 每個job(任務)開1個線程,這裡用了幾,後面每個用-name指定的任務就開幾個線程測試。所以最終線程數=任務數(幾個name=jobx)* numjobs。name=job1:一個任務的名字,重複了也沒關系。如果fio -name=job1 -name=job2,建立了兩個任務,共享-name=job1之前的參數。-name之後的就是job2任務獨有的參數。thread 使用pthread_create創建線程,另一種是fork創建進程。進程的開銷比線程要大,一般都采用thread測試。runtime=1000 測試時間為1000秒,如果不寫則一直将5g文件分4k每次寫完為止。ioengine=libaio 指定io引擎使用libaio方式。libaio:Linux本地異步I/O。請注意,Linux可能隻支持具有非緩沖I/O的排隊行為(設置為“direct=1”或“buffered=0”);rbd:通過librbd直接訪問CEPH Radosiodepth=16 隊列的深度為16.在異步模式下,CPU不能一直無限的發命令到SSD。比如SSD執行讀寫如果發生了卡頓,那有可能系統會一直不停的發命令,幾千個,甚至幾萬個,這樣一方面SSD扛不住,另一方面這麼多命令會很占内存,系統也要挂掉了。這樣,就帶來一個參數叫做隊列深度。Block Devices(RBD),無需使用内核RBD驅動程序(rbd.ko)。該參數包含很多ioengine,如:libhdfs/rdma等rwmixwrite=30 在混合讀寫的模式下,寫占30%group_reporting 關于顯示結果的,彙總每個進程的信息。

  • filename 報告的名稱
  • name 此次測試的名稱

此外lockmem=1g 隻使用1g内存進行測試。zero_buffers 用0初始化系統buffer。nrfiles=8 每個進程生成文件的數量。

磁盤讀寫常用測試點:

  • 1. Read=100% Ramdon=100% rw=randread (100%随機讀)
  • 2. Read=100% Sequence=100% rw=read (100%順序讀)
  • 3. Write=100% Sequence=100% rw=write (100%順序寫)
  • 4. Write=100% Ramdon=100% rw=randwrite (100%随機寫)
  • 5. Read=70% Sequence=100% rw=rw, rwmixread=70, rwmixwrite=30(70%順序讀,30%順序寫)
  • 6. Read=70% Ramdon=100% rw=randrw, rwmixread=70, rwmixwrite=30(70%随機讀,30%随機寫)
dd簡單測試磁盤 (dd 是linux自帶的,不用安裝,功能沒有fio全面,适用于簡單的磁盤測試)

[root@docker ~]# dd if=/dev/zero of=test bs=8k count=10000 oflag=direct10000 0 records in10000 0 records out81920000 bytes (82 MB) copied, 0.876059 s, 93.5 MB/s

[root@docker ~]# dd if=test of=/dev/null bs=8k count=10000 iflag=direct10000 0 records in10000 0 records out81920000 bytes (82 MB) copied, 5.06434 s, 16.2 MB/s

/dev/null,它是空設備,也稱為位桶(bit bucket)、回收站、無底洞,可以向它輸出任何數據。任何寫入它的輸出都會被抛棄。如果不想讓消息以标準輸出顯示或寫入文件,那麼可以将消息重定向到位桶。

/dev/zero,是一個輸入設備,可用它來初始化文件。該設備無窮盡地提供0,可以使用任何需要的數目——設備提供的要多的多。他可以用于向設備或文件寫入字符串0。

if=file 輸入文件名,缺省為标準輸入。 從file讀取,如if=/dev/zero,該設備無窮盡地提供0,(不産生讀磁盤IO) of=file 輸出文件名,缺省為标準輸出。 向file寫出,可以寫文件,可以寫裸設備。如of=/dev/null,"黑洞", ibs=bytes    一次讀入 bytes 個字節(即一個塊大小為 bytes 個字節)。 obs=bytes   一次寫 bytes 個字節(即一個塊大小為 bytes 個字節)。 bs=bytes    同時設置讀寫塊的大小為 bytes ,可代替 ibs 和 obs。如bs=8k 每次讀或寫的大小,即一個塊的大小為8K。 cbs=bytes    一次轉換 bytes 個字節,即轉換緩沖區大小。 skip=blocks   從輸入文件開頭跳過 blocks 個塊後再開始複制。 seek=blocks 從輸出文件開頭跳過 blocks 個塊後再開始複制。(通常隻有當輸出文件是磁盤或磁帶時才有效)。 count=blocks   僅拷貝 blocks 個塊,塊大小等于 ibs 指定的字節數。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved