diff --git a/cfg/core_cfg.cfg_tmpl b/cfg/core_cfg.cfg_tmpl
index f2383cb0c1858ee91a7b0c10d00b9fe4fc5fdcf4..b2b930d91892b63d1aa571caac9200e175402b7b 100644
--- a/cfg/core_cfg.cfg_tmpl
+++ b/cfg/core_cfg.cfg_tmpl
@@ -37,9 +37,6 @@ logger_nonblock=1
 # delay between loop iteraions
 io_collect_interval=0.0
 
-# do not write snapshot faster then snap_io_rate_limit MBytes/sec
-snap_io_rate_limit=0.0
-
 # size of listen backlog
 backlog=1024
 
diff --git a/cfg/tarantool_feeder_cfg.c b/cfg/tarantool_feeder_cfg.c
index bb33f996722b115250b484daa8701278f74e3f15..3e48efce7485d063a53e976f90d25b0daca7d101 100644
--- a/cfg/tarantool_feeder_cfg.c
+++ b/cfg/tarantool_feeder_cfg.c
@@ -40,7 +40,6 @@ fill_default_tarantool_cfg(tarantool_cfg *c) {
 	c->logger = NULL;
 	c->logger_nonblock = 1;
 	c->io_collect_interval = 0;
-	c->snap_io_rate_limit = 0;
 	c->backlog = 1024;
 	c->readahead = 16320;
 	c->wal_feeder_bind_ipaddr = NULL;
@@ -86,9 +85,6 @@ static NameAtom _name__logger_nonblock[] = {
 static NameAtom _name__io_collect_interval[] = {
 	{ "io_collect_interval", -1, NULL }
 };
-static NameAtom _name__snap_io_rate_limit[] = {
-	{ "snap_io_rate_limit", -1, NULL }
-};
 static NameAtom _name__backlog[] = {
 	{ "backlog", -1, NULL }
 };
@@ -248,14 +244,6 @@ acceptValue(tarantool_cfg* c, OptDef* opt, int check_rdonly) {
 		if ( (c->io_collect_interval == 0 || c->io_collect_interval == -HUGE_VAL || c->io_collect_interval == HUGE_VAL) && errno == ERANGE)
 			return CNF_WRONGRANGE;
 	}
-	else if ( cmpNameAtoms( opt->name, _name__snap_io_rate_limit) ) {
-		if (opt->paramType != numberType )
-			return CNF_WRONGTYPE;
-		errno = 0;
-		c->snap_io_rate_limit = strtod(opt->paramValue.numberval, NULL);
-		if ( (c->snap_io_rate_limit == 0 || c->snap_io_rate_limit == -HUGE_VAL || c->snap_io_rate_limit == HUGE_VAL) && errno == ERANGE)
-			return CNF_WRONGRANGE;
-	}
 	else if ( cmpNameAtoms( opt->name, _name__backlog) ) {
 		if (opt->paramType != numberType )
 			return CNF_WRONGTYPE;
@@ -421,7 +409,6 @@ typedef enum IteratorState {
 	S_name__logger,
 	S_name__logger_nonblock,
 	S_name__io_collect_interval,
-	S_name__snap_io_rate_limit,
 	S_name__backlog,
 	S_name__readahead,
 	S_name__wal_feeder_bind_ipaddr,
@@ -578,17 +565,6 @@ tarantool_cfg_iterator_next(tarantool_cfg_iterator_t* i, tarantool_cfg *c, char
 			}
 			sprintf(*v, "%g", c->io_collect_interval);
 			snprintf(buf, PRINTBUFLEN-1, "io_collect_interval");
-			i->state = S_name__snap_io_rate_limit;
-			return buf;
-		case S_name__snap_io_rate_limit:
-			*v = malloc(32);
-			if (*v == NULL) {
-				free(i);
-				out_warning(CNF_NOMEMORY, "No memory to output value");
-				return NULL;
-			}
-			sprintf(*v, "%g", c->snap_io_rate_limit);
-			snprintf(buf, PRINTBUFLEN-1, "snap_io_rate_limit");
 			i->state = S_name__backlog;
 			return buf;
 		case S_name__backlog:
diff --git a/cfg/tarantool_feeder_cfg.cfg b/cfg/tarantool_feeder_cfg.cfg
index 31d357f247ec27ad9fd4f1de1b0ea65acab6f621..f6c7690bdd38b73ad4c9aadaae7208fdeda82204 100644
--- a/cfg/tarantool_feeder_cfg.cfg
+++ b/cfg/tarantool_feeder_cfg.cfg
@@ -39,9 +39,6 @@ logger_nonblock = 1
 # delay between loop iteraions
 io_collect_interval = 0
 
-# do not write snapshot faster then snap_io_rate_limit MBytes/sec
-snap_io_rate_limit = 0
-
 # size of listen backlog
 backlog = 1024
 
diff --git a/cfg/tarantool_feeder_cfg.cfg_tmpl b/cfg/tarantool_feeder_cfg.cfg_tmpl
index c3ce41678691dad8be0808a6ee3095b57cb01b95..c87a3980a1a4d85110054b9be70f25c0f598a697 100644
--- a/cfg/tarantool_feeder_cfg.cfg_tmpl
+++ b/cfg/tarantool_feeder_cfg.cfg_tmpl
@@ -42,9 +42,6 @@ logger_nonblock=1
 # delay between loop iteraions
 io_collect_interval=0.0
 
-# do not write snapshot faster then snap_io_rate_limit MBytes/sec
-snap_io_rate_limit=0.0
-
 # size of listen backlog
 backlog=1024
 
diff --git a/cfg/tarantool_feeder_cfg.h b/cfg/tarantool_feeder_cfg.h
index 0efdbfa1b0f95f4d3bfd9cf5b2f4f5acf1e17945..0f279b3e364f0065657a4d4deb5828ed715223d0 100644
--- a/cfg/tarantool_feeder_cfg.h
+++ b/cfg/tarantool_feeder_cfg.h
@@ -54,9 +54,6 @@ typedef struct tarantool_cfg {
 	/* delay between loop iteraions */
 	double	io_collect_interval;
 
-	/* do not write snapshot faster then snap_io_rate_limit MBytes/sec */
-	double	snap_io_rate_limit;
-
 	/* size of listen backlog */
 	int32_t	backlog;
 
diff --git a/cfg/tarantool_silverbox_cfg.c b/cfg/tarantool_silverbox_cfg.c
index caf93de716273b012481883fad04077c67807b05..361478850f5fde102e49a027ed5fd257098ed4bc 100644
--- a/cfg/tarantool_silverbox_cfg.c
+++ b/cfg/tarantool_silverbox_cfg.c
@@ -40,7 +40,6 @@ fill_default_tarantool_cfg(tarantool_cfg *c) {
 	c->logger = NULL;
 	c->logger_nonblock = 1;
 	c->io_collect_interval = 0;
-	c->snap_io_rate_limit = 0;
 	c->backlog = 1024;
 	c->readahead = 16320;
 	c->snap_dir = strdup(".");
@@ -55,6 +54,7 @@ fill_default_tarantool_cfg(tarantool_cfg *c) {
 	c->memcached_namespace = 23;
 	c->memcached_expire_per_loop = 1024;
 	c->memcached_expire_full_sweep = 3600;
+	c->snap_io_rate_limit = 0;
 	c->rows_per_wal = 500000;
 	c->wal_fsync_delay = 0;
 	c->wal_writer_inbox_size = 128;
@@ -129,9 +129,6 @@ static NameAtom _name__logger_nonblock[] = {
 static NameAtom _name__io_collect_interval[] = {
 	{ "io_collect_interval", -1, NULL }
 };
-static NameAtom _name__snap_io_rate_limit[] = {
-	{ "snap_io_rate_limit", -1, NULL }
-};
 static NameAtom _name__backlog[] = {
 	{ "backlog", -1, NULL }
 };
@@ -168,6 +165,9 @@ static NameAtom _name__memcached_expire_per_loop[] = {
 static NameAtom _name__memcached_expire_full_sweep[] = {
 	{ "memcached_expire_full_sweep", -1, NULL }
 };
+static NameAtom _name__snap_io_rate_limit[] = {
+	{ "snap_io_rate_limit", -1, NULL }
+};
 static NameAtom _name__rows_per_wal[] = {
 	{ "rows_per_wal", -1, NULL }
 };
@@ -367,14 +367,6 @@ acceptValue(tarantool_cfg* c, OptDef* opt, int check_rdonly) {
 		if ( (c->io_collect_interval == 0 || c->io_collect_interval == -HUGE_VAL || c->io_collect_interval == HUGE_VAL) && errno == ERANGE)
 			return CNF_WRONGRANGE;
 	}
-	else if ( cmpNameAtoms( opt->name, _name__snap_io_rate_limit) ) {
-		if (opt->paramType != numberType )
-			return CNF_WRONGTYPE;
-		errno = 0;
-		c->snap_io_rate_limit = strtod(opt->paramValue.numberval, NULL);
-		if ( (c->snap_io_rate_limit == 0 || c->snap_io_rate_limit == -HUGE_VAL || c->snap_io_rate_limit == HUGE_VAL) && errno == ERANGE)
-			return CNF_WRONGRANGE;
-	}
 	else if ( cmpNameAtoms( opt->name, _name__backlog) ) {
 		if (opt->paramType != numberType )
 			return CNF_WRONGTYPE;
@@ -495,6 +487,14 @@ acceptValue(tarantool_cfg* c, OptDef* opt, int check_rdonly) {
 			return CNF_WRONGRANGE;
 		c->memcached_expire_full_sweep = i32;
 	}
+	else if ( cmpNameAtoms( opt->name, _name__snap_io_rate_limit) ) {
+		if (opt->paramType != numberType )
+			return CNF_WRONGTYPE;
+		errno = 0;
+		c->snap_io_rate_limit = strtod(opt->paramValue.numberval, NULL);
+		if ( (c->snap_io_rate_limit == 0 || c->snap_io_rate_limit == -HUGE_VAL || c->snap_io_rate_limit == HUGE_VAL) && errno == ERANGE)
+			return CNF_WRONGRANGE;
+	}
 	else if ( cmpNameAtoms( opt->name, _name__rows_per_wal) ) {
 		if (opt->paramType != numberType )
 			return CNF_WRONGTYPE;
@@ -769,7 +769,6 @@ typedef enum IteratorState {
 	S_name__logger,
 	S_name__logger_nonblock,
 	S_name__io_collect_interval,
-	S_name__snap_io_rate_limit,
 	S_name__backlog,
 	S_name__readahead,
 	S_name__snap_dir,
@@ -782,6 +781,7 @@ typedef enum IteratorState {
 	S_name__memcached_namespace,
 	S_name__memcached_expire_per_loop,
 	S_name__memcached_expire_full_sweep,
+	S_name__snap_io_rate_limit,
 	S_name__rows_per_wal,
 	S_name__wal_fsync_delay,
 	S_name__wal_writer_inbox_size,
@@ -953,17 +953,6 @@ tarantool_cfg_iterator_next(tarantool_cfg_iterator_t* i, tarantool_cfg *c, char
 			}
 			sprintf(*v, "%g", c->io_collect_interval);
 			snprintf(buf, PRINTBUFLEN-1, "io_collect_interval");
-			i->state = S_name__snap_io_rate_limit;
-			return buf;
-		case S_name__snap_io_rate_limit:
-			*v = malloc(32);
-			if (*v == NULL) {
-				free(i);
-				out_warning(CNF_NOMEMORY, "No memory to output value");
-				return NULL;
-			}
-			sprintf(*v, "%g", c->snap_io_rate_limit);
-			snprintf(buf, PRINTBUFLEN-1, "snap_io_rate_limit");
 			i->state = S_name__backlog;
 			return buf;
 		case S_name__backlog:
@@ -1093,6 +1082,17 @@ tarantool_cfg_iterator_next(tarantool_cfg_iterator_t* i, tarantool_cfg *c, char
 			}
 			sprintf(*v, "%"PRId32, c->memcached_expire_full_sweep);
 			snprintf(buf, PRINTBUFLEN-1, "memcached_expire_full_sweep");
+			i->state = S_name__snap_io_rate_limit;
+			return buf;
+		case S_name__snap_io_rate_limit:
+			*v = malloc(32);
+			if (*v == NULL) {
+				free(i);
+				out_warning(CNF_NOMEMORY, "No memory to output value");
+				return NULL;
+			}
+			sprintf(*v, "%g", c->snap_io_rate_limit);
+			snprintf(buf, PRINTBUFLEN-1, "snap_io_rate_limit");
 			i->state = S_name__rows_per_wal;
 			return buf;
 		case S_name__rows_per_wal:
diff --git a/cfg/tarantool_silverbox_cfg.cfg b/cfg/tarantool_silverbox_cfg.cfg
index 8a3668cdc5940f96f0a7727c0b2e2732d162c9a3..162e07540db3c17cfb22331f06a49e484d0008cb 100644
--- a/cfg/tarantool_silverbox_cfg.cfg
+++ b/cfg/tarantool_silverbox_cfg.cfg
@@ -39,9 +39,6 @@ logger_nonblock = 1
 # delay between loop iteraions
 io_collect_interval = 0
 
-# do not write snapshot faster then snap_io_rate_limit MBytes/sec
-snap_io_rate_limit = 0
-
 # size of listen backlog
 backlog = 1024
 
@@ -79,6 +76,9 @@ memcached_expire_per_loop = 1024
 # tarantool will try iterate all rows within this time
 memcached_expire_full_sweep = 3600
 
+# do not write snapshot faster then snap_io_rate_limit MBytes/sec
+snap_io_rate_limit = 0
+
 # Write no more rows in WAL
 rows_per_wal = 500000
 
diff --git a/cfg/tarantool_silverbox_cfg.cfg_tmpl b/cfg/tarantool_silverbox_cfg.cfg_tmpl
index 264a62d751a3ac9f7acd952d9559e93a789b72e8..b59c1a6e558ba8c2c01707059ca7773ada53ec55 100644
--- a/cfg/tarantool_silverbox_cfg.cfg_tmpl
+++ b/cfg/tarantool_silverbox_cfg.cfg_tmpl
@@ -42,9 +42,6 @@ logger_nonblock=1
 # delay between loop iteraions
 io_collect_interval=0.0
 
-# do not write snapshot faster then snap_io_rate_limit MBytes/sec
-snap_io_rate_limit=0.0
-
 # size of listen backlog
 backlog=1024
 
@@ -79,6 +76,11 @@ memcached_expire_per_loop=1024
 # tarantool will try iterate all rows within this time
 memcached_expire_full_sweep=3600
 
+
+# do not write snapshot faster then snap_io_rate_limit MBytes/sec
+snap_io_rate_limit=0.0
+
+
 # Write no more rows in WAL
 rows_per_wal=500000
 
diff --git a/cfg/tarantool_silverbox_cfg.h b/cfg/tarantool_silverbox_cfg.h
index b548b064cce9a9516066f82b2cf2916e93e6d90b..5178a74ce4badf33ffb9cc24d15ae31687ae017d 100644
--- a/cfg/tarantool_silverbox_cfg.h
+++ b/cfg/tarantool_silverbox_cfg.h
@@ -72,9 +72,6 @@ typedef struct tarantool_cfg {
 	/* delay between loop iteraions */
 	double	io_collect_interval;
 
-	/* do not write snapshot faster then snap_io_rate_limit MBytes/sec */
-	double	snap_io_rate_limit;
-
 	/* size of listen backlog */
 	int32_t	backlog;
 
@@ -114,6 +111,9 @@ typedef struct tarantool_cfg {
 	/* tarantool will try iterate all rows within this time */
 	int32_t	memcached_expire_full_sweep;
 
+	/* do not write snapshot faster then snap_io_rate_limit MBytes/sec */
+	double	snap_io_rate_limit;
+
 	/* Write no more rows in WAL */
 	int32_t	rows_per_wal;
 
diff --git a/core/log_io.c b/core/log_io.c
index a3483070076d83b8c45c6fe75328b0db74323755..8061104cc30e3b52a9586fbb711086459e02a0b1 100644
--- a/core/log_io.c
+++ b/core/log_io.c
@@ -1281,7 +1281,7 @@ wal_write(struct recovery_state *r, i64 lsn, struct tbuf *data)
 struct recovery_state *
 recover_init(const char *snap_dirname, const char *wal_dirname,
 	     row_reader snap_row_reader, row_handler snap_row_handler, row_handler wal_row_handler,
-	     int rows_per_file, double fsync_delay, double snap_io_rate_limit,
+	     int rows_per_file, double fsync_delay,
 	     int inbox_size, int flags, void *data)
 {
 	struct recovery_state *r = p0alloc(eter_pool, sizeof(*r));
@@ -1299,10 +1299,9 @@ recover_init(const char *snap_dirname, const char *wal_dirname,
 	r->wal_prefered_class->rows_per_file = rows_per_file;
 	r->wal_prefered_class->fsync_delay = fsync_delay;
 
-	if ((flags & RECOVER_READONLY) == 0) {
+	if ((flags & RECOVER_READONLY) == 0)
 		r->wal_writer = spawn_child("wal_writer", inbox_size, write_to_disk, r);
-		r->snap_io_rate_limit = snap_io_rate_limit * 1024 * 1024;
-	}
+
 	return r;
 }
 
diff --git a/include/log_io.h b/include/log_io.h
index fe20ccf40f22638281f636ac9e3a1f18fa43bb65..02f75308a6f8d4d341580a443083606d6ce0f4d8 100644
--- a/include/log_io.h
+++ b/include/log_io.h
@@ -117,7 +117,7 @@ struct tbuf *convert_to_v11(struct tbuf *orig, i64 lsn);
 struct recovery_state *recover_init(const char *snap_dirname, const char *xlog_dirname,
 				    row_reader snap_row_reader, row_handler snap_row_handler,
 				    row_handler xlog_row_handler, int rows_per_file,
-				    double fsync_delay, double snap_io_rate_limit, int inbox_size,
+				    double fsync_delay, int inbox_size,
 				    int flags, void *data);
 int recover(struct recovery_state *, i64 lsn);
 void recover_follow(struct recovery_state *r, ev_tstamp wal_dir_rescan_delay);
diff --git a/mod/silverbox/box.c b/mod/silverbox/box.c
index cc246d5aaaae6a239f1f058c3251e994396c6528..c3e881c0965d0718024328cb350b6a9bf0878059 100644
--- a/mod/silverbox/box.c
+++ b/mod/silverbox/box.c
@@ -1770,10 +1770,12 @@ mod_init(void)
 
 	recovery_state = recover_init(cfg.snap_dir, cfg.wal_dir,
 				      box_snap_reader, snap_apply, xlog_apply,
-				      cfg.rows_per_wal, cfg.wal_fsync_delay, cfg.snap_io_rate_limit,
+				      cfg.rows_per_wal, cfg.wal_fsync_delay,
 				      cfg.wal_writer_inbox_size,
 				      init_storage ? RECOVER_READONLY : 0, NULL);
 
+	recovery_state->snap_io_rate_limit = cfg.snap_io_rate_limit * 1024 * 1024;
+
 	/* initialize hashes _after_ starting wal writer */
 	if (cfg.memcached != 0) {
 		int n = cfg.memcached_namespace > 0 ? cfg.memcached_namespace : MEMCACHED_NAMESPACE;
diff --git a/mod/silverbox/box_cfg.cfg_tmpl b/mod/silverbox/box_cfg.cfg_tmpl
index 54ca6ca3eeca6bad879afedf460f059f98f45907..c8d8d2544d0dfc60c51507e60fcfed8caa0b7ba5 100644
--- a/mod/silverbox/box_cfg.cfg_tmpl
+++ b/mod/silverbox/box_cfg.cfg_tmpl
@@ -28,6 +28,11 @@ memcached_expire_per_loop=1024
 # tarantool will try iterate all rows within this time
 memcached_expire_full_sweep=3600
 
+
+# do not write snapshot faster then snap_io_rate_limit MBytes/sec
+snap_io_rate_limit=0.0
+
+
 # Write no more rows in WAL
 rows_per_wal=500000