X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=clients%2Fms_task.c;h=f2cb8657d678bc2088aea873155fc6962cdd404a;hb=88b1aa19c0b3c5ad047222618cb17f447ea2bc67;hp=aadc419ebc2eddf9b4ed5b8fd04f55be2f422880;hpb=604540c15315c6ed876082529f639697ba3eceab;p=awesomized%2Flibmemcached diff --git a/clients/ms_task.c b/clients/ms_task.c index aadc419e..f2cb8657 100644 --- a/clients/ms_task.c +++ b/clients/ms_task.c @@ -9,10 +9,19 @@ * */ -#include "config.h" +#include "mem_config.h" + +#if defined(HAVE_SYS_TIME_H) +# include +#endif + +#if defined(HAVE_TIME_H) +# include +#endif #include "ms_thread.h" #include "ms_setting.h" +#include "ms_atomic.h" /* command distribution adjustment cycle */ #define CMD_DISTR_ADJUST_CYCLE 1000 @@ -23,13 +32,11 @@ * item in the window. This factor shows it. */ -extern __thread ms_thread_t ms_thread; - /* get item from task window */ static ms_task_item_t *ms_get_cur_opt_item(ms_conn_t *c); static ms_task_item_t *ms_get_next_get_item(ms_conn_t *c); static ms_task_item_t *ms_get_next_set_item(ms_conn_t *c); -static ms_task_item_t *ms_get_pre_set_item(ms_conn_t *c); +static ms_task_item_t *ms_get_random_overwrite_item(ms_conn_t *c); /* select next operation to do */ @@ -43,7 +50,7 @@ static void ms_kick_out_item(ms_task_item_t *item); /* miss rate adjustment */ -static bool ms_need_overwirte_item(ms_task_t *task); +static bool ms_need_overwrite_item(ms_task_t *task); static bool ms_adjust_opt(ms_conn_t *c, ms_task_t *task); @@ -143,18 +150,10 @@ static ms_task_item_t *ms_get_next_set_item(ms_conn_t *c) * @return ms_task_item_t*, the pointer of the previous item of * set operation */ -static ms_task_item_t *ms_get_pre_set_item(ms_conn_t *c) +static ms_task_item_t *ms_get_random_overwrite_item(ms_conn_t *c) { - if (c->set_cursor <= 0) - { - return &c->item_win[0]; - } - else - { - return &c->item_win[(int64_t)-- c->set_cursor % c->win_size]; - } -} /* ms_get_pre_set_item */ - + return ms_get_next_get_item(c); +} /* ms_get_random_overwrite_item */ /** * According to the proportion of operations(get or set), select @@ -290,7 +289,7 @@ static void ms_kick_out_item(ms_task_item_t *item) * @return bool, if need overwrite, return true, else return * false */ -static bool ms_need_overwirte_item(ms_task_t *task) +static bool ms_need_overwrite_item(ms_task_t *task) { ms_task_item_t *item= task->item; @@ -344,7 +343,7 @@ static bool ms_adjust_opt(ms_conn_t *c, ms_task_t *task) /* If the current item is not a new item, kick it out */ if (item->value_offset != INVALID_OFFSET) { - if (ms_need_overwirte_item(task)) + if (ms_need_overwrite_item(task)) { /* overwrite */ task->overwrite_set++; @@ -358,17 +357,23 @@ static bool ms_adjust_opt(ms_conn_t *c, ms_task_t *task) else /* it's a new item */ { /* need overwrite */ - if (ms_need_overwirte_item(task)) + if (ms_need_overwrite_item(task)) { - item= ms_get_pre_set_item(c); + /** + * overwrite not use the item with current set cursor, revert + * set cursor. + */ + c->set_cursor--; + + item= ms_get_random_overwrite_item(c); if (item->value_offset != INVALID_OFFSET) { task->item= item; task->overwrite_set++; } - else /* previous set item is a new item */ + else /* item is a new item */ { - /* select the previous item to run, and cancel overwrite */ + /* select the item to run, and cancel overwrite */ task->item= item; } } @@ -570,7 +575,7 @@ static void ms_warmup_server(ms_conn_t *c) } else if (c->precmd.cmd == CMD_SET && c->precmd.retstat != MCD_STORED) { - printf("key: %lx didn't set success\n", item->key_prefix); + printf("key: %" PRIx64 " didn't set success\n", item->key_prefix); } } @@ -590,7 +595,7 @@ static void ms_warmup_server(ms_conn_t *c) */ if (c->remain_warmup_num == -1) { - ms_send_signal(&ms_global.init_lock); + ms_send_signal(&ms_global.warmup_lock); c->remain_warmup_num--; /* never run the if branch */ } } /* ms_warmup_server */ @@ -618,7 +623,7 @@ static void ms_single_getset_task_sch(ms_conn_t *c) else if (task->cmd == CMD_GET) { assert(task->cmd == CMD_GET); - ms_mcd_get(c, item, task->verify); + ms_mcd_get(c, item); } } } /* ms_single_getset_task_sch */ @@ -724,7 +729,7 @@ static void ms_update_multi_get_result(ms_conn_t *c) /* update get miss counter */ if (mlget_item->get_miss) { - __sync_fetch_and_add(&ms_stats.get_misses, 1); + atomic_add_size(&ms_stats.get_misses, 1); } /* get nothing from server for this task item */ @@ -740,7 +745,7 @@ static void ms_update_multi_get_result(ms_conn_t *c) if (curr_time.tv_sec - item->client_time < item->exp_time - EXPIRE_TIME_ERROR) { - __sync_fetch_and_add(&ms_stats.unexp_unget, 1); + atomic_add_size(&ms_stats.unexp_unget, 1); if (ms_setting.verbose) { @@ -754,7 +759,7 @@ static void ms_update_multi_get_result(ms_conn_t *c) "\n\t<%d expire time verification failed, object " "doesn't expire but can't get it now\n" "\tkey len: %d\n" - "\tkey: %lx %.*s\n" + "\tkey: %" PRIx64 " %.*s\n" "\tset time: %s current time: %s " "diff time: %d expire time: %d\n" "\texpected data len: %d\n" @@ -778,13 +783,13 @@ static void ms_update_multi_get_result(ms_conn_t *c) } else { - __sync_fetch_and_add(&ms_stats.vef_miss, 1); + atomic_add_size(&ms_stats.vef_miss, 1); if (ms_setting.verbose) { fprintf(stderr, "\n<%d data verification failed\n" "\tkey len: %d\n" - "\tkey: %lx %.*s\n" + "\tkey: %" PRIx64 " %.*s\n" "\texpected data len: %d\n" "\texpected data: %.*s\n" "\treceived data: \n", @@ -828,7 +833,7 @@ static void ms_update_single_get_result(ms_conn_t *c, ms_task_item_t *item) /* update get miss counter */ if ((c->precmd.cmd == CMD_GET) && c->curr_task.get_miss) { - __sync_fetch_and_add(&ms_stats.get_misses, 1); + atomic_add_size(&ms_stats.get_misses, 1); } /* get nothing from server for this task item */ @@ -845,7 +850,7 @@ static void ms_update_single_get_result(ms_conn_t *c, ms_task_item_t *item) if (curr_time.tv_sec - item->client_time < item->exp_time - EXPIRE_TIME_ERROR) { - __sync_fetch_and_add(&ms_stats.unexp_unget, 1); + atomic_add_size(&ms_stats.unexp_unget, 1); if (ms_setting.verbose) { @@ -859,7 +864,7 @@ static void ms_update_single_get_result(ms_conn_t *c, ms_task_item_t *item) "\n\t<%d expire time verification failed, object " "doesn't expire but can't get it now\n" "\tkey len: %d\n" - "\tkey: %lx %.*s\n" + "\tkey: %" PRIx64 " %.*s\n" "\tset time: %s current time: %s " "diff time: %d expire time: %d\n" "\texpected data len: %d\n" @@ -883,13 +888,13 @@ static void ms_update_single_get_result(ms_conn_t *c, ms_task_item_t *item) } else { - __sync_fetch_and_add(&ms_stats.vef_miss, 1); + atomic_add_size(&ms_stats.vef_miss, 1); if (ms_setting.verbose) { fprintf(stderr, "\n<%d data verification failed\n" "\tkey len: %d\n" - "\tkey: %lx %.*s\n" + "\tkey: %" PRIx64 " %.*s\n" "\texpected data len: %d\n" "\texpected data: %.*s\n" "\treceived data: \n", @@ -1044,7 +1049,7 @@ static void ms_update_task_result(ms_conn_t *c) * * @param c, pointer of the concurrency * - * @return int, if success, return 0, else return -1 + * @return int, if success, return EXIT_SUCCESS, else return -1 */ static int ms_run_getset_task(ms_conn_t *c) { @@ -1076,7 +1081,7 @@ static int ms_run_getset_task(ms_conn_t *c) return -1; } - return 0; + return EXIT_SUCCESS; } /* ms_run_getset_task */ @@ -1085,7 +1090,7 @@ static int ms_run_getset_task(ms_conn_t *c) * * @param c, pointer of the concurrency * - * @return int, if success, return 0, else return -1 + * @return int, if success, return EXIT_SUCCESS, else return -1 */ int ms_exec_task(struct conn *c) { @@ -1101,5 +1106,5 @@ int ms_exec_task(struct conn *c) } } - return 0; + return EXIT_SUCCESS; } /* ms_exec_task */