use std::fs; use std::process::Command; // test disk sequential read speeds w/ fio pub fn disk_read_seq_test(tempfile: &str, size: &u8) { // run the fio command let output = Command::new("fio") .arg("--name=TEST") .arg(format!("--filename={}", tempfile)) .arg("--rw=read") .arg("--size=2g") .arg(format!("--io_size={}g", size)) .arg("--blocksize=1024k") .arg("--ioengine=libaio") .arg("--fsync=10000") .arg("--iodepth=32") .arg("--direct=1") .arg("--numjobs=1") .arg("--runtime=60") .arg("--group_reporting") .output() .expect("Failed to execute command"); // check that the command succeeded assert!(output.status.success()); // print the test's output println!("{}", String::from_utf8_lossy(&output.stdout)); } // test disk 4K random read speeds w/ fio pub fn disk_read_rand_test(tempfile: &str, size: &u8) { // run the fio command let output = Command::new("fio") .arg("--name=TEST") .arg(format!("--filename={}", tempfile)) .arg("--rw=randread") .arg("--size=2g") .arg(format!("--io_size={}g", size)) .arg("--blocksize=4k") .arg("--ioengine=libaio") .arg("--fsync=1") .arg("--iodepth=32") .arg("--direct=1") .arg("--numjobs=1") .arg("--runtime=60") .arg("--group_reporting") .output() .expect("Failed to execute command"); // check that the command succeeded assert!(output.status.success()); // print the test's output println!("{}", String::from_utf8_lossy(&output.stdout)); } // test disk write speeds by continually writing zeroes to it pub fn disk_write_test(tempfile: &str, size: &u8) { // convert size in Gigabytes down to Megabytes let size_gigs: u32 = (*size as u32 * 1024).into(); // run the dd command with a block size of 1 MB let output = Command::new("dd") .arg("bs=1M") .arg(format!("count={}", size_gigs)) .arg("if=/dev/zero") .arg(format!("of={}", tempfile)) .output() .expect("Failed to execute command"); // check that the command succeeded assert!(output.status.success()); // for whatever reason, `dd` output ends up in stderr println!("{}", String::from_utf8_lossy(&output.stderr)); // remove the test file match fs::remove_file(tempfile) { Ok(()) => println!("Cleaning up..."), Err(e) => println!("There was a problem during cleanup - {}", e), } }