Exemplo n.º 1
0
Arquivo: lru.c Projeto: xudejian/ximei
lru_t *lru_new(int lru_size, int hash)
{
	if (lru_size < 2) {
		return NULL;
	}
	if (hash < 1) {
		hash = 1024;
	}
	lru_t *_new = (lru_t *)malloc(sizeof(lru_t));
	if ( ! _new ) {
		return NULL;
	}
	_new->mutex = 0;
	_new->size = lru_size;
	_new->release_data_slot = 100 * 1024 * 1024;
	_new->total_free_size = 0;
	_new->lru_head = NULL;
	_new->lru_tail = NULL;
	_new->hash = hash;
	_new->nodes = (node_t *) calloc(lru_size, sizeof(node_t));
	if ( ! _new->nodes ) {
		lru_free(_new);
		return NULL;
	}
	int i;
	HASH_NNEXT (_new->nodes[lru_size - 1]) = NULL;
	for (i=lru_size - 1; i--;) {
		HASH_NNEXT (_new->nodes[i]) = &(_new->nodes[i+1]);
	}
	_new->idle = _new->nodes;
	_new->data_recycle = NULL;

	_new->barrel = (node_t **) calloc(hash, sizeof(node_t*));
	if ( ! _new->barrel ) {
		lru_free(_new);
		return NULL;
	}
	return _new;
}
Exemplo n.º 2
0
int main(int argc, char **argv) {
    config_init();

    int c;
    
    while (-1 != (c = getopt(argc, argv, "n:m:k:d:p:h"))) {
        switch(c) {
            case 'n':
                config.num = atoi(optarg);
                break;
            case 'm':
                config.maxbytes = ((size_t)atoi(optarg)) * 1024 * 1024;
                break;
            case 'k':
                config.keysize = atoi(optarg);
                break;
            case 'd':
                config.datasize = atoi(optarg);
                break;
            case 'p':
                config.hashpower = atoi(optarg);
                break;
            case 'h':
                usage();
                return EXIT_SUCCESS;
            default:
                usage();
                return EXIT_FAILURE;
        }
    }

    generate_key_init();
    print_env();
    lru *l = lru_init(config.maxbytes, config.hashpower);

    char *bvalue = malloc(config.datasize);
    memset(bvalue, 'x', config.datasize);

    char *key = malloc(config.keysize);
    memset(key, 0, config.keysize);

    int gnum = config.keysize - num_;

    generate_key_reset();
    bench_start("SET");
    int i;
    for (i = 0; i < config.num; i++) {
        snprintf(key, config.keysize, fmt_, gnum, generate_key(gnum), i);
        int r = item_set(l, key, config.keysize, bvalue, config.datasize);
        assert(r == 0);
        process_report();
    }
    bench_stop();
    print_stat(l);

    char *buf = malloc(config.datasize);
    size_t sz;
    generate_key_reset();
    bench_start("GET");
    for (i = 0; i < config.num; i++) {
        snprintf(key, config.keysize, fmt_, gnum, generate_key(gnum), i);
        int r = item_get(l, key, config.keysize, buf, config.datasize, &sz);
        if (!r) {
            assert((int)sz == config.datasize);
            assert(memcmp(bvalue, buf, config.datasize) == 0);
        }
        memset(buf, 0, config.datasize);
        process_report();
    }
    bench_stop();
    print_stat(l);

    generate_key_reset();
    bench_start("DELETE");
    for (i = 0; i < config.num; i++) {
        snprintf(key, config.keysize, fmt_, gnum, generate_key(gnum), i);
        item_delete(l, key, config.keysize);
        process_report();
    }
    bench_stop();
    print_stat(l);
    
    free(buf);
    free(bvalue);
    free(key);
    free(fmt_);
    free(key_);
   
    lru_free(l);
    /*
    printf("print any key to exit...\n");
    getchar();
    */
    return EXIT_SUCCESS;
}