freeBSD 5.3 and memcached
Al Ermolaew
alermo at bk.ru
Sun Mar 27 02:41:05 PST 2005
Hi All!
At once I shall apologize for my English :)
I had very strange problem with work of the memcached on
freeBSD. I have two servers with freeBSD 5.3 and on both
servers problem has repeated. I have a local machine with
Linux and on it problems have not arisen.....
Short example - data between 1400 and 2800 bytes would be
transferred very slowly
su-2.05b# ./memd_test 1248
memd_test: mc_aget result: <0.0001540>
su-2.05b# ./memd_test 1440
memd_test: mc_aget result: <0.0998720>
su-2.05b# ./memd_test 10440
memd_test: mc_aget result: <0.0005540>
1440 bytes are transferred from memcached at 0.09 seconds,
but 10440 bytes at 0.0005......
I upgrade em driver to version 2.05, but it has not
helped...
On lo device (127.0.0.1) all OK.
I test it with libevent 0.9, 1.0, 1.0b...
I test memcached 1.1.11, 1.1.12cr1, 1.1.9-snapshot
I using libmemcached for C test and Cached::Memcached for
perl...
Probably problem in a freeBSD kernel or em driver... I don't
know :(
Any ideas?
Regards,
Alermo
------ simple memd_test.c based on regress.c from
libmemcached ------
/*
memcached test on freeBSD 5.3
data between 1400 and 2800 bytes would be transferred very
slowly - 0.1 sec
device em (Intel(R) PRO/1000 Gigabit Ethernet driver)
on device lo all OK.... Very strange.
*/
#include <err.h>
#include <sysexits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/time.h>
#include <errno.h>
#include <memcache.h>
int
main(int argc, char *argv[]) {
struct memcache *mc = NULL;
u_int32_t long_string_size = 0;
char *long_string;
u_int32_t i;
if (argc > 1)
long_string_size = strtol(argv[1], NULL, 10);
if (long_string_size == 0)
long_string_size = 2750;
mc = mc_new();
if (mc == NULL)
err(EX_OSERR, "Unable to allocate a new memcache
object");
mc_server_add(mc, "192.168.1.1", "11211");
long_string = malloc(long_string_size);
for (i = 0; i < long_string_size; ++i)
long_string[i] = '0';
mc_set(mc, "long_poisoned_string",
MCM_CSTRLEN("long_poisoned_string"), long_string,
long_string_size, 0, 0);
struct timeval t0,t1;
int res0,res1;
void *val;
res0 = gettimeofday(&t0,NULL);
if(res0 < 0)
warnx("Error found: %s\n",errno);
// for (i = 0; i < 100; ++i )
val = mc_aget(mc, "long_poisoned_string",
strlen("long_poisoned_string"));
// warnx("res: %s\n",val);
res1 = gettimeofday(&t1,NULL);
if(res1 < 0)
warnx("Error found: %s\n",errno);
double tdif,sdif;
sdif = t1.tv_usec-t0.tv_usec;
sdif = sdif/1000000;
tdif = t1.tv_sec-t0.tv_sec;
tdif = tdif+sdif;
warnx("mc_aget result: <%.7f>\n", tdif );
mc_free(mc);
return EX_OK;
}
More information about the memcached
mailing list