Re: [PATCH] Add verify_meta verification type

From: Jens Axboe <jens.axboe_at_oracle.com>
Date: Thu, 2 Aug 2007 21:08:24 +0200

On Thu, Aug 02 2007, Shawn Lewis wrote:
> diff --git a/HOWTO b/HOWTO
> index 21ba960..c38266c 100644
> --- a/HOWTO
> +++ b/HOWTO
> @@ -592,6 +592,10 @@ verify=str If writing to a file, fio can
>
> sha256 Use sha256 as the checksum function.
>
> + meta Write extra information about each io
> + (timestamp, block number etc.). The block
> + number is verified.
> +
> null Only pretend to verify. Useful for testing
> internals with ioengine=null, not for much
> else.
> diff --git a/fio.h b/fio.h
> index 5f81300..235a13b 100644
> --- a/fio.h
> +++ b/fio.h
> @@ -197,6 +197,7 @@ enum {
> VERIFY_CRC7, /* crc7 sum data blocks */
> VERIFY_SHA256, /* sha256 sum data blocks */
> VERIFY_SHA512, /* sha512 sum data blocks */
> + VERIFY_META, /* block_num, timestamp etc. */
> VERIFY_NULL, /* pretend to verify */
> };
>
> @@ -232,6 +233,13 @@ struct vhdr_crc16 {
> struct vhdr_crc7 {
> uint8_t crc7;
> };
> +struct vhdr_meta {
> + uint64_t offset;
> + unsigned char thread;
> + unsigned short numberio;
> + unsigned long time_sec;
> + unsigned long time_usec;
> +};
>
> struct group_run_stats {
> unsigned long long max_run[2], min_run[2];
> diff --git a/options.c b/options.c
> index 81ddd23..a50dece 100644
> --- a/options.c
> +++ b/options.c
> @@ -638,6 +638,10 @@ #endif
> .oval = VERIFY_SHA512,
> .help = "Use sha512 checksums for verification",
> },
> + { .ival = "meta",
> + .oval = VERIFY_META,
> + .help = "Use io information",
> + },
> {
> .ival = "null",
> .oval = VERIFY_NULL,
> diff --git a/verify.c b/verify.c
> index a0e26c9..d9a68d6 100644
> --- a/verify.c
> +++ b/verify.c
> @@ -133,6 +133,9 @@ static inline unsigned int __hdr_size(in
> case VERIFY_SHA512:
> len = sizeof(struct vhdr_sha512);
> break;
> + case VERIFY_META:
> + len = sizeof(struct vhdr_meta);
> + break;
> default:
> log_err("fio: unknown verify header!\n");
> assert(0);
> @@ -163,6 +166,21 @@ static inline void *io_u_verify_off(stru
> return io_u->buf + header_num * hdr->len + hdr_size(hdr);
> }
>
> +static int verify_io_u_meta(struct verify_header *hdr, struct thread_data *td,
> + struct io_u *io_u, unsigned int header_num)
> +{
> + struct vhdr_meta *vh = hdr_priv(hdr);
> +
> + if (vh->offset != io_u->offset + header_num * td->o.verify_interval) {
> + log_err("meta: verify failed at %llu/%u\n",
> + io_u->offset + header_num * hdr->len,
> + hdr->len);
> + return 1;
> + }
> +
> + return 0;
> +}
> +
> static int verify_io_u_sha512(struct verify_header *hdr, struct io_u *io_u,
> unsigned int header_num)
> {
> @@ -365,6 +383,9 @@ int verify_io_u(struct thread_data *td,
> case VERIFY_SHA512:
> ret = verify_io_u_sha512(hdr, io_u, hdr_num);
> break;
> + case VERIFY_META:
> + ret = verify_io_u_meta(hdr, td, io_u, hdr_num);
> + break;
> default:
> log_err("Bad verify type %u\n", hdr->verify_type);
> ret = 1;
> @@ -375,6 +396,21 @@ int verify_io_u(struct thread_data *td,
> return 0;
> }
>
> +static void fill_meta(struct verify_header *hdr, struct thread_data *td,
> + struct io_u *io_u, unsigned int header_num)
> +{
> + struct vhdr_meta *vh = hdr_priv(hdr);
> +
> + vh->thread = td->thread_number;
> +
> + vh->time_sec = io_u->start_time.tv_sec;
> + vh->time_usec = io_u->start_time.tv_usec;
> +
> + vh->numberio = td->io_issues[DDIR_WRITE];
> +
> + vh->offset = io_u->offset + header_num * td->o.verify_interval;
> +}
> +
> static void fill_sha512(struct verify_header *hdr, void *p, unsigned int len)
> {
> struct vhdr_sha512 *vh = hdr_priv(hdr);
> @@ -444,7 +480,7 @@ void populate_verify_io_u(struct thread_
> {
> struct verify_header *hdr;
> void *p = io_u->buf, *data;
> - unsigned int hdr_inc, data_len;
> + unsigned int hdr_inc, data_len, header_num = 0;
>
> if (td->o.verify == VERIFY_NULL)
> return;
> @@ -486,12 +522,16 @@ void populate_verify_io_u(struct thread_
> case VERIFY_SHA512:
> fill_sha512(hdr, data, data_len);
> break;
> + case VERIFY_META:
> + fill_meta(hdr, td, io_u, header_num);
> + break;
> default:
> log_err("fio: bad verify type: %d\n", td->o.verify);
> assert(0);
> }
> if (td->o.verify_offset)
> memswp(p, p + td->o.verify_offset, hdr_size(hdr));
> + header_num++;
> }
> }

Applied, thanks!

-- 
Jens Axboe
Received on Thu Aug 02 2007 - 21:08:24 CEST

This archive was generated by hypermail 2.2.0 : Thu Aug 02 2007 - 21:30:01 CEST