* Mingqiang Zhuang <mingqiangzhuang@hengtiansoft.com>
*
*/
+#include "config.h"
+
+#include <stdlib.h>
#include <getopt.h>
#include <limits.h>
+#if TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+
#include "ms_sigsegv.h"
#include "ms_setting.h"
pthread_mutex_init(&ms_global.init_lock.lock, NULL);
pthread_cond_init(&ms_global.init_lock.cond, NULL);
+ ms_global.warmup_lock.count = 0;
+ pthread_mutex_init(&ms_global.warmup_lock.lock, NULL);
+ pthread_cond_init(&ms_global.warmup_lock.cond, NULL);
+
ms_global.run_lock.count= 0;
pthread_mutex_init(&ms_global.run_lock.lock, NULL);
pthread_cond_init(&ms_global.run_lock.cond, NULL);
pthread_mutex_destroy(&ms_global.init_lock.lock);
pthread_cond_destroy(&ms_global.init_lock.cond);
+ pthread_mutex_destroy(&ms_global.warmup_lock.lock);
+ pthread_cond_destroy(&ms_global.warmup_lock.cond);
+
pthread_mutex_destroy(&ms_global.run_lock.lock);
pthread_cond_destroy(&ms_global.run_lock.cond);
*/
static void ms_version_command(const char *command_name)
{
- printf("%s v%u.%u\n", command_name, 1, 0);
+ printf("%s v%u.%u\n", command_name, 1U, 0U);
exit(0);
}
{
char *help_message= NULL;
- printf("%s v%u.%u\n", command_name, 1, 0);
+ printf("%s v%u.%u\n", command_name, 1U, 0U);
printf(" %s\n\n", description);
printf(
"Usage:\n"
{
printf(" -%c, --%s%c\n", long_options[x].val, long_options[x].name,
long_options[x].has_arg ? '=' : ' ');
+
if ((help_message= (char *)ms_lookup_help(long_options[x].val)) != NULL)
{
printf(" %s\n", help_message);
break;
case OPT_CONCURRENCY: /* --concurrency or -c */
- ms_setting.nconns= atoi(optarg);
+ ms_setting.nconns= (uint32_t)strtoul(optarg, (char **) NULL, 10);
if (ms_setting.nconns <= 0)
{
fprintf(stderr, "Concurrency must be greater than 0.:-)\n");
break;
case OPT_EXECUTE_NUMBER: /* --execute_number or -x */
- ms_setting.exec_num= atoll(optarg);
+ ms_setting.exec_num= (int)strtol(optarg, (char **) NULL, 10);
if (ms_setting.exec_num <= 0)
{
fprintf(stderr, "Execute number must be greater than 0.:-)\n");
break;
case OPT_THREAD_NUMBER: /* --threads or -T */
- ms_setting.nthreads= atoi(optarg);
+ ms_setting.nthreads= (uint32_t)strtoul(optarg, (char **) NULL, 10);
if (ms_setting.nthreads <= 0)
{
fprintf(stderr, "Threads number must be greater than 0.:-)\n");
break;
case OPT_FIXED_LTH: /* --fixed_size or -X */
- ms_setting.fixed_value_size= (size_t)atoi(optarg);
+ ms_setting.fixed_value_size= (size_t)strtoull(optarg, (char **) NULL, 10);
if ((ms_setting.fixed_value_size <= 0)
|| (ms_setting.fixed_value_size > MAX_VALUE_SIZE))
{
break;
case OPT_GETS_DIVISION: /* --division or -d */
- ms_setting.mult_key_num= atoi(optarg);
+ ms_setting.mult_key_num= (int)strtol(optarg, (char **) NULL, 10);
if (ms_setting.mult_key_num <= 0)
{
fprintf(stderr, "Multi-get key number must be greater than 0.:-)\n");
break;
case OPT_SOCK_PER_CONN: /* --conn_sock or -n */
- ms_setting.sock_per_conn= atoi(optarg);
+ ms_setting.sock_per_conn= (uint32_t)strtoul(optarg, (char **) NULL, 10);
if (ms_setting.sock_per_conn <= 0)
{
fprintf(stderr, "Number of socks of each concurrency "
break;
case OPT_REP_WRITE_SRV: /* --rep_write or -p */
- ms_setting.rep_write_srv= atoi(optarg);
+ ms_setting.rep_write_srv= (uint32_t)strtoul(optarg, (char **) NULL, 10);
if (ms_setting.rep_write_srv <= 0)
{
fprintf(stderr,
{
if (ms_setting.srv_str == NULL)
{
- fprintf(stderr, "No Servers provided.\n\n");
- return -1;
+ char *temp;
+
+ if ((temp= getenv("MEMCACHED_SERVERS")))
+ {
+ ms_setting.srv_str= strdup(temp);
+ }
+ else
+ {
+ fprintf(stderr, "No Servers provided\n\n");
+ return -1;
+ }
}
- if (ms_setting.nconns % ms_setting.nthreads != 0)
+ if (ms_setting.nconns % (uint32_t)ms_setting.nthreads != 0)
{
fprintf(stderr, "Concurrency must be the multiples of threads count.\n");
return -1;
char buf[1024];
char *pos= buf;
- pos+= sprintf(pos,
- "cmd_get: %llu\n",
- (unsigned long long)ms_stats.cmd_get);
- pos+= sprintf(pos,
- "cmd_set: %llu\n",
- (unsigned long long)ms_stats.cmd_set);
- pos+= sprintf(pos,
- "get_misses: %llu\n",
- (unsigned long long)ms_stats.get_misses);
+ pos+= sprintf(pos, "cmd_get: %zu\n",
+ ms_stats.cmd_get);
+ pos+= sprintf(pos, "cmd_set: %zu\n",
+ ms_stats.cmd_set);
+ pos+= sprintf(pos, "get_misses: %zu\n",
+ ms_stats.get_misses);
if (ms_setting.verify_percent > 0)
{
- pos+= sprintf(pos, "verify_misses: %llu\n",
- (unsigned long long)ms_stats.vef_miss);
- pos+= sprintf(pos, "verify_failed: %llu\n",
- (unsigned long long)ms_stats.vef_failed);
+ pos+= sprintf(pos, "verify_misses: %zu\n",
+ ms_stats.vef_miss);
+ pos+= sprintf(pos, "verify_failed: %zu\n",
+ ms_stats.vef_failed);
}
if (ms_setting.exp_ver_per > 0)
{
- pos+= sprintf(pos, "expired_get: %llu\n",
- (unsigned long long)ms_stats.exp_get);
- pos+= sprintf(pos, "unexpired_unget: %llu\n",
- (unsigned long long)ms_stats.unexp_unget);
+ pos+= sprintf(pos, "expired_get: %zu\n",
+ ms_stats.exp_get);
+ pos+= sprintf(pos, "unexpired_unget: %zu\n",
+ ms_stats.unexp_unget);
}
pos+= sprintf(pos,
- "written_bytes: %llu\n",
- (unsigned long long)ms_stats.bytes_written);
- pos+= sprintf(pos,
- "read_bytes: %llu\n",
- (unsigned long long)ms_stats.bytes_read);
- pos+= sprintf(pos,
- "object_bytes: %llu\n",
- (unsigned long long)ms_stats.obj_bytes);
+ "written_bytes: %zu\n",
+ ms_stats.bytes_written);
+ pos+= sprintf(pos, "read_bytes: %zu\n",
+ ms_stats.bytes_read);
+ pos+= sprintf(pos, "object_bytes: %zu\n",
+ ms_stats.obj_bytes);
if (ms_setting.udp || ms_setting.facebook_test)
{
- pos+= sprintf(pos,
- "packet_disorder: %llu\n",
- (unsigned long long)ms_stats.pkt_disorder);
- pos+= sprintf(pos,
- "packet_drop: %llu\n",
- (unsigned long long)ms_stats.pkt_drop);
- pos+= sprintf(pos,
- "udp_timeout: %llu\n",
- (unsigned long long)ms_stats.udp_timeout);
+ pos+= sprintf(pos, "packet_disorder: %zu\n",
+ ms_stats.pkt_disorder);
+ pos+= sprintf(pos, "packet_drop: %zu\n",
+ ms_stats.pkt_drop);
+ pos+= sprintf(pos, "udp_timeout: %zu\n",
+ ms_stats.udp_timeout);
}
if (ms_setting.stat_freq > 0)
int second= 0;
struct timeval start_time, end_time;
+ /* Wait all the threads complete initialization. */
+ pthread_mutex_lock(&ms_global.init_lock.lock);
+ while (ms_global.init_lock.count < ms_setting.nthreads)
+ {
+ pthread_cond_wait(&ms_global.init_lock.cond,
+ &ms_global.init_lock.lock);
+ }
+ pthread_mutex_unlock(&ms_global.init_lock.lock);
+
/* only when there is no set operation it need warm up */
if (ms_setting.cmd_distr[CMD_SET].cmd_prop < PROP_ERROR)
{
/* Wait all the connects complete warm up. */
- pthread_mutex_lock(&ms_global.init_lock.lock);
- while (ms_global.init_lock.count < ms_setting.nconns)
+ pthread_mutex_lock(&ms_global.warmup_lock.lock);
+ while (ms_global.warmup_lock.count < ms_setting.nconns)
{
- pthread_cond_wait(&ms_global.init_lock.cond,
- &ms_global.init_lock.lock);
+ pthread_cond_wait(&ms_global.warmup_lock.cond, &ms_global.warmup_lock.lock);
}
- pthread_mutex_unlock(&ms_global.init_lock.lock);
+ pthread_mutex_unlock(&ms_global.warmup_lock.lock);
}
-
ms_global.finish_warmup= true;
/* running in "run time" mode, user specify run time */
second++;
if ((ms_setting.stat_freq > 0) && (second % ms_setting.stat_freq == 0)
- && ((int32_t)ms_stats.active_conns >= ms_setting.nconns)
- && (ms_stats.active_conns <= (uint32_t)INT_MAX))
+ && (ms_stats.active_conns >= ms_setting.nconns)
+ && (ms_stats.active_conns <= INT_MAX))
{
ms_print_statistics(second);
}