Пример #1
0
Файл: rand.c Проект: jeefke/fio
unsigned long fill_random_buf(void *buf, unsigned int len)
{
	unsigned long r = __rand(&__fio_rand_state);

	if (sizeof(int) != sizeof(long *))
		r *= (unsigned long) __rand(&__fio_rand_state);

	__fill_random_buf(buf, len, r);
	return r;
}
Пример #2
0
unsigned long fill_random_buf(struct frand_state *fs, void *buf,
			      unsigned int len)
{
	unsigned long r = __rand(fs);

	if (sizeof(int) != sizeof(long *))
		r *= (unsigned long) __rand(fs);

	__fill_random_buf(buf, len, r);
	return r;
}
Пример #3
0
Файл: rand.c Проект: chjs/fio
void __fill_random_buf_percentage(unsigned long seed, void *buf,
                                  unsigned int percentage,
                                  unsigned int segment, unsigned int len,
                                  char *pattern, unsigned int pbytes)
{
    unsigned int this_len;

    if (percentage == 100) {
        if (pbytes)
            (void)cpy_pattern(pattern, pbytes, buf, len);
        else
            memset(buf, 0, len);
        return;
    }

    if (segment > len)
        segment = len;

    while (len) {
        /*
         * Fill random chunk
         */
        this_len = (segment * (100 - percentage)) / 100;
        if (this_len > len)
            this_len = len;

        __fill_random_buf(buf, this_len, seed);

        len -= this_len;
        if (!len)
            break;
        buf += this_len;

        if (this_len > len)
            this_len = len;
        else if (len - this_len <= sizeof(long))
            this_len = len;

        if (pbytes)
            (void)cpy_pattern(pattern, pbytes, buf, this_len);
        else
            memset(buf, 0, this_len);

        len -= this_len;
        buf += this_len;
    }
}
Пример #4
0
void fill_pattern(struct thread_data *td, void *p, unsigned int len, struct io_u *io_u, unsigned long seed, int use_seed)
{
	switch (td->o.verify_pattern_bytes) {
	case 0:
		dprint(FD_VERIFY, "fill random bytes len=%u\n", len);
		if (use_seed)
			__fill_random_buf(p, len, seed);
		else
			io_u->rand_seed = fill_random_buf(&td->buf_state, p, len);
		break;
	case 1:
		if (io_u->buf_filled_len >= len) {
			dprint(FD_VERIFY, "using already filled verify pattern b=0 len=%u\n", len);
			return;
		}
		dprint(FD_VERIFY, "fill verify pattern b=0 len=%u\n", len);
		memset(p, td->o.verify_pattern[0], len);
		io_u->buf_filled_len = len;
		break;
	default: {
		unsigned int i = 0, size = 0;
		unsigned char *b = p;

		if (io_u->buf_filled_len >= len) {
			dprint(FD_VERIFY, "using already filled verify pattern b=%d len=%u\n",
					td->o.verify_pattern_bytes, len);
			return;
		}

		dprint(FD_VERIFY, "fill verify pattern b=%d len=%u\n",
					td->o.verify_pattern_bytes, len);

		while (i < len) {
			size = td->o.verify_pattern_bytes;
			if (size > (len - i))
				size = len - i;
			memcpy(b+i, td->o.verify_pattern, size);
			i += size;
		}
		io_u->buf_filled_len = len;
		break;
		}
	}
}
Пример #5
0
void fill_verify_pattern(struct thread_data *td, void *p, unsigned int len,
			 struct io_u *io_u, unsigned long seed, int use_seed)
{
	if (!td->o.verify_pattern_bytes) {
		dprint(FD_VERIFY, "fill random bytes len=%u\n", len);

		if (use_seed)
			__fill_random_buf(p, len, seed);
		else
			io_u->rand_seed = fill_random_buf(&td->buf_state, p, len);
		return;
	}
	
	if (io_u->buf_filled_len >= len) {
		dprint(FD_VERIFY, "using already filled verify pattern b=%d len=%u\n",
			td->o.verify_pattern_bytes, len);
		return;
	}

	fill_pattern(td, p, len, td->o.verify_pattern, td->o.verify_pattern_bytes);

	io_u->buf_filled_len = len;
}