Commit b4924e24 authored by Vadim Tkachenko's avatar Vadim Tkachenko

Sync optimistic_margine_count

parent b89957b3
...@@ -2850,7 +2850,7 @@ buf_page_create( ...@@ -2850,7 +2850,7 @@ buf_page_create(
ibuf_merge_or_delete_for_page(NULL, space, offset, zip_size, TRUE); ibuf_merge_or_delete_for_page(NULL, space, offset, zip_size, TRUE);
/* Flush pages from the end of the LRU list if necessary */ /* Flush pages from the end of the LRU list if necessary */
buf_flush_free_margin(); buf_flush_free_margin(FALSE);
frame = block->frame; frame = block->frame;
......
...@@ -151,7 +151,7 @@ buf_flush_ready_for_replace( ...@@ -151,7 +151,7 @@ buf_flush_ready_for_replace(
buf_page_t* bpage) /* in: buffer control block, must be buf_page_t* bpage) /* in: buffer control block, must be
buf_page_in_file(bpage) and in the LRU list */ buf_page_in_file(bpage) and in the LRU list */
{ {
ut_ad(buf_pool_mutex_own()); //ut_ad(buf_pool_mutex_own());
ut_ad(mutex_own(buf_page_get_mutex(bpage))); ut_ad(mutex_own(buf_page_get_mutex(bpage)));
ut_ad(bpage->in_LRU_list); ut_ad(bpage->in_LRU_list);
...@@ -162,6 +162,8 @@ buf_flush_ready_for_replace( ...@@ -162,6 +162,8 @@ buf_flush_ready_for_replace(
&& bpage->buf_fix_count == 0); && bpage->buf_fix_count == 0);
} }
/* permited not to own LRU_mutex.. */
/*
ut_print_timestamp(stderr); ut_print_timestamp(stderr);
fprintf(stderr, fprintf(stderr,
" InnoDB: Error: buffer block state %lu" " InnoDB: Error: buffer block state %lu"
...@@ -169,6 +171,7 @@ buf_flush_ready_for_replace( ...@@ -169,6 +171,7 @@ buf_flush_ready_for_replace(
(ulong) buf_page_get_state(bpage)); (ulong) buf_page_get_state(bpage));
ut_print_buf(stderr, bpage, sizeof(buf_page_t)); ut_print_buf(stderr, bpage, sizeof(buf_page_t));
putc('\n', stderr); putc('\n', stderr);
*/
return(FALSE); return(FALSE);
} }
...@@ -1190,7 +1193,7 @@ buf_flush_LRU_recommendation(void) ...@@ -1190,7 +1193,7 @@ buf_flush_LRU_recommendation(void)
ulint n_replaceable; ulint n_replaceable;
ulint distance = 0; ulint distance = 0;
buf_pool_mutex_enter(); //buf_pool_mutex_enter();
n_replaceable = UT_LIST_GET_LEN(buf_pool->free); n_replaceable = UT_LIST_GET_LEN(buf_pool->free);
...@@ -1216,7 +1219,7 @@ buf_flush_LRU_recommendation(void) ...@@ -1216,7 +1219,7 @@ buf_flush_LRU_recommendation(void)
bpage = UT_LIST_GET_PREV(LRU, bpage); bpage = UT_LIST_GET_PREV(LRU, bpage);
} }
buf_pool_mutex_exit(); //buf_pool_mutex_exit();
if (n_replaceable >= BUF_FLUSH_FREE_BLOCK_MARGIN) { if (n_replaceable >= BUF_FLUSH_FREE_BLOCK_MARGIN) {
...@@ -1235,8 +1238,9 @@ flush only pages such that the s-lock required for flushing can be acquired ...@@ -1235,8 +1238,9 @@ flush only pages such that the s-lock required for flushing can be acquired
immediately, without waiting. */ immediately, without waiting. */
UNIV_INTERN UNIV_INTERN
void void
buf_flush_free_margin(void) buf_flush_free_margin(
/*=======================*/ /*=======================*/
ibool wait)
{ {
ulint n_to_flush; ulint n_to_flush;
ulint n_flushed; ulint n_flushed;
...@@ -1245,7 +1249,7 @@ buf_flush_free_margin(void) ...@@ -1245,7 +1249,7 @@ buf_flush_free_margin(void)
if (n_to_flush > 0) { if (n_to_flush > 0) {
n_flushed = buf_flush_batch(BUF_FLUSH_LRU, n_to_flush, 0); n_flushed = buf_flush_batch(BUF_FLUSH_LRU, n_to_flush, 0);
if (n_flushed == ULINT_UNDEFINED) { if (wait && n_flushed == ULINT_UNDEFINED) {
/* There was an LRU type flush batch already running; /* There was an LRU type flush batch already running;
let us wait for it to end */ let us wait for it to end */
......
...@@ -885,7 +885,7 @@ loop: ...@@ -885,7 +885,7 @@ loop:
/* No free block was found: try to flush the LRU list */ /* No free block was found: try to flush the LRU list */
buf_flush_free_margin(); buf_flush_free_margin(TRUE);
++srv_buf_pool_wait_free; ++srv_buf_pool_wait_free;
os_aio_simulated_wake_handler_threads(); os_aio_simulated_wake_handler_threads();
......
...@@ -358,7 +358,7 @@ buf_read_page( ...@@ -358,7 +358,7 @@ buf_read_page(
} }
/* Flush pages from the end of the LRU list if necessary */ /* Flush pages from the end of the LRU list if necessary */
buf_flush_free_margin(); buf_flush_free_margin(FALSE);
/* Increment number of I/O operations used for LRU policy. */ /* Increment number of I/O operations used for LRU policy. */
buf_LRU_stat_inc_io(); buf_LRU_stat_inc_io();
...@@ -619,7 +619,7 @@ buf_read_ahead_linear( ...@@ -619,7 +619,7 @@ buf_read_ahead_linear(
os_aio_simulated_wake_handler_threads(); os_aio_simulated_wake_handler_threads();
/* Flush pages from the end of the LRU list if necessary */ /* Flush pages from the end of the LRU list if necessary */
buf_flush_free_margin(); buf_flush_free_margin(FALSE);
#ifdef UNIV_DEBUG #ifdef UNIV_DEBUG
if (buf_debug_prints && (count > 0)) { if (buf_debug_prints && (count > 0)) {
...@@ -704,7 +704,7 @@ tablespace_deleted: ...@@ -704,7 +704,7 @@ tablespace_deleted:
os_aio_simulated_wake_handler_threads(); os_aio_simulated_wake_handler_threads();
/* Flush pages from the end of the LRU list if necessary */ /* Flush pages from the end of the LRU list if necessary */
buf_flush_free_margin(); buf_flush_free_margin(FALSE);
#ifdef UNIV_DEBUG #ifdef UNIV_DEBUG
if (buf_debug_prints) { if (buf_debug_prints) {
...@@ -789,7 +789,7 @@ buf_read_recv_pages( ...@@ -789,7 +789,7 @@ buf_read_recv_pages(
os_aio_simulated_wake_handler_threads(); os_aio_simulated_wake_handler_threads();
/* Flush pages from the end of the LRU list if necessary */ /* Flush pages from the end of the LRU list if necessary */
buf_flush_free_margin(); buf_flush_free_margin(FALSE);
#ifdef UNIV_DEBUG #ifdef UNIV_DEBUG
if (buf_debug_prints) { if (buf_debug_prints) {
......
...@@ -27,5 +27,6 @@ struct innodb_enhancement { ...@@ -27,5 +27,6 @@ struct innodb_enhancement {
{"innodb_show_status","Improvements to SHOW INNODB STATUS","Memory information and lock info fixes","http://www.percona.com/docs/wiki/percona-innodb-plugin:innodb_show_status"}, {"innodb_show_status","Improvements to SHOW INNODB STATUS","Memory information and lock info fixes","http://www.percona.com/docs/wiki/percona-innodb-plugin:innodb_show_status"},
{"innodb_io","Improvements to InnoDB IO","","http://www.percona.com/docs/wiki/percona-innodb-plugin:innodb_io"}, {"innodb_io","Improvements to InnoDB IO","","http://www.percona.com/docs/wiki/percona-innodb-plugin:innodb_io"},
{"innodb_rw_lock","InnoDB RW-lock fixes","Useful for 8+ cores SMP systems","http://www.percona.com/docs/wiki/percona-innodb-plugin:innodb_rw_lock"}, {"innodb_rw_lock","InnoDB RW-lock fixes","Useful for 8+ cores SMP systems","http://www.percona.com/docs/wiki/percona-innodb-plugin:innodb_rw_lock"},
{"optimistic_margine_count","Fix of buffer_pool mutex","Decreases contention on buffer_pool mutex","http://www.percona.com/docs/wiki/percona-innodb-plugin:optimistic_margine_count"},
{NULL, NULL, NULL, NULL} {NULL, NULL, NULL, NULL}
}; };
...@@ -40,8 +40,9 @@ Flushes pages from the end of the LRU list if there is too small ...@@ -40,8 +40,9 @@ Flushes pages from the end of the LRU list if there is too small
a margin of replaceable pages there. */ a margin of replaceable pages there. */
UNIV_INTERN UNIV_INTERN
void void
buf_flush_free_margin(void); buf_flush_free_margin(
/*=======================*/ /*=======================*/
ibool wait);
/************************************************************************ /************************************************************************
Initializes a page for writing to the tablespace. */ Initializes a page for writing to the tablespace. */
UNIV_INTERN UNIV_INTERN
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment