Default aio submit retry (times and delay) sometimes is not enough for e.g. high density hdd osd under pressure.
Signed-off-by: haoyixing <haoyixing@kuaishou.com>
int aio_queue_t::submit_batch(aio_iter begin, aio_iter end,
void *priv,
- int *retries)
+ int *retries, int submit_retries, int initial_delay_us)
{
- // 2^16 * 125us = ~8 seconds, so max sleep is ~16 seconds
- int attempts = 16;
- int delay = 125;
+ // 2^16 * 125us = ~8 seconds, so default max sleep is ~16 seconds
+ int attempts = submit_retries;
+ uint64_t delay = initial_delay_us;
int r;
aio_iter cur = begin;
}
ceph_assert(r > 0);
done += r;
- attempts = 16;
- delay = 125;
+ attempts = submit_retries;
+ delay = initial_delay_us;
pushed = pulled = 0;
}
return done;
virtual int init(std::vector<int> &fds) = 0;
virtual void shutdown() = 0;
virtual int submit_batch(aio_iter begin, aio_iter end,
- void *priv, int *retries) = 0;
+ void *priv, int *retries, int submit_retries, int initial_delay_us) = 0;
virtual int get_next_completed(int timeout_ms, aio_t **paio, int max) = 0;
};
}
int submit_batch(aio_iter begin, aio_iter end,
- void *priv, int *retries) final;
+ void *priv, int *retries, int submit_retries, int initial_delay_us) final;
int get_next_completed(int timeout_ms, aio_t **paio, int max) final;
};
}
void *priv = static_cast<void*>(ioc);
+ int retry_max = cct->_conf->bdev_aio_submit_retry_max;
+ int initial_delay_us = cct->_conf->bdev_aio_submit_retry_initial_delay_us;
+ dout(20) << __func__
+ << " bdev_aio_submit_retry_max " << retry_max
+ << " bdev_aio_submit_retry_initial_delay_us " << initial_delay_us
+ << dendl;
int r, retries = 0;
r = io_queue->submit_batch(ioc->running_aios.begin(), e,
- priv, &retries);
+ priv, &retries, retry_max, initial_delay_us);
if (retries)
derr << __func__ << " retries " << retries << dendl;
int ioring_queue_t::submit_batch(aio_iter beg, aio_iter end,
void *priv,
- int *retries)
+ int *retries, int submit_retries, int initial_delay_us)
{
(void)retries;
int ioring_queue_t::submit_batch(aio_iter beg, aio_iter end,
void *priv,
- int *retries)
+ int *retries, int submit_retries, int initial_delay_us)
{
ceph_assert(0);
}
void shutdown() final;
int submit_batch(aio_iter begin, aio_iter end,
- void *priv, int *retries) final;
+ void *priv, int *retries, int submit_retries, int initial_delay_us) final;
int get_next_completed(int timeout_ms, aio_t **paio, int max) final;
};
level: advanced
default: 16
with_legacy: true
+- name: bdev_aio_submit_retry_max
+ type: int
+ level: advanced
+ default: 16
+ with_legacy: true
+- name: bdev_aio_submit_retry_initial_delay_us
+ type: int
+ level: advanced
+ default: 125
+ with_legacy: true
- name: bdev_block_size
type: size
level: advanced