1. Fio簡介
FIO是Linux kernel的IO部分維護者axobe開發:Github: //github.com/axboe/fio。
FIO一種IO系統的Benchmark和壓力測試工具,可以模擬不同IO場景下的IO負載。最初axobe設計FIO是為了節省為特定負載設計專門測試程序,進行性能測試,以及debug的時間。寫測試程序非常浪費時間,因為不同的測試負載的IO場景不同,他們都用自己的方式產生IO,故需要模擬這些IO負載,FIO需足夠靈活。
FIO支持 13種不同的 I/O 引擎, 包括:sync,mmap,libaio,posixaio,SG v3,splice,null,network,syslet,guasi,solarisaio等等。 FIO 的引擎能識別簡單易懂的job file文本去進行測試,同時能提供各種 I/O 性能指標,如I/O 延遲、IOPS和帶寬等。因此被大量的制造商和廣泛的用戶認可,作為確認IO系統良好的測試工具。
2. 為什么要開發fio引擎
Fio支持多大13種I/O引擎,但是有時我們會自己開發存儲系統或封裝自己的IO接口。這時需要提供一個benchmark,而fio就是一個很好的選擇,這時就需要在fio上添加一個適配自己IO接口的引擎,然后就可以用fio測試我們自己的存儲系統了。
3.開發流程
Fio提供了一個引擎框架,要添加新的fio引擎,就需要在框架上填寫自己的邏輯。
添加引擎可以在fio代碼里添加,也可以以外部插件的形式添加,新加引擎代碼是一樣的:
- 在代碼里添加:直接在fio/engines目錄里添加。
- 以外部插件的形式添加:將新fio引擎編譯成動態庫,fio運行時通過“ioengine”參數指定動態庫引擎。
Fio引擎框架我分為3部分:
- 注冊和注銷引擎框架
- 引擎io流程框架
- 引擎參數框架
在此已rbd引擎為例介紹。
3.1. 注冊和注銷引擎框架
通過“__attribute__”設置,可以讓fio啟動時,在調用main()前執行注冊,在main()后執行注銷。


3.2. 引擎io流程框架
流程框架里有一系列io過程需要調用的函數指針,不用全部實現,具體實現可以參考fio的rbd引擎。


3.3. 引擎參數框架
如果新加的引擎啟動需要參數,可以通過參數框架,設置參數,具體實現可以參考fio的rbd引擎。

