summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--storage/innobase/buf/buf0buf.cc2
-rw-r--r--storage/innobase/include/os0file.h3
-rw-r--r--storage/innobase/os/os0file.cc4
-rw-r--r--tpool/aio_linux.cc11
-rw-r--r--tpool/tpool.h2
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.