MySQL 9.3.0
Source Code Documentation
SimulatedAIOHandler Class Reference

Simulated AIO handler for reaping IO requests. More...

Public Member Functions

 SimulatedAIOHandler (AIO *array, ulint segment)
 Constructor. More...
 
 ~SimulatedAIOHandler ()
 Destructor. More...
 
void init (ulint n_slots)
 Reset the state of the handler. More...
 
Slotcheck_completed (ulint *n_reserved)
 Check if there is a slot for which the i/o has already been done. More...
 
bool select (std::chrono::steady_clock::time_point current_time)
 If there are at least 2 seconds old requests, then pick the oldest one to prevent starvation. More...
 
void merge ()
 Check if there are several consecutive blocks to read or write. More...
 
ulint allocate_buffer ()
 We have now collected n_consecutive I/O requests in the array; allocate a single buffer which can hold all data, and perform the I/O. More...
 
void copy_to_buffer (ulint len)
 We have to compress the individual pages and punch holes in them on a page by page basis when writing to tables that can be compressed at the IO level. More...
 
void io ()
 Do the I/O with ordinary, synchronous i/o functions: More...
 
void io_complete ()
 Do the decompression of the pages read in. More...
 
void done ()
 Mark the i/os done in slots. More...
 
Slotfirst_slot ()
 
ulint check_pending (ulint global_segment, os_event_t event)
 Wait for I/O requests. More...
 

Private Types

typedef std::vector< Slot * > slots_t
 

Private Member Functions

void read (Slot *slot)
 Do the file read. More...
 
void write (Slot *slot)
 Do the file write. More...
 
bool adjacent (const Slot *s1, const Slot *s2) const
 
bool merge_adjacent (Slot *&current)
 
bool select_lowest_offset ()
 There were no old requests. More...
 
bool select_oldest (std::chrono::steady_clock::time_point current_time)
 Select the oldest slot in the array if there are any older than 2s. More...
 

Private Attributes

ulint m_n_elems
 
AIOm_array
 
ulint m_n_slots
 
ulint m_segment
 
slots_t m_slots
 
bytem_buf
 

Detailed Description

Simulated AIO handler for reaping IO requests.

Member Typedef Documentation

◆ slots_t

typedef std::vector<Slot *> SimulatedAIOHandler::slots_t
private

Constructor & Destructor Documentation

◆ SimulatedAIOHandler()

SimulatedAIOHandler::SimulatedAIOHandler ( AIO array,
ulint  segment 
)
inline

Constructor.

Parameters
[in,out]arrayThe AIO array
[in]segmentLocal segment in the array

◆ ~SimulatedAIOHandler()

SimulatedAIOHandler::~SimulatedAIOHandler ( )
inline

Destructor.

Member Function Documentation

◆ adjacent()

bool SimulatedAIOHandler::adjacent ( const Slot s1,
const Slot s2 
) const
inlineprivate
Returns
true if the slots are adjacent and can be merged

◆ allocate_buffer()

ulint SimulatedAIOHandler::allocate_buffer ( )
inline

We have now collected n_consecutive I/O requests in the array; allocate a single buffer which can hold all data, and perform the I/O.

Returns
the length of the buffer

◆ check_completed()

Slot * SimulatedAIOHandler::check_completed ( ulint n_reserved)
inline

Check if there is a slot for which the i/o has already been done.

Parameters
[out]n_reservedNumber of reserved slots
Returns
the first completed slot that is found.

◆ check_pending()

ulint SimulatedAIOHandler::check_pending ( ulint  global_segment,
os_event_t  event 
)

Wait for I/O requests.

Parameters
[in]global_segmentThe global segment
[in,out]eventWait on event if no active requests
Returns
the number of slots
the number of slots

◆ copy_to_buffer()

void SimulatedAIOHandler::copy_to_buffer ( ulint  len)
inline

We have to compress the individual pages and punch holes in them on a page by page basis when writing to tables that can be compressed at the IO level.

Parameters
[in]lenValue returned by allocate_buffer

◆ done()

void SimulatedAIOHandler::done ( )
inline

Mark the i/os done in slots.

◆ first_slot()

Slot * SimulatedAIOHandler::first_slot ( )
inline
Returns
the first slot in the consecutive array

◆ init()

void SimulatedAIOHandler::init ( ulint  n_slots)
inline

Reset the state of the handler.

Parameters
[in]n_slotsNumber of pending AIO operations supported

◆ io()

void SimulatedAIOHandler::io ( )
inline

Do the I/O with ordinary, synchronous i/o functions:

◆ io_complete()

void SimulatedAIOHandler::io_complete ( )
inline

Do the decompression of the pages read in.

◆ merge()

void SimulatedAIOHandler::merge ( )
inline

Check if there are several consecutive blocks to read or write.

Merge them if found.

◆ merge_adjacent()

bool SimulatedAIOHandler::merge_adjacent ( Slot *&  current)
inlineprivate
Returns
true if merge limit reached or no adjacent slots found.

◆ read()

void SimulatedAIOHandler::read ( Slot slot)
inlineprivate

Do the file read.

Parameters
[in,out]slotSlot that has the IO context

◆ select()

bool SimulatedAIOHandler::select ( std::chrono::steady_clock::time_point  current_time)
inline

If there are at least 2 seconds old requests, then pick the oldest one to prevent starvation.

If several requests have the same age, then pick the one at the lowest offset.

Parameters
[in]current_timeTime of start of the slot selection.
Returns
true if request was selected

◆ select_lowest_offset()

bool SimulatedAIOHandler::select_lowest_offset ( )
inlineprivate

There were no old requests.

Look for an I/O request at the lowest offset in the array (we ignore the high 32 bits of the offset in these heuristics)

◆ select_oldest()

bool SimulatedAIOHandler::select_oldest ( std::chrono::steady_clock::time_point  current_time)
inlineprivate

Select the oldest slot in the array if there are any older than 2s.

Parameters
[in]current_timeTime of start of the slot selection.
Returns
true if any slot older than 2s is found

◆ write()

void SimulatedAIOHandler::write ( Slot slot)
inlineprivate

Do the file write.

Parameters
[in,out]slotSlot that has the IO context

Member Data Documentation

◆ m_array

AIO* SimulatedAIOHandler::m_array
private

◆ m_buf

byte* SimulatedAIOHandler::m_buf
private

◆ m_n_elems

ulint SimulatedAIOHandler::m_n_elems
private

◆ m_n_slots

ulint SimulatedAIOHandler::m_n_slots
private

◆ m_segment

ulint SimulatedAIOHandler::m_segment
private

◆ m_slots

slots_t SimulatedAIOHandler::m_slots
private

The documentation for this class was generated from the following file: