1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
/* -*- coding: utf-8 -*-
* ----------------------------------------------------------------------
* Copyright © 2009-2012, RedJack, LLC.
* All rights reserved.
*
* Please see the LICENSE.txt file in this distribution for license
* details.
* ----------------------------------------------------------------------
*/
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <libcork/core.h>
#include <ipset/ipset.h>
static inline void
random_ip(struct cork_ipv4 *ip)
{
int i;
for (i = 0; i < sizeof(struct cork_ipv4); i++) {
uint8_t random_byte = random() & 0xff;
ip->_.u8[i] = random_byte;
}
}
static void
one_test(long num_elements)
{
struct ip_set set;
long i;
size_t size;
double size_per_element;
clock_t start, end;
double cpu_time_used;
start = clock();
ipset_init(&set);
for (i = 0; i < num_elements; i++) {
struct cork_ipv4 ip;
random_ip(&ip);
ipset_ipv4_add(&set, &ip);
}
end = clock();
size = ipset_memory_size(&set);
size_per_element = ((double) size) / num_elements;
cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;
fprintf(stdout, "%9lu%15zu%12.3lf%18.6lf\n",
num_elements, size, size_per_element, cpu_time_used);
ipset_done(&set);
}
int
main(int argc, const char **argv)
{
long num_tests;
long num_elements;
long i;
if (argc != 3) {
fprintf(stderr, "Usage: ipv4-set-size [# tests] [# elements]\n");
return -1;
}
num_tests = atol(argv[1]);
num_elements = atol(argv[2]);
fprintf(stderr, "Creating %lu sets with %lu elements each.\n",
num_tests, num_elements);
ipset_init_library();
srandom(time(NULL));
fprintf(stdout, "%9s%15s%12s%18s\n",
"elements", "bytes", "bytes_per", "cpu_time");
for (i = 0; i < num_tests; i++) {
one_test(num_elements);
}
return 0;
}
|