Fio 도구입출력 성능 테스트

3624 단어 C 언어Verifyfio
FIO 매개 변수
ignore_error=str
              Sometimes you want to ignore some errors during test in that case you can specify error list for each error type.
              ignore_error=READ_ERR_LIST,WRITE_ERR_LIST,VERIFY_ERR_LIST
              errors for given error type is separated with ':'.  Error may be symbol ('ENOSPC', 'ENOMEM') or an integer.
              Example: ignore_error=EAGAIN,ENOSPC:122 .
              This option will ignore EAGAIN from READ, and ENOSPC and 122(EDQUOT) from WRITE.

                , ,verify                      :     。       OS Error    
{
		.name	= "ignore_error",
		.type	= FIO_OPT_STR,
		.cb	= str_ignore_error_cb,
		.off1	= td_var_offset(ignore_error_nr),
		.help	= "Set a specific list of errors to ignore",
		.parent	= "rw",
		.category = FIO_OPT_C_GENERAL,
		.group	= FIO_OPT_G_ERR,
	}

continue_on_error=verify, error가 나타나면 무시하고 테스트를 계속합니다.
{
		.name	= "continue_on_error",
		.lname	= "Continue on error",
		.type	= FIO_OPT_STR,
		.off1	= td_var_offset(continue_on_error),
		.help	= "Continue on non-fatal errors during IO",
		.def	= "none",
		.category = FIO_OPT_C_GENERAL,
		.group	= FIO_OPT_G_ERR,
		.posval = {
			  { .ival = "none",
			    .oval = ERROR_TYPE_NONE,
			    .help = "Exit when an error is encountered",
			  },
			  { .ival = "read",
			    .oval = ERROR_TYPE_READ,
			    .help = "Continue on read errors only",
			  },
			  { .ival = "write",
			    .oval = ERROR_TYPE_WRITE,
			    .help = "Continue on write errors only",
			  },
			  { .ival = "io",
			    .oval = ERROR_TYPE_READ | ERROR_TYPE_WRITE,
			    .help = "Continue on any IO errors",
			  },
			  { .ival = "verify",
			    .oval = ERROR_TYPE_VERIFY,
			    .help = "Continue on verify errors only",
			  },
			  { .ival = "all",
			    .oval = ERROR_TYPE_ANY,
			    .help = "Continue on all io and verify errors",
			  },
			  { .ival = "0",
			    .oval = ERROR_TYPE_NONE,
			    .help = "Alias for 'none'",
			  },
			  { .ival = "1",
			    .oval = ERROR_TYPE_ANY,
			    .help = "Alias for 'all'",
			  },
		},
	}

FIo 데이터 일관성 확인은 모든 데이터가 채워져야 합니다. 그렇지 않으면 검증에 실패합니다.
struct verify_header {
        uint16_t magic;
        uint16_t verify_type;
        uint32_t len;
        uint64_t rand_seed;
        uint32_t crc32;
};
static int verify_header(struct io_u *io_u, struct verify_header *hdr,
			 unsigned int hdr_num, unsigned int hdr_len);

verify_header()
    check verify_헤더의 매직 일치 여부; #define FIO_HDR_MAGIC0xacca; 
check len 및 hdr렌은 같아야 돼.
 hdr->rand_seed 및 iou->rand_seed는 동일해야 합니다.
hdr의 내용에 따라 crc를 다시 계산하여 hdr->crc32와 일치하는지 확인합니다.
 crc = fio_crc32c(p, offsetof(struct verify_header, crc32));
 /**/
 crc = fio_crc32c(p, ((size_t) &((struct verify_header *)0)->crc32));
일치하는 경우 헤더 검사가 성공했습니다.
static void populate_hdr(struct thread_data *td, struct io_u *io_u,
			 struct verify_header *hdr, unsigned int header_num,
			 unsigned int header_len)

hdr의 각 구성원에 값을 부여합니다.
data_len = header_len - hdr_size(hdr);
/*The function do fill the verify data(verify_header + crc32) at the address 'struct verify_header *hdr'*/
static void fill_pattern_headers(struct thread_data *td, struct io_u *io_u,
				 unsigned long seed, int use_seed)

좋은 웹페이지 즐겨찾기