Skip to content

Commit 3667f4a

Browse files
committed
os/bluestore: make retry_max and initial_delay configurable for aio submit_batch
Default aio submit retry (times and delay) sometimes is not enough for e.g. high density hdd osd under pressure. Signed-off-by: haoyixing <[email protected]>
1 parent 298079e commit 3667f4a

File tree

6 files changed

+28
-12
lines changed

6 files changed

+28
-12
lines changed

src/blk/aio/aio.cc

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ std::ostream& operator<<(std::ostream& os, const aio_t& aio)
1717

1818
int aio_queue_t::submit_batch(aio_iter begin, aio_iter end,
1919
void *priv,
20-
int *retries)
20+
int *retries, int submit_retries, int initial_delay_us)
2121
{
22-
// 2^16 * 125us = ~8 seconds, so max sleep is ~16 seconds
23-
int attempts = 16;
24-
int delay = 125;
22+
// 2^16 * 125us = ~8 seconds, so default max sleep is ~16 seconds
23+
int attempts = submit_retries;
24+
uint64_t delay = initial_delay_us;
2525
int r;
2626

2727
aio_iter cur = begin;
@@ -74,8 +74,8 @@ int aio_queue_t::submit_batch(aio_iter begin, aio_iter end,
7474
}
7575
ceph_assert(r > 0);
7676
done += r;
77-
attempts = 16;
78-
delay = 125;
77+
attempts = submit_retries;
78+
delay = initial_delay_us;
7979
pushed = pulled = 0;
8080
}
8181
return done;

src/blk/aio/aio.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ struct io_queue_t {
101101
virtual int init(std::vector<int> &fds) = 0;
102102
virtual void shutdown() = 0;
103103
virtual int submit_batch(aio_iter begin, aio_iter end,
104-
void *priv, int *retries) = 0;
104+
void *priv, int *retries, int submit_retries, int initial_delay_us) = 0;
105105
virtual int get_next_completed(int timeout_ms, aio_t **paio, int max) = 0;
106106
};
107107

@@ -154,6 +154,6 @@ struct aio_queue_t final : public io_queue_t {
154154
}
155155

156156
int submit_batch(aio_iter begin, aio_iter end,
157-
void *priv, int *retries) final;
157+
void *priv, int *retries, int submit_retries, int initial_delay_us) final;
158158
int get_next_completed(int timeout_ms, aio_t **paio, int max) final;
159159
};

src/blk/kernel/KernelDevice.cc

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -944,9 +944,15 @@ void KernelDevice::aio_submit(IOContext *ioc)
944944
}
945945

946946
void *priv = static_cast<void*>(ioc);
947+
int retry_max = cct->_conf->bdev_aio_submit_retry_max;
948+
int initial_delay_us = cct->_conf->bdev_aio_submit_retry_initial_delay_us;
949+
dout(20) << __func__
950+
<< " bdev_aio_submit_retry_max " << retry_max
951+
<< " bdev_aio_submit_retry_initial_delay_us " << initial_delay_us
952+
<< dendl;
947953
int r, retries = 0;
948954
r = io_queue->submit_batch(ioc->running_aios.begin(), e,
949-
priv, &retries);
955+
priv, &retries, retry_max, initial_delay_us);
950956

951957
if (retries)
952958
derr << __func__ << " retries " << retries << dendl;

src/blk/kernel/io_uring.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ void ioring_queue_t::shutdown()
177177

178178
int ioring_queue_t::submit_batch(aio_iter beg, aio_iter end,
179179
void *priv,
180-
int *retries)
180+
int *retries, int submit_retries, int initial_delay_us)
181181
{
182182
(void)retries;
183183

@@ -245,7 +245,7 @@ void ioring_queue_t::shutdown()
245245

246246
int ioring_queue_t::submit_batch(aio_iter beg, aio_iter end,
247247
void *priv,
248-
int *retries)
248+
int *retries, int submit_retries, int initial_delay_us)
249249
{
250250
ceph_assert(0);
251251
}

src/blk/kernel/io_uring.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,6 @@ struct ioring_queue_t final : public io_queue_t {
2828
void shutdown() final;
2929

3030
int submit_batch(aio_iter begin, aio_iter end,
31-
void *priv, int *retries) final;
31+
void *priv, int *retries, int submit_retries, int initial_delay_us) final;
3232
int get_next_completed(int timeout_ms, aio_t **paio, int max) final;
3333
};

src/common/options/global.yaml.in

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4048,6 +4048,16 @@ options:
40484048
level: advanced
40494049
default: 16
40504050
with_legacy: true
4051+
- name: bdev_aio_submit_retry_max
4052+
type: int
4053+
level: advanced
4054+
default: 16
4055+
with_legacy: true
4056+
- name: bdev_aio_submit_retry_initial_delay_us
4057+
type: int
4058+
level: advanced
4059+
default: 125
4060+
with_legacy: true
40514061
- name: bdev_block_size
40524062
type: size
40534063
level: advanced

0 commit comments

Comments
 (0)