diff options
Diffstat (limited to 'innobase/mtr/ts/tsmtr.c')
-rw-r--r-- | innobase/mtr/ts/tsmtr.c | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/innobase/mtr/ts/tsmtr.c b/innobase/mtr/ts/tsmtr.c new file mode 100644 index 00000000000..42997cd2699 --- /dev/null +++ b/innobase/mtr/ts/tsmtr.c @@ -0,0 +1,158 @@ +/************************************************************************ +The test module for the mini-transaction utilities + +(c) 1995 Innobase Oy + +Created 11/26/1995 Heikki Tuuri +*************************************************************************/ + +#include "sync0sync.h" +#include "sync0rw.h" +#include "mem0mem.h" +#include "log0log.h" +#include "..\mtr0mtr.h" +#include "..\mtr0log.h" + +rw_lock_t rwl[MTR_BUF_MEMO_SIZE]; + +/********************************************************************* +Test for mtr buffer */ + +void +test1(void) +/*=======*/ +{ + ulint i; + mtr_t mtr; + + printf("-------------------------------------------\n"); + printf("MTR-TEST 1. Test of mtr buffer\n"); + + mtr_start(&mtr); + + for (i = 0; i < MTR_BUF_MEMO_SIZE; i++) { + rw_lock_create(rwl + i); + } + + for (i = 0; i < MTR_BUF_MEMO_SIZE; i++) { + rw_lock_s_lock(rwl + i); + mtr_memo_push(&mtr, rwl + i, MTR_MEMO_S_LOCK); + } + + mtr_commit(&mtr); + + rw_lock_list_print_info(); + ut_ad(rw_lock_n_locked() == 0); + +} + +/************************************************************************ +Speed test function. */ +void +speed_mtr(void) +/*===========*/ +{ + mtr_t mtr; + + mtr_start(&mtr); + + mtr_s_lock(rwl, &mtr); + mtr_s_lock(rwl + 1, &mtr); + mtr_s_lock(rwl + 2, &mtr); + + mtr_commit(&mtr); +} + +/************************************************************************ +Speed test function without mtr. */ +void +speed_no_mtr(void) +/*===========*/ +{ + rw_lock_s_lock(rwl); + rw_lock_s_lock(rwl + 1); + rw_lock_s_lock(rwl + 2); + rw_lock_s_unlock(rwl + 2); + rw_lock_s_unlock(rwl + 1); + rw_lock_s_unlock(rwl); +} + +/************************************************************************ +Speed test function. */ + +void +test2(void) +/*======*/ +{ + ulint tm, oldtm; + ulint i, j; + mtr_t mtr; + byte buf[50]; + + oldtm = ut_clock(); + + for (i = 0; i < 1000 * UNIV_DBC * UNIV_DBC; i++) { + speed_mtr(); + } + + tm = ut_clock(); + printf("Wall clock time for %lu mtrs %lu milliseconds\n", + i, tm - oldtm); + oldtm = ut_clock(); + + for (i = 0; i < 1000 * UNIV_DBC * UNIV_DBC; i++) { + speed_no_mtr(); + } + + tm = ut_clock(); + printf("Wall clock time for %lu no-mtrs %lu milliseconds\n", + i, tm - oldtm); + + oldtm = ut_clock(); + for (i = 0; i < 4 * UNIV_DBC * UNIV_DBC; i++) { + mtr_start(&mtr); + for (j = 0; j < 250; j++) { + mlog_catenate_ulint(&mtr, 5, MLOG_1BYTE); + mlog_catenate_ulint(&mtr, i, MLOG_4BYTES); + mlog_catenate_ulint(&mtr, i + 1, MLOG_4BYTES); + mlog_catenate_string(&mtr, buf, 50); + } + mtr_commit(&mtr); + } + tm = ut_clock(); + printf("Wall clock time for %lu log writes %lu milliseconds\n", + i * j, tm - oldtm); + mtr_start(&mtr); + for (j = 0; j < 250; j++) { + mlog_catenate_ulint(&mtr, 5, MLOG_1BYTE); + mlog_catenate_ulint(&mtr, i, MLOG_4BYTES); + mlog_catenate_ulint(&mtr, i + 1, MLOG_4BYTES); + mlog_catenate_string(&mtr, buf, 50); + } + + mtr_print(&mtr); + mtr_commit(&mtr); +} + +/************************************************************************ +Main test function. */ + +void +main(void) +/*======*/ +{ + ulint tm, oldtm; + + oldtm = ut_clock(); + + sync_init(); + mem_init(); + log_init(); + + test1(); + test2(); + + tm = ut_clock(); + printf("Wall clock time for test %lu milliseconds\n", tm - oldtm); + printf("TESTS COMPLETED SUCCESSFULLY!\n"); +} |