memstorm
「mixi Engineers’ Blog » libmemcachedで快速キャッシュ生活」で紹介されているmemstormをビルドしてみた。
memstorm開発時期よりlibmemcachedのバージョンが上がっているのと、libmemcachedを変則的な位置にインストールしているのとで少々苦労した。
- memstorm-0.6.8
- libmemcached-0.32
$ tar xvzf memstorm-0.6.8.tar.gz $ cd memstorm-0.6.8/ $ ./configure (略) $ LD_RUN_PATH=/opt/local/lib make INCLUDES='-I/opt/local/include/ -I/opt/local/include/libmemcached' LIBS='-L/opt/local/lib' if gcc -DPACKAGE_NAME=\"memstorm\" -DPACKAGE_TARNAME=\"memstorm\" -DPACKAGE_VERSION=\"0.6\" -DPACKAGE_STRING=\"memstorm\ 0.6\" -DPACKAGE_BUGREPORT=\"8\" -DPACKAGE=\"memstorm\" -DVERSION=\"0.6.8\" -I. -I. -I/opt/local/include/ -I/opt/local/include/libmemcached -Wall -MT memstorm.o -MD -MP -MF ".deps/memstorm.Tpo" -c -o memstorm.o memstorm.c; \ then mv -f ".deps/memstorm.Tpo" ".deps/memstorm.Po"; else rm -f ".deps/memstorm.Tpo"; exit 1; fi memstorm.c: In function ‘engage’: memstorm.c:112: warning: passing argument 3 of ‘memcached_behavior_set’ makes integer from pointer without a cast memstorm.c:115: warning: passing argument 3 of ‘memcached_behavior_set’ makes integer from pointer without a cast memstorm.c:162: warning: passing argument 5 of ‘memcached_get’ from incompatible pointer type gcc -Wall -o memstorm -lmemcached memstorm.o -L/opt/local/lib $ ./memstorm memstorm: Simple CLI memcached Utility -s <string> : hostname of the server to access -n <num> : number of SET/GET tests to run -k <num> : length of the key (default: 32, max: 250) -l <num> : length of the value (default: 128) -b : use non-blocking IO -t : use tcp-nodelay -h : print this help $
でも、うごかねー。PROTOCOL ERRORとか怒られる。修正したら動くようになったけど、正しいかどうかは不明。
--- memstorm.c~ 2008-01-20 22:54:22.000000000 +0900 +++ memstorm.c 2009-10-14 09:13:57.000000000 +0900 @@ -84,7 +84,7 @@ int i, kalloc = 0, valloc = 0; int set_succ = 0, set_fail = 0; int get_succ = 0, get_fail = 0; - uint16_t flags; + uint32_t flags; char kbuf[IOBUFSIZ]; char vbuf[IOBUFSIZ]; char *key = NULL, *val = NULL, *res = NULL; @@ -109,10 +109,10 @@ } if(set_no_delay) { - memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_TCP_NODELAY, &behave_val); + memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_TCP_NODELAY, behave_val); } if(set_no_block) { - memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NO_BLOCK, &behave_val); + memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NO_BLOCK, behave_val); } srand(time(NULL)); @@ -147,7 +147,7 @@ } gettimeofday(&start_time, NULL); - rc = memcached_set(memc, key, klen, val, vlen, (time_t)0, (uint16_t)0); + rc = memcached_set(memc, key, strlen(key), val, strlen(val), (time_t)0, (uint32_t)0); gettimeofday(&end_time, NULL); set_accum += timedif(end_time, start_time); @@ -159,7 +159,7 @@ set_fail++; } gettimeofday(&start_time, NULL); - res = memcached_get(memc, key, klen, &reslen, &flags, &rc); + res = memcached_get(memc, key, strlen(key), &reslen, &flags, &rc); gettimeofday(&end_time, NULL); get_accum += timedif(end_time, start_time);
memslapも信用ならない気がするし、何を使えばいいんだ…