Peter (Stig) Edwards
f8d8cf53fe
Fix log_write_bench -bytes_per_sync option. (#1375)
Hello and thanks for RocksDB,
When log_write_bench is run with the -bytes_per_sync option, the option does not influence any *sync* behaviour.
> strace -e trace=write,sync_file_range ./log_write_bench -record_interval 0 -record_size 1048576 -num_records 11 -bytes_per_sync 2097152 2>&1 | egrep '^(sync|write.*XXXX)'
write(3, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"..., 1048576) = 1048576
write(3, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"..., 1048576) = 1048576
write(3, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"..., 1048576) = 1048576
write(3, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"..., 1048576) = 1048576
write(3, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"..., 1048576) = 1048576
write(3, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"..., 1048576) = 1048576
write(3, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"..., 1048576) = 1048576
write(3, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"..., 1048576) = 1048576
write(3, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"..., 1048576) = 1048576
write(3, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"..., 1048576) = 1048576
write(3, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"..., 1048576) = 1048576
I suspect that this is because the bytes_per_sync option now needs to be using a `WritableFileWriter` and not a `WritableFile`.
With the diff below applied, it changes to:
> strace -e trace=write,sync_file_range ./log_write_bench -record_interval 0 -record_size 1048576 -num_records 11 -bytes_per_sync 2097152 2>&1 | egrep '^(sync|write.*XXXX)'
write(3, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"..., 1048576) = 1048576
write(3, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"..., 1048576) = 1048576
write(3, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"..., 1048576) = 1048576
sync_file_range(0x3, 0, 0x200000, 0x2) = 0
write(3, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"..., 1048576) = 1048576
write(3, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"..., 1048576) = 1048576
sync_file_range(0x3, 0x200000, 0x200000, 0x2) = 0
write(3, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"..., 1048576) = 1048576
write(3, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"..., 1048576) = 1048576
sync_file_range(0x3, 0x400000, 0x200000, 0x2) = 0
write(3, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"..., 1048576) = 1048576
write(3, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"..., 1048576) = 1048576
sync_file_range(0x3, 0x600000, 0x200000, 0x2) = 0
write(3, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"..., 1048576) = 1048576
write(3, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"..., 1048576) = 1048576
sync_file_range(0x3, 0x800000, 0x200000, 0x2) = 0
( Note that the first 1MB is not synced as mentioned in util/file_reader_writer.cc::WritableFileWriter::Flush() )
This diff also includes the fix from https://github.com/facebook/rocksdb/pull/1373
> diff -du util/log_write_bench.cc.orig util/log_write_bench.cc
--- util/log_write_bench.cc.orig 2016-10-04 12:06:29.115122580 -0400
+++ util/log_write_bench.cc 2016-10-05 07:24:09.677037576 -0400
@@ -14,6 +14,7 @@
#include <gflags/gflags.h>
#include "rocksdb/env.h"
+#include "util/file_reader_writer.h"
#include "util/histogram.h"
#include "util/testharness.h"
#include "util/testutil.h"
@@ -38,19 +39,21 @@
env_options.bytes_per_sync = FLAGS_bytes_per_sync;
unique_ptr<WritableFile> file;
env->NewWritableFile(file_name, &file, env_options);
+ unique_ptr<WritableFileWriter> writer;
+ writer.reset(new WritableFileWriter(std::move(file), env_options));
std::string record;
- record.assign('X', FLAGS_record_size);
+ record.assign(FLAGS_record_size, 'X');
HistogramImpl hist;
uint64_t start_time = env->NowMicros();
for (int i = 0; i < FLAGS_num_records; i++) {
uint64_t start_nanos = env->NowNanos();
- file->Append(record);
- file->Flush();
+ writer->Append(record);
+ writer->Flush();
if (FLAGS_enable_sync) {
- file->Sync();
+ writer->Sync(false);
}
hist.Add(env->NowNanos() - start_nanos);
2016-10-11 16:45:51 -07:00
..
2016-02-09 15:12:00 -08:00
2016-02-09 15:12:00 -08:00
2016-02-09 15:12:00 -08:00
2016-08-10 13:52:23 -07:00
2016-02-09 15:12:00 -08:00
2016-05-20 07:42:18 -07:00
2016-02-09 15:12:00 -08:00
2016-02-09 15:12:00 -08:00
2016-02-09 15:12:00 -08:00
2016-02-09 15:12:00 -08:00
2016-08-19 12:28:19 -07:00
2016-08-29 10:40:00 -07:00
2016-10-07 17:21:45 -07:00
2016-10-07 17:21:45 -07:00
2016-02-09 15:12:00 -08:00
2016-08-31 08:56:34 -07:00
2016-08-19 12:28:19 -07:00
2016-02-09 15:12:00 -08:00
2016-02-09 15:12:00 -08:00
2016-08-19 15:10:31 -07:00
2016-08-16 08:21:43 -07:00
2016-04-25 23:02:14 -07:00
2016-09-06 12:22:16 -07:00
2016-02-09 15:12:00 -08:00
2016-02-09 15:12:00 -08:00
2016-02-09 15:12:00 -08:00
2016-02-09 15:12:00 -08:00
2016-02-09 15:12:00 -08:00
2016-09-23 16:34:04 -07:00
2016-09-23 16:34:04 -07:00
2016-10-07 14:05:12 -07:00
2016-02-09 15:12:00 -08:00
2016-02-09 15:12:00 -08:00
2016-07-08 17:50:51 -07:00
2016-02-09 15:12:00 -08:00
2016-02-09 15:12:00 -08:00
2016-08-19 15:10:31 -07:00
2016-09-13 12:08:22 -07:00
2016-05-06 17:42:50 -07:00
2016-09-07 12:37:45 -07:00
2016-09-13 12:08:22 -07:00
2016-09-16 17:45:12 -07:00
2016-02-09 15:12:00 -08:00
2016-02-09 15:12:00 -08:00
2016-02-09 15:12:00 -08:00
2016-02-09 15:12:00 -08:00
2016-05-10 14:06:07 -07:00
2016-05-10 14:06:07 -07:00
2016-02-09 15:12:00 -08:00
2016-08-05 10:31:41 -07:00
2016-08-05 10:31:41 -07:00
2016-09-23 16:34:04 -07:00
2016-09-23 16:34:04 -07:00
2016-02-09 15:12:00 -08:00
2016-02-09 15:12:00 -08:00
2016-02-09 15:12:00 -08:00
2016-07-15 10:41:36 -07:00
2016-02-09 15:12:00 -08:00
2016-02-09 15:12:00 -08:00
2016-03-11 22:56:25 -08:00
2016-03-17 14:28:41 -07:00
2016-03-11 16:54:25 -08:00
2016-03-15 11:38:15 -07:00
2016-03-11 16:54:25 -08:00
2016-09-01 19:57:55 -07:00
2016-02-09 15:12:00 -08:00
2016-09-13 12:08:22 -07:00
2016-09-13 12:08:22 -07:00
2016-02-09 15:12:00 -08:00
2016-02-23 10:26:24 -08:00
2016-02-23 10:26:24 -08:00
2016-02-09 15:12:00 -08:00
2016-02-09 15:12:00 -08:00
2016-02-09 15:12:00 -08:00
2016-10-11 16:45:51 -07:00
2016-02-09 15:12:00 -08:00
2016-02-09 15:12:00 -08:00
2016-08-19 16:43:31 -07:00
2016-08-23 13:53:49 -07:00
2016-08-23 13:44:13 -07:00
2016-05-27 12:10:26 -07:00
2016-06-03 15:13:03 -07:00
2016-05-27 12:10:26 -07:00
2016-02-09 15:12:00 -08:00
2016-02-09 15:12:00 -08:00
2016-02-09 15:12:00 -08:00
2016-07-19 12:01:46 -07:00
2016-09-23 16:34:04 -07:00
2016-10-07 17:21:45 -07:00
2016-09-13 21:12:43 -07:00
2016-02-09 15:12:00 -08:00
2016-02-09 15:12:00 -08:00
2016-02-09 15:12:00 -08:00
2016-10-07 17:21:45 -07:00
2016-09-13 21:12:43 -07:00
2016-10-07 17:21:45 -07:00
2016-02-17 20:22:40 +08:00
2016-02-09 15:12:00 -08:00
2016-02-09 15:12:00 -08:00
2016-06-01 09:07:09 -07:00
2016-02-09 15:12:00 -08:00
2016-07-07 11:35:40 -07:00
2016-02-09 15:12:00 -08:00
2016-03-16 22:57:57 +01:00
2016-09-20 12:28:59 -07:00
2016-07-01 00:16:29 -07:00
2016-05-27 16:15:28 -07:00
2016-09-01 13:50:39 -07:00
2016-09-01 13:50:39 -07:00
2016-02-09 15:12:00 -08:00
2016-06-10 16:37:36 -07:00
2016-02-18 11:25:19 -08:00
2016-02-17 15:20:23 -08:00
2016-07-25 16:05:50 -07:00
2016-10-11 10:54:11 -07:00
2016-10-11 10:54:11 -07:00
2016-09-07 12:37:45 -07:00
2016-09-07 12:37:45 -07:00
2016-04-01 11:06:06 -07:00
2016-08-02 14:53:29 -07:00
2016-02-09 15:12:00 -08:00
2016-06-29 07:35:17 -07:00
2016-08-16 06:19:46 -07:00
2016-07-07 11:29:14 -07:00
2016-02-09 15:12:00 -08:00
2016-02-09 15:12:00 -08:00
2016-10-07 17:21:45 -07:00
2016-10-07 14:05:12 -07:00
2016-02-09 15:12:00 -08:00
2016-08-23 13:34:56 -07:00
2016-08-22 15:37:39 -07:00
2016-08-22 15:37:39 -07:00
2016-02-09 15:12:00 -08:00
2016-02-09 15:12:00 -08:00
2016-02-09 15:12:00 -08:00
2016-03-04 16:03:31 -08:00
2016-02-09 15:12:00 -08:00
2016-02-09 15:12:00 -08:00
2016-02-09 15:12:00 -08:00
2016-02-09 15:12:00 -08:00
2016-09-02 17:10:28 -07:00
2016-08-26 10:41:35 -07:00
2016-03-11 15:16:52 -08:00
2016-03-15 10:57:33 -07:00
2016-02-09 15:12:00 -08:00
2016-02-09 15:12:00 -08:00
2015-11-18 16:23:19 -08:00
2015-03-12 12:07:10 -07:00