Merge AIO page read requests (5.7)

Registered by Yura Sorokin on 2017-09-13

https://github.com/percona/percona-server/pull/1922

Porting https://blueprints.launchpad.net/percona-server/+spec/merge-aio-page-read-requests to 5.7

Submitting multiple async I/O requests at once
http://yoshinorimatsunobu.blogspot.com/2013/10/making-full-table-scan-10x-faster-in.html

Currently i/o unit size in InnoDB is only one page, even if doing read ahead. 16KB i/o unit size is too small for sequential reads, and much less efficient than larger I/O unit size.

In 5.6 InnoDB uses Linux Native I/O (aio) by default. If submitting multiple consecutive 16KB read requests at once, Linux internally can merge requests and reads can be done more efficiently.

See MySQL Bug #68659 (https://bugs.mysql.com/bug.php?id=68659). As written in the bug report, on modern HDD RAID 1+0 environment, more than 1000MB/s disk reads can be achieved by submitting 64 consecutive pages requests at once, while only 160MB/s disk reads is shown by submitting single page request.

The suggested fix is to make InnoDB submit multiple page i/o requests before calling io_submit().

Original WebScaleSQL commit:
https://github.com/facebook/mysql-5.6/commit/f9d1a53

Facebook MySQL 5.6 commit:
https://github.com/facebook/mysql-5.6/commit/210450a

Blueprint information

Status:
Complete
Approver:
Laurynas Biveinis
Priority:
High
Drafter:
Yura Sorokin
Direction:
Approved
Assignee:
Yura Sorokin
Definition:
Approved
Series goal:
Accepted for 5.7
Implementation:
Implemented
Milestone target:
milestone icon 5.7.20-18
Started by
Yura Sorokin on 2017-09-13
Completed by
Yura Sorokin on 2017-09-13

Related branches

Sprints

Whiteboard

(?)

Work Items

This blueprint contains Public information 
Everyone can see this information.

Subscribers

No subscribers.