Empty free list backoff for XtraDB

Registered by Laurynas Biveinis

Currently, if buf_LRU_get_free_block() does not find a free page on the free list, it loops with some wait while trying progressively harder to get a free page: evict and eventually flush from the LRU list, still checking the free list on each iteration. Even with [1], which implemented low-priority free list mutex acquisition for buf_LRU_get_free_block(), such looping results in free list mutex contention and LRU list mutex contention.

Address this by implementing a backoff scheme and never attempt to evict or flush a page from LRU itself, if the page cleaner thread is running. This is controlled through a new system variable innodb_empty_free_list_algorithm=legacy|backoff, with backoff being the default.

[1] https://blueprints.launchpad.net/percona-server/+spec/free-list-priority-refill

Blueprint information

Status:
Complete
Approver:
None
Priority:
High
Drafter:
Laurynas Biveinis
Direction:
Approved
Assignee:
Laurynas Biveinis
Definition:
Approved
Series goal:
Accepted for 5.6
Implementation:
Implemented
Milestone target:
milestone icon 5.6.13-61.0
Started by
Laurynas Biveinis
Completed by
Laurynas Biveinis

Whiteboard

(?)

Work Items

Dependency tree

* Blueprints in grey have been implemented.

This blueprint contains Public information 
Everyone can see this information.