Exemple #1
0
def gen_read_op_df(rops):
    #import pdb; pdb.set_trace();
    ops_diclist = utils.gen_v_list(rops)
    enqueue_time = utils.gen_element_in_diclist(ops_diclist, "enqueue_time")
    opts = [utils.timestamp(x) for x in enqueue_time]
    opid = utils.gen_element_in_diclist(ops_diclist, "opid")
    before_enqueue_lat = utils.gen_element_in_diclist(ops_diclist,
                                                      "before_enqueue_lat")
    reply_time = utils.gen_element_in_diclist(ops_diclist, "reply_time")
    eop_lat = [
        utils.time_substract(reply_time[idx], enqueue_time[idx])
        for idx in range(len(enqueue_time))
    ]
    op_lat = [
        float(eop_lat[idx]) + float(before_enqueue_lat[idx])
        for idx in range(len(eop_lat))
    ]
    print op_lat
    queue_lat = utils.gen_element_in_diclist(ops_diclist, "queue_latency")
    dequeue_lat = utils.gen_element_in_diclist(ops_diclist, "dequeue_latency")
    dequeue_count = utils.gen_element_in_diclist(ops_diclist, "dequeue_count")

    all_data = {
        "opid": opid,
        "opts": opts,
        "op_lat": op_lat,
        "enqueue_time": enqueue_time,
        "before_enqueue_lat": before_enqueue_lat,
        "queue_lat": queue_lat,
        "dequeue_lat": dequeue_lat,
        "dequeue_count": dequeue_count
    }

    return pd.DataFrame(all_data)
Exemple #2
0
def process_op_commit(words, wops):
    #print "op_commit", words
    op_commit = {}
    op_commit["time"] = words[0] + "-" + words[1]
    for key in osdtpl.op_commit_key2idx.keys():
        idx = osdtpl.op_commit_key2idx[key]
        op_commit[key] = words[idx]
    for op in wops.values():
        if op.has_key("rep_tid"):
            if op["rep_tid"] == op_commit["rep_tid"]:
                op["bluestore_lat"] = utils.time_substract(
                    op_commit["time"], op["eval_repop_time"])
                break
Exemple #3
0
def gen_write_op_df(ops):
    ops_diclist = utils.gen_v_list(ops)
    enqueue_time = utils.gen_element_in_diclist(ops_diclist, "enqueue_time")
    opts = [utils.timestamp(x) for x in enqueue_time]
    reply_time = utils.gen_element_in_diclist(ops_diclist, "reply_time")
    opid = utils.gen_element_in_diclist(ops_diclist, "opid")
    opref = utils.gen_element_in_diclist(ops_diclist, "opref")
    before_enqueue_lat = utils.gen_element_in_diclist(ops_diclist,
                                                      "before_enqueue_lat")
    ## currently just use reply_time - enqueue_time
    op_lat = [
        utils.time_substract(reply_time[idx], enqueue_time[idx])
        for idx in range(len(enqueue_time))
    ]
    ## construct subop
    for op in ops_diclist:
        if not op.has_key("subop"):
            pass
            #print "no subop", op
        else:
            pass
            #print "has subop", op
    subops = utils.gen_element_in_diclist(ops_diclist, "subop")
    subop_str = []
    for subs in subops:
        cstr = gen_subop_str(subs)
        subop_str.append(cstr)

    queue_lat = utils.gen_element_in_diclist(ops_diclist, "queue_latency")
    dequeue_lat = utils.gen_element_in_diclist(ops_diclist, "dequeue_latency")
    dequeue_count = utils.gen_element_in_diclist(ops_diclist, "dequeue_count")
    bluestore_lat = utils.gen_element_in_diclist(ops_diclist, "bluestore_lat")
    color = ["red" for x in bluestore_lat]
    all_data = {
        "opts": opts,
        "enqueue_time": enqueue_time,
        "op_lat": op_lat,
        "before_enqueue_lat": before_enqueue_lat,
        "opid": opid,
        "subop_str": subop_str,
        "queue_lat": queue_lat,
        "dequeue_lat": dequeue_lat,
        "dequeue_count": dequeue_count,
        "bluestore_lat": bluestore_lat,
        "color": color
    }
    df = pd.DataFrame(all_data)
    return df
Exemple #4
0
def process_subop_reply(words, wops):
    subop_reply = {}
    subop_reply["time"] = words[0] + "-" + words[1]

    for k in osdtpl.subop_reply_key2idx.keys():
        v = osdtpl.subop_reply_key2idx[k]
        subop_reply[k] = words[v]
    opid = repop_reply2op(subop_reply["subop_reply_id"])
    if wops.has_key(opid):
        # Since this is a subop reply, subop sent must already been processed
        assert wops[opid].has_key("subop")
        for subop in wops[opid]["subop"]:
            if subop["dst"] == subop_reply["src"]:
                subop["latency"] = utils.time_substract(
                    subop_reply["time"], subop["time"])
                subop["subosd"] = subop_reply["subosd"]
Exemple #5
0
def process_dequeue_op_start(words, wops, rops):
    dequeue = {}
    dequeue["time"] = words[0] + "-" + words[1]
    for key in osdtpl.dequeue_op_start_key2idx.keys():
        idx = osdtpl.dequeue_op_start_key2idx[key]
        dequeue[key] = words[idx]
    for ops in [wops, rops]:
        if ops.has_key(dequeue["opid"]):
            op = ops[dequeue["opid"]]
            op["dequeue_time"] = dequeue["time"]
            op["queue_latency"] = str(
                utils.time_substract(dequeue["time"], op["enqueue_time"]))
            if op.has_key("dequeue_count"):
                op["dequeue_count"] += 1
            else:
                op["dequeue_count"] = 1
            op["dequeue_thread"] = dequeue["thread"]
Exemple #6
0
def process_dequeue_op_end(words, wops, rops):
    dequeue_end = {}
    dequeue_end["time"] = words[0] + "-" + words[1]
    for key in osdtpl.dequeue_op_end_key2idx.keys():
        idx = osdtpl.dequeue_op_end_key2idx[key]
        dequeue_end[key] = words[idx]
    for ops in [wops, rops]:
        for op in ops.values():
            if op.has_key("dequeue_thread"
                          ):  ## means it is still in the osd dequeue thread
                if op["dequeue_thread"] == dequeue_end["thread"]:
                    op["dequeue_latency"] = str(
                        utils.time_substract(dequeue_end["time"],
                                             op["dequeue_time"]))
                    if op["op_type"] == "read":
                        ## for read, it is also the end of a read op
                        op["reply_time"] = dequeue_end["time"]
                    del op["dequeue_thread"]
Exemple #7
0
def process_bs_write_end(words, begin, stats):
    bs_we = {}
    time = words[0] + "-" + words[1]
    bs_we["time"] = time
    stat = {}
    for key in osdtpl.bs_write_end_key2idx.keys():
        idx = osdtpl.bs_write_end_key2idx[key]
        bs_we[key] = words[idx]
    if begin.has_key(bs_we["thread"]):
        bs_wb = begin[bs_we["thread"]]
        stat["start_time"] = bs_wb["time"]
        # Use microseconds for latency
        stat["latency"] = int(
            utils.time_substract(bs_we["time"], bs_wb["time"]) * 1000000)
        stat["aligned"] = utils.is_aligned(bs_we["offlen"], 4096)
        stat["len"] = utils.get_len(bs_we["offlen"])
        stat["offset"] = utils.get_offset(bs_we["offlen"])
        stat["type"] = "bs_write"
        stats.append(stat)
        del begin[bs_we["thread"]]