| Bug #42547 | buf_read_ibuf_merge_pages calls os_aio_simulated_wake_handler threads too late | ||
|---|---|---|---|
| Submitted: | 2 Feb 2009 16:23 | Modified: | 16 Feb 2009 15:17 |
| Reporter: | Mark Callaghan | Email Updates: | |
| Status: | Not a Bug | Impact on me: | |
| Category: | MySQL Server: InnoDB storage engine | Severity: | S5 (Performance) |
| Version: | 5.0,5.1 | OS: | Any |
| Assigned to: | CPU Architecture: | Any | |
| Tags: | innodb, performance | ||
[2 Feb 2009 16:23]
Mark Callaghan
[3 Feb 2009 15:59]
Heikki Tuuri
Mark,
yes, you have found a performance bug!
buf_read_page_low(&err, sync && (i + 1 == n_stored),
BUF_READ_ANY_PAGE, space_ids[i],
zip_size, TRUE, space_versions[i],
page_nos[i]);
It starts to wait for the last page BEFORE it calls os_aio_simulated_wake_handler_threads();
That does not make sense. It should call it before.
--Heikki
[3 Feb 2009 17:26]
Inaam Rana
Mark, It is a little obscure but this is not a bug. When calling buf_read_page_low() we do not pass OS_AIO_SIMULATED_WAKE_LATER flag in the mode. Because of this, in lower level routine os_aio() we end up calling os_aio_simulated_wake_handler_thread(). I do agree though that it would be cleaner to call os_aio_simulated_wake_handler_thread() in buf_read_ibuf_merge_pages(). I am going to close this a !bug. regards, inaam
[16 Feb 2009 15:17]
Mark Callaghan
Then why is the call to os_aio_simulated_wake_handler_threads() needed at all? Also, the call to buf_flush_free_margin() is only needed when block read requests have been made. This code ignores the return value from buf_read_page_low so it cannot determine that.
