diff options
-rw-r--r-- | storage/innobase/buf/buf0buf.cc | 2 | ||||
-rw-r--r-- | storage/innobase/include/os0file.h | 3 | ||||
-rw-r--r-- | storage/innobase/os/os0file.cc | 4 | ||||
-rw-r--r-- | tpool/aio_linux.cc | 11 | ||||
-rw-r--r-- | tpool/tpool.h | 2 |
5 files changed, 10 insertions, 12 deletions
diff --git a/storage/innobase/buf/buf0buf.cc b/storage/innobase/buf/buf0buf.cc index 2ddd9f278b1..f3ad84a4853 100644 --- a/storage/innobase/buf/buf0buf.cc +++ b/storage/innobase/buf/buf0buf.cc @@ -1467,7 +1467,7 @@ bool buf_pool_t::create() ut_d(lru_scan_itr.m_mutex= &mutex); io_buf.create((srv_n_read_io_threads + srv_n_write_io_threads) * - OS_AIO_N_PENDING_IOS_PER_THREAD); + tpool::aio::N_PENDING); /* FIXME: remove some of these variables */ srv_buf_pool_curr_size= curr_pool_size; diff --git a/storage/innobase/include/os0file.h b/storage/innobase/include/os0file.h index 5e0039304b0..c82375e4f5f 100644 --- a/storage/innobase/include/os0file.h +++ b/storage/innobase/include/os0file.h @@ -265,9 +265,6 @@ struct os_file_size_t { os_offset_t m_alloc_size; }; -/** Win NT does not allow more than 64 */ -static const ulint OS_AIO_N_PENDING_IOS_PER_THREAD = 256; - extern ulint os_n_file_reads; extern ulint os_n_file_writes; extern ulint os_n_fsyncs; diff --git a/storage/innobase/os/os0file.cc b/storage/innobase/os/os0file.cc index ee7f09ec17f..6e8aacbe799 100644 --- a/storage/innobase/os/os0file.cc +++ b/storage/innobase/os/os0file.cc @@ -4027,8 +4027,8 @@ static bool is_linux_native_aio_supported() bool os_aio_init(ulint n_reader_threads, ulint n_writer_threads, ulint) { - int max_write_events= int(n_writer_threads * OS_AIO_N_PENDING_IOS_PER_THREAD); - int max_read_events= int(n_reader_threads * OS_AIO_N_PENDING_IOS_PER_THREAD); + int max_write_events= int(n_writer_threads * tpool::aio::N_PENDING); + int max_read_events= int(n_reader_threads * tpool::aio::N_PENDING); int max_events = max_read_events + max_write_events; int ret; diff --git a/tpool/aio_linux.cc b/tpool/aio_linux.cc index 51b656a604b..cb967c117e4 100644 --- a/tpool/aio_linux.cc +++ b/tpool/aio_linux.cc @@ -60,27 +60,26 @@ class aio_linux final : public aio static void getevent_thread_routine(aio_linux *aio) { - io_event events[1]; + io_event events[N_PENDING]; for (;;) { - switch (int ret= my_getevents(aio->m_io_ctx, 1, 1, events)) { + switch (int ret= my_getevents(aio->m_io_ctx, 1, N_PENDING, events)) { case -EINTR: - case 0: continue; case -EINVAL: if (shutdown_in_progress) return; /* fall through */ default: - if (ret != 1) + if (ret < 0) { fprintf(stderr, "io_getevents returned %d\n", ret); abort(); return; } - else + for (int i= 0; i < ret; i++) { - const io_event &event= events[0]; + const io_event &event= events[i]; aiocb *iocb= static_cast<aiocb*>(event.obj); if (static_cast<int>(event.res) < 0) { diff --git a/tpool/tpool.h b/tpool/tpool.h index 0d83af5bd74..a2f9a9133cb 100644 --- a/tpool/tpool.h +++ b/tpool/tpool.h @@ -155,6 +155,8 @@ struct aiocb class aio { public: + /** Maximum number of pending requests per thread */ + static constexpr unsigned N_PENDING= 256; /** Submit asyncronous IO. On completion, cb->m_callback is executed. |