Skip to content
Snippets Groups Projects
memcached_numa_scan.py 1.52 KiB
Newer Older
import os
import util

def parse_memcached_output(s):
    lines = s.split('\n')
    return int(float(lines[6].split(' ')[3]))

def parse_memcached_stat(s, qps):
    lines = s.split('\n')
    inst = 0
    cycle = 0
    for line in lines:
        if line.startswith('#'):
            continue
        split = line.strip().split()
        if len(split) <= 1:
            continue
        if int(float(split[0])) != 25:
            continue
        if split[2] == 'instructions:u' or split[2] == 'instructions:k':
            inst += int(split[1].replace(',', ''))
        if split[2] == 'cycles:u' or split[2] == 'cycles:k':
            cycle += int(split[1].replace(',', ''))
    return (float(inst) / 5 / qps, float(inst) / cycle)

def extract_numa_scan_exp(exp):
    ret = ([], [], [], [], [], []) # QPS_mean, QPS_stddev, IPQ_mean, IPQ_stddev, IPC_mean, IPC_stddev

    for t in [2, 4, 8, 16]:
        f = 't' + str(t)
        (qps_mean, qps_stddev) = \
            util.extract_exp_avg_stddev(exp, f, parse_memcached_output)

        stat = 'stat_' + f
        ((ipq_mean, ipc_mean), (ipq_stddev, ipc_stddev)) = \
            util.extract_exp_avg_stddev(exp, stat, parse_memcached_stat, qps_mean)

        ret[0].append(qps_mean)
        ret[1].append(qps_stddev)
        ret[2].append(ipq_mean)
        ret[3].append(ipq_stddev)
        ret[4].append(ipc_mean)
        ret[5].append(ipc_stddev)

    return ret

def collect_data(experiments):
    ret = dict()

    for exp in experiments:
        ret[exp] = extract_numa_scan_exp(exp)

    return ret