Esempio n. 1
0
static void
benchmark(struct classifier *cls)
{
    struct timespec before, after;
    struct rusage rbefore, rafter;
    struct flow_wildcards wc;
    struct match match_wc_str;
    struct flow flow;
    size_t i;

    memset(&flow, 0, sizeof flow);
    flow.in_port.ofp_port = OFPP_LOCAL;
    flow.dl_type = htons(ETH_TYPE_IP);
    flow.nw_proto = IPPROTO_TCP;

    fat_rwlock_rdlock(&cls->rwlock);
    clock_gettime(CLOCK_MONOTONIC_RAW, &before);
    getrusage(RUSAGE_SELF, &rbefore);
    for (i = 0; i < 10000000; i++) {
        eth_addr_random(flow.dl_src);
        eth_addr_random(flow.dl_dst);
        flow.nw_src = htonl(random_uint32());
        flow.nw_dst = htonl(random_uint32());
        flow.tp_src = htons(random_uint16());
        flow.tp_dst = htons(random_uint16());
        flow.tp_dst = htons(i);
        flow_wildcards_init_catchall(&wc);
        //VLOG_DBG("Finding relevant wc's for flow: tp_dst=%d (0x%04x)",
        //         ntohs(flow.tp_dst), ntohs(flow.tp_dst));
        classifier_lookup(cls, &flow, &wc);
        match_init(&match_wc_str, &flow, &wc);
        //VLOG_DBG("Relevant fields: %s", match_to_string(&match_wc_str, 0));
    }
    getrusage(RUSAGE_SELF, &rafter);
    clock_gettime(CLOCK_MONOTONIC_RAW, &after);
    fat_rwlock_unlock(&cls->rwlock);

    printf("real        %lldms\n"
           "user        %lldms\n"
           "sys         %lldms\n"
           "soft faults %ld\n"
           "hard faults %ld\n",
           timespec_to_msec(&after) - timespec_to_msec(&before),
           timeval_to_msec(&rafter.ru_utime)
               - timeval_to_msec(&rbefore.ru_utime),
           timeval_to_msec(&rafter.ru_stime)
               - timeval_to_msec(&rbefore.ru_stime),
            rafter.ru_minflt - rbefore.ru_minflt,
            rafter.ru_majflt - rbefore.ru_majflt);
}
Esempio n. 2
0
/* Initializes 'match' as a "catch-all" match that matches every packet. */
void
match_init_catchall(struct match *match)
{
    memset(&match->flow, 0, sizeof match->flow);
    flow_wildcards_init_catchall(&match->wc);
}