- memset() remainder of buffer instead of copying random segment.
Provides more reliable compression (yes yes, you told me so).
- Allow 100 as well, just means full memset. Make that just set
zero_buffers=1 instead, since we only need to do it once
instead of for every write.
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
}
#endif
+ /*
+ * For fully compressible data, just zero them at init time.
+ * It's faster than repeatedly filling it.
+ */
+ if (td->o.compress_percentage == 100) {
+ td->o.zero_buffers = 1;
+ td->o.compress_percentage = 0;
+ }
+
return ret;
}
*/
#include <string.h>
-#include <assert.h>
#include "rand.h"
#include "../hash.h"
unsigned int percentage,
unsigned int segment, unsigned int len)
{
- unsigned int this_len, rep_len;
unsigned long r = __rand(fs);
+ unsigned int this_len;
- assert(segment <= len);
+ if (percentage == 100) {
+ memset(buf, 0, len);
+ return 0;
+ }
+
+ if (segment > len)
+ segment = len;
if (sizeof(int) != sizeof(long *))
r *= (unsigned long) __rand(fs);
len -= this_len;
buf += this_len;
- /*
- * Now duplicate random chunk in rest of buf
- */
- rep_len = segment - this_len;
- if (rep_len > len)
- rep_len = len;
+ if (this_len > len)
+ this_len = len;
- memcpy(buf, buf + rep_len, rep_len);
- buf += rep_len;
- len -= rep_len;
+ memset(buf, 0, this_len);
}
return r;