def get_sensors(self):
        netperf_graph = GraphErrorBars("runtime", "throughput", r"/tmp/runtime.pdf", r"/tmp/runtime.txt")
        self.netperf = NetPerfTCP(netperf_graph, runtime=0)

        # packet_sensor = PacketNumberSensor(
        #     Graph("msg size", "packet number", r"/tmp/packet_num.pdf", r"/tmp/packet_num.txt"),
        #     Graph("msg size", "average packet size", r"/tmp/packet_size.pdf", r"/tmp/packet_size.txt")
        # )
        return [self.netperf] # , packet_sensor]
Ejemplo n.º 2
0
class MainTest(TestBase):
    def __init__(self, netperf_runtime, *args, **kargs):
        self.netperf_runtime = netperf_runtime
        super(MainTest, self).__init__(*args, **kargs)
        # self._stop_after_test = True

    def get_x_categories(self):
        return [
            # (65160, "65K"),
            (64 * 2**10, "64K"),
            (32 * 2**10, "32K"),
            (16 * 2**10, "16K"),
            # (8*2**10, "8K"),
            (4 * 2**10, "4K"),
            # (2*2**10, "2K"),
            (1 * 2**10, "1K"),
            # (512, "512"),
            (256, "256"),
            # (128, "128"),
            (64, "64"),
        ]

    def get_sensors(self):
        netperf_graph = Graph("msg size", "throughput",
                              r"../tmp/throughput.pdf",
                              r"../tmp/throughput.txt")
        self.netperf = NetPerfTCP(netperf_graph, runtime=self.netperf_runtime)

        packet_sensor = PacketNumberSensor(
            Graph("msg size", "packet number", r"../tmp/packet_num.pdf",
                  r"../tmp/packet_num.txt"),
            Graph("msg size", "average packet size", r"../tmp/packet_size.pdf",
                  r"../tmp/packet_size.txt"))

        interrupt_sensor = InterruptSensor(
            Graph("msg size", "interrupt count", r"../tmp/interrupts.pdf",
                  r"../tmp/interrupts.txt"))
        return [
            self.netperf,
            packet_sensor,
            interrupt_sensor,
        ]

    def get_vms(self):
        vms = []
        for i in range(1, 161, 20):
            vm = QemuE1000Max(disk_path=r"../vms/ubuntu-20.img",
                              guest_ip="10.10.0.43",
                              host_ip="10.10.0.44")
            vm.qemu_config["tx_packets_per_batch"] = i
            vm.qemu_config["no_mit_timer_on"] = 1
            vms.append((vm, i))

        return [(vm, "delay_{}".format(d)) for vm, d in vms]

    def test_func(self, vm: VM, vm_name: str, x_value: int):
        self.netperf.run_netperf(vm, vm_name, x_value, msg_size=x_value)
Ejemplo n.º 3
0
    def get_sensors(self):
        netperf_graph = Graph("msg size", "throughput", r"/tmp/throughput_qemu_vm2vm.pdf",
                              r"/tmp/throughput_qemu_vm2vm.txt")
        self.netperf = NetPerfTCP(netperf_graph, runtime=self.netperf_runtime)

        packet_sensor = PacketNumberSensor(
            Graph("msg size", "packet number", r"/tmp/packet_num_vm2vm.pdf", r"/tmp/packet_num_vm2vm.txt"),
            Graph("msg size", "average packet size", r"/tmp/packet_size_vm2vm.pdf", r"/tmp/packet_size_vm2vm.txt")
        )
        return [self.netperf, packet_sensor]
    def get_sensors(self):
        netperf_graph = Graph("msg size", "throughput",
                              r"/tmp/throughput_virtualbox_vm2vm.pdf",
                              r"/tmp/throughput_virtualbox_vm2vm.txt")
        self.netperf = NetPerfTCP(netperf_graph, runtime=self.netperf_runtime)

        # packet_sensor = PacketNumberSensor(
        #     Graph("msg size", "packet number", r"/tmp/packet_num.pdf", r"/tmp/packet_num.txt"),
        #     Graph("msg size", "average packet size", r"/tmp/packet_size.pdf", r"/tmp/packet_size.txt")
        # )
        return [self.netperf]  # , packet_sensor]
class MainTest(TestBase2VM):
    def __init__(self, netperf_runtime, *args, **kargs):
        self.netperf_runtime = netperf_runtime
        super(MainTest, self).__init__(*args, **kargs)

    def get_x_categories(self):
        return [
            # (65160, "65K"),
            (64 * 2**10, "64K"),
            (32 * 2**10, "32K"),
            (16 * 2**10, "16K"),
            (8 * 2**10, "8K"),
            (4 * 2**10, "4K"),
            (2 * 2**10, "2K"),
            (1 * 2**10, "1K"),
            (512, "512"),
            (256, "256"),
            (128, "128"),
            (64, "64"),
        ]

    def get_sensors(self):
        netperf_graph = Graph("msg size", "throughput",
                              r"/tmp/throughput_virtualbox_vm2vm.pdf",
                              r"/tmp/throughput_virtualbox_vm2vm.txt")
        self.netperf = NetPerfTCP(netperf_graph, runtime=self.netperf_runtime)

        # packet_sensor = PacketNumberSensor(
        #     Graph("msg size", "packet number", r"/tmp/packet_num.pdf", r"/tmp/packet_num.txt"),
        #     Graph("msg size", "average packet size", r"/tmp/packet_size.pdf", r"/tmp/packet_size.txt")
        # )
        return [self.netperf]  # , packet_sensor]

    def get_vms(self):
        virtualbox_e1000 = VirtualBox(r"e1000", "192.168.56.103",
                                      "192.168.56.1")
        virtualbox_e1000_1 = VirtualBox(r"e1000_cp", "192.168.56.101",
                                        "192.168.56.1")
        virtualbox_virtio = VirtualBox(r"virtio", "192.168.56.102",
                                       "192.168.56.1")
        virtualbox_virtio_1 = VirtualBox(r"virtio_cp", "192.168.56.104",
                                         "192.168.56.1")

        return [
            (virtualbox_e1000, virtualbox_e1000_1, "virtualbox_e1000"),
            (virtualbox_virtio, virtualbox_virtio_1, "virtualbox_virtio"),
        ]

    def test_func(self, vm: VM, vm_name: str, x_value: int, remote_ip=None):
        self.netperf.run_netperf(vm,
                                 vm_name,
                                 x_value,
                                 remote_ip=remote_ip,
                                 msg_size=x_value)
Ejemplo n.º 6
0
class MainTest(TestBaseNetperf):
    def __init__(self, netperf_runtime, *args, **kargs):
        self.netperf_runtime = netperf_runtime
        super(MainTest, self).__init__(*args, **kargs)

    def get_x_categories(self):
        return [
            (65160, "65K"),
            (64 * 2**10, "64K"),
            (32 * 2**10, "32K"),
            (16 * 2**10, "16K"),
            (8 * 2**10, "8K"),
            (4 * 2**10, "4K"),
            (2 * 2**10, "2K"),
            (1 * 2**10, "1K"),
            (512, "512"),
            (256, "256"),
            (128, "128"),
            (64, "64"),
        ]

    def get_sensors(self):
        # netperf_graph = Graph("msg size", "throughput", r"/tmp/vmware-throughput.pdf", r"/tmp/vmware-throughput.txt")
        netperf_graph = Graph("msg size", "throughput",
                              r"/tmp/vmware-throughput.pdf",
                              r"/tmp/vmware-throughput.txt")
        self.netperf = NetPerfTCP(netperf_graph, runtime=self.netperf_runtime)

        # packet_sensor = PacketNumberSensor(
        #     Graph("msg size", "packet number", r"/tmp/packet_num.pdf", r"/tmp/packet_num.txt"),
        #     Graph("msg size", "average packet size", r"/tmp/packet_size.pdf", r"/tmp/packet_size.txt")
        # )
        return [self.netperf]  # , packet_sensor]

    def get_vms(self):
        vmware_e1000 = VMware(
            r"/homes/bdaviv/Shared\ VMs/Ubuntu\ Linux\ -\ e1000/Ubuntu\ Linux\ -\ e1000.vmx",
            "192.168.221.128", "192.168.221.1")
        vmware_para = VMware(
            r"/homes/bdaviv/Shared\ VMs/Ubuntu\ Linux\ -\ paravirtual_nic/Ubuntu\ Linux\ -\ paravirtual_nic.vmx",
            "192.168.221.129", "192.168.221.1")
        return [
            (vmware_e1000, "vmware_e1000"),
            (vmware_para, "vmware_paravirtual"),
        ]

    def test_func(self, vm: VM, vm_name: str, x_value: int):
        self.netperf.run_netperf(vm, vm_name, x_value, msg_size=x_value)
Ejemplo n.º 7
0
    def get_sensors(self):
        netperf_graph = Graph("msg size", "throughput",
                              r"../tmp/throughput.pdf",
                              r"../tmp/throughput.txt")
        self.netperf = NetPerfTCP(netperf_graph, runtime=self.netperf_runtime)

        packet_sensor = PacketNumberSensor(
            Graph("msg size", "packet number", r"../tmp/packet_num.pdf",
                  r"../tmp/packet_num.txt"),
            Graph("msg size", "average packet size", r"../tmp/packet_size.pdf",
                  r"../tmp/packet_size.txt"))

        interrupt_sensor = InterruptSensor(
            Graph("msg size", "interrupt count", r"../tmp/interrupts.pdf",
                  r"../tmp/interrupts.txt"))
        return [
            self.netperf,
            packet_sensor,
            interrupt_sensor,
        ]
Ejemplo n.º 8
0
def runner(args):
    # arg_parser = create_arg_parser()
    # args = arg_parser.parse_args()

    if args.latency:
        netperf = NetPerfLatency(runtime=args.runtime)
    elif args.throughput:
        netperf = NetPerfTCP(runtime=args.runtime)
    elif args.throughput_tso:
        netperf = NetPerfTcpTSO(runtime=args.runtime)
    else:
        assert "Missing mode"

    vm = VMS[args.vm]()

    if args.batch_size:
        vm.e1000_options["x-txburst"] = str(args.batch_size)
        netperf.batch_size = int(args.batch_size)

    if not args.multi:
        perf = TracePerformance(
            vm=vm,
            netperf=netperf,
            msg_size=args.msg_size,
            directory=args.directory,
            title=args.vm,
            auto_dir=args.auto_dir,
            name=args.name,
        )
        if not args.stats_only:
            perf.init_env(True)
            perf.run()
        else:
            perf.init_env(False)

        perf.stats()

    if args.multi:
        stats_func = partial(
            stats_only,
            vm=vm,
            netperf=netperf,
            directory=args.directory,
            title=args.vm,
            auto_dir=args.auto_dir,
            name=args.name,
        )
        pool = multiprocessing.Pool(processes=4)
        for size in MSG_SIZES:
            print("start run for ", size)
            pool.apply_async(stats_func, kwds={'msg_size': size})
        pool.close()
        pool.join()
Ejemplo n.º 9
0
def main(directory=None):
    trace_dir = get_dir(directory)

    shutil.copyfile(ORIG_QEMU, TMP_QEMU)
    os.makedirs(trace_dir, exist_ok=True)

    vm = QemuE1000Max(disk_path=r"../vms/ubuntu-20.img",
                      guest_ip="10.10.0.43",
                      host_ip="10.10.0.44")
    vm.qemu_config["latency_itr"] = 0
    vm.ethernet_dev = 'e1000-82545em'
    vm.addiotional_guest_command = 'sudo ethtool -C eth0 rx-usecs 3000'

    local_trace = Trace(localRoot, os.path.join(trace_dir, "trace_host"))
    local_trace.setup()

    # local_trace.enable_event("kvm/kvm_write_tsc_offset")
    # local_trace.enable_event("kvm/kvm_exit")
    # local_trace.enable_event("kvm/kvm_entry")
    # local_trace.enable_event("kvm/kvm_userspace_exit")

    # local_trace.set_event_filter("sched/sched_switch", r'prev_comm ~ "*qemu*" || next_comm ~ "*qemu*"')
    # local_trace.enable_event("sched/sched_switch")

    # objdump -tT /tmp/qemu-system-x86_64 |grep .text|grep virtio_queue_notify_vq
    ## local_trace.uprobe_add("p:virtio_queue_notify_vq /tmp/qemu-system-x86_64:0x1bfba6")
    # local_trace.uprobe_add_event("p", "virtio_queue_notify_vq", TMP_QEMU, "virtio_queue_notify_vq")
    # objdump -tT /tmp/qemu-system-x86_64 |grep .text|grep kvm_vcpu_ioctl
    ## local_trace.uprobe_add("p:kvm_vcpu_ioctl /tmp/qemu-system-x86_64:0x16a886 cmd=%si")
    # local_trace.uprobe_add_event("p", "kvm_vcpu_ioctl", TMP_QEMU, "kvm_vcpu_ioctl", "cmd=%si")
    # local_trace.uprobe_enable()

    # local_trace.empty_trace()
    # local_trace.trace_on()
    # local_trace.trace_to_local_file()

    vm.setup()
    vm.run()

    remote_trace = Trace(vm.root, os.path.join(trace_dir, "trace_guest"))
    remote_trace.setup()
    remote_trace.set_buffer_size(20000)
    remote_trace.enable_event("napi/napi_poll")
    # remote_trace.enable_event("power/cpu_idle")
    remote_trace.enable_event("irq/irq_handler_entry")
    # remote_trace.enable_event("e1000/e1000_pre_mem_op")
    # remote_trace.enable_event("e1000/e1000_post_mem_op")
    # remote_trace.enable_event("e1000/e1000_set_tdt")
    # remote_trace.enable_event("e1000/e1000_post_set_tdt")
    # remote_trace.kprobe_add("p:notify_begin vp_notify")
    # remote_trace.kprobe_add("r:notify_end vp_notify")
    # remote_trace.kprobe_enable()
    remote_trace.trace_on()

    netperf = NetPerfTCP(None, runtime=2)

    remote_trace.trace_marker(TRACE_BEGIN_MSG)
    netperf_perf = netperf.run_netperf(vm, msg_size="64K")
    remote_trace.trace_marker(TRACE_END_MSG)
    print("Netperf performance: %s" % (netperf_perf, ))
    logger.info("Netperf performance: %s", netperf_perf)

    remote_trace.trace_off()
    remote_trace.disable_all_events()
    local_trace.trace_off()
    local_trace.disable_all_events()

    netperf_perf = netperf.run_netperf(vm, msg_size="64K")
    print("Base Netperf performance: %s" % (netperf_perf,))
    logger.info("Base Netperf performance: %s", netperf_perf)

    remote_trace.read_trace_once(to_file=True)
    # local_trace.trace_to_local_file_stop()

    local_trace.disable_all_events()

    # input()
    vm.teardown()
Ejemplo n.º 10
0
class MainTest(TestBaseNetperf):
    def __init__(self, netperf_runtime, *args, **kargs):
        self.netperf_runtime = netperf_runtime
        super(MainTest, self).__init__(*args, **kargs)

    def get_x_categories(self):
        return [
            (65160, "65K"),
            (64 * 2**10, "64K"),
            (32 * 2**10, "32K"),
            (16 * 2**10, "16K"),
            (8 * 2**10, "8K"),
            (4 * 2**10, "4K"),
            (2 * 2**10, "2K"),
            (1 * 2**10, "1K"),
            (512, "512"),
            (256, "256"),
            (128, "128"),
            (64, "64"),
        ]

    def get_sensors(self):
        netperf_graph = GraphGnuplot("msg size", "throughput",
                                     r"/tmp/throughput_1GB.pdf",
                                     r"/tmp/throughput_1GB.txt")
        self.netperf = NetPerfTCP(netperf_graph, runtime=self.netperf_runtime)

        # packet_sensor = PacketNumberSensor(
        #     Graph("msg size", "packet number", r"/tmp/packet_num.pdf", r"/tmp/packet_num.txt"),
        #     Graph("msg size", "average packet size", r"/tmp/packet_size.pdf", r"/tmp/packet_size.txt")
        # )
        return [self.netperf]  # , packet_sensor]

    def get_vms(self):
        virtualbox_e1000 = VirtualBox(r"e1000_1GB", "192.168.56.101",
                                      "192.168.56.1")
        virtualbox_virtio = VirtualBox(r"virtio_1GB", "192.168.56.102",
                                       "192.168.56.1")

        vmware_e1000 = VMware(
            r"/homes/bdaviv/Shared\ VMs/Ubuntu_Linux-e1000_1GB/Ubuntu\ Linux\ -\ e1000.vmx",
            "192.168.221.128", "192.168.221.1")
        vmware_para = VMware(
            r"/homes/bdaviv/Shared\ VMs/Ubuntu_Linux-para_1GB/Ubuntu\ Linux\ -\ paravirtual_nic.vmx",
            "192.168.221.129", "192.168.221.1")

        qemu_virtio = Qemu(disk_path=r"../vms/ubuntu-20.img",
                           guest_ip="10.10.0.43",
                           host_ip="10.10.0.44")
        qemu_virtio.ethernet_dev = Qemu.QEMU_VIRTIO
        qemu_virtio.mem = "1024"

        qemu_e1000 = Qemu(disk_path=r"../vms/ubuntu-20.img",
                          guest_ip="10.10.0.43",
                          host_ip="10.10.0.44")
        qemu_e1000.ethernet_dev = Qemu.QEMU_E1000
        qemu_e1000.mem = "1024"

        qemu_e1000_best = QemuE1000Max(disk_path=r"../vms/ubuntu-20.img",
                                       guest_ip="10.10.0.43",
                                       host_ip="10.10.0.44")
        qemu_e1000_best.mem = "1024"

        return [
            (virtualbox_e1000, "virtualbox_e1000"),
            (virtualbox_virtio, "virtualbox_virtio"),
            (vmware_e1000, "vmware_e1000"),
            (vmware_para, "vmware_para"),
            (qemu_virtio, "qemu_virtio"),
            (qemu_e1000, "qemu_e1000"),
            (qemu_e1000_best, "qemu_e1000_best"),
        ]

    def test_func(self, vm: VM, vm_name: str, x_value: int):
        self.netperf.run_netperf(vm, vm_name, x_value, msg_size=x_value)
Ejemplo n.º 11
0
def main(directory=None, netperf_msg_size=None):
    trace_dir = get_dir(directory)

    if netperf_msg_size is None:
        netperf_msg_size = MSG_SIZE

    if ORIG_QEMU != TMP_QEMU:
        shutil.copyfile(ORIG_QEMU, TMP_QEMU)
    os.makedirs(trace_dir, exist_ok=True)

    netserver_start()
    logger.info("msg size = %s", netperf_msg_size)

    vm = QemuNG(disk_path=r"../vms/ubuntu-20.img",
                guest_ip="10.10.0.43",
                host_ip="10.10.0.44")
    vm.ethernet_dev = Qemu.QEMU_VIRTIO
    # vm.qemu_config["latency_itr"] = 0
    vm.e1000_options["NG_notify_batch"] = "on"
    vm.BOOTUP_WAIT = 15
    # vm.addiotional_guest_command = 'sudo ethtool -C eth0 rx-usecs 3000'

    local_trace = Trace(localRoot, os.path.join(trace_dir, "trace_host"))
    local_trace.setup()
    local_trace.set_buffer_size(100000)

    local_trace.enable_event("kvm/kvm_write_tsc_offset")
    # local_trace.enable_event("kvm/kvm_set_irq")
    # local_trace.enable_event("kvm/kvm_msi_set_irq")
    # local_trace.enable_event("kvm/kvm_inj_virq")
    # local_trace.enable_event("kvm/kvm_ioapic_set_irq")
    # local_trace.enable_event("kvm/kvm_exit")
    # local_trace.enable_event("kvm/kvm_entry")
    # local_trace.enable_event("kvm/kvm_userspace_exit")

    local_trace.set_event_filter(
        "sched/sched_switch", r'prev_comm ~ "*qemu*" || next_comm ~ "*qemu*"')
    # local_trace.enable_event("sched/sched_switch")

    local_trace.set_event_filter("sched/sched_wakeup", '\"comm~*qemu*\"')
    # local_trace.enable_event("sched/sched_wakeup")

    local_trace.set_event_filter("sched/sched_waking", '\"comm~*qemu*\"')
    # local_trace.enable_event("sched/sched_waking")

    # objdump -tT /tmp/qemu-system-x86_64 |grep .text|grep virtio_queue_notify_vq
    ## local_trace.uprobe_add("p:virtio_queue_notify_vq /tmp/qemu-system-x86_64:0x1bfba6")
    # local_trace.uprobe_add_event("p", "virtio_queue_notify_vq", TMP_QEMU, "virtio_queue_notify_vq")
    # objdump -tT /tmp/qemu-system-x86_64 |grep .text|grep kvm_vcpu_ioctl
    ## local_trace.uprobe_add("p:kvm_vcpu_ioctl /tmp/qemu-system-x86_64:0x16a886 cmd=%si")
    # local_trace.uprobe_add_event("p", "kvm_vcpu_ioctl", TMP_QEMU, "kvm_vcpu_ioctl", "cmd=%si")

    # local_trace.uprobe_add_event("p", "tap_write_packet", TMP_QEMU, "tap_write_packet")
    # local_trace.uprobe_add_event("p", "tap_recv_packets", TMP_QEMU, "tap_send")
    # local_trace.uprobe_add_event("r", "tap_recv_packets_end", TMP_QEMU, "tap_send")
    # local_trace.uprobe_add_event("p", "virtio_irq", TMP_QEMU, "virtio_irq")

    # local_trace.uprobe_add_event("p", "virtio_queue_notify_vq", TMP_QEMU, "virtio_queue_notify_vq")
    # local_trace.uprobe_add_event("p", "e1000_set_kick", TMP_QEMU, "e1000_set_kick")
    # local_trace.uprobe_add_event("p", "e1000_receive_batch_finished", TMP_QEMU, "e1000_receive_batch_finished")
    local_trace.uprobe_enable()

    local_trace.empty_trace()
    local_trace.trace_on()
    # local_trace.trace_to_local_file()

    vm.setup()
    vm.run()

    remote_trace = Trace(vm.root, os.path.join(trace_dir, "trace_guest"))
    remote_trace.setup()
    remote_trace.set_buffer_size(100000)
    # remote_trace.enable_event("tcp")
    # remote_trace.enable_event("net")
    # remote_trace.enable_event("irq")
    # remote_trace.enable_event("irq_vectors")
    # remote_trace.enable_event("napi")
    # remote_trace.enable_event("power/cpu_idle")
    # remote_trace.enable_event("syscalls/sys_enter_sendto")
    # remote_trace.enable_event("syscalls/sys_enter_recvfrom")
    remote_trace.enable_event("net/net_dev_xmit")

    # remote_trace.enable_event("irq/irq_handler_entry")
    # remote_trace.enable_event("e1000/e1000_pre_mem_op")
    # remote_trace.enable_event("e1000/e1000_post_mem_op")
    # remote_trace.enable_event("e1000/e1000_set_tdt")
    # remote_trace.enable_event("e1000/e1000_post_set_tdt")

    # remote_trace.kprobe_add("p:notify_begin virtqueue_kick")
    # remote_trace.kprobe_add("r:notify_end virtqueue_kick")

    # remote_trace.kprobe_enable()
    remote_trace.trace_on()

    netperf = NetPerfTCP(None, runtime=2)
    run_command_async("tcpdump -i tap0 -s 100 -w {} -W 1 -G 7".format(
        os.path.join(trace_dir, "virtio.cap")))
    remote_trace.trace_marker(TRACE_BEGIN_MSG)
    netperf_perf = netperf.run_netperf(vm, msg_size=netperf_msg_size)
    remote_trace.trace_marker(TRACE_END_MSG)
    print("Netperf performance: %s" % (netperf_perf, ))
    logger.info("Netperf performance: %s", netperf_perf)

    remote_trace.trace_off()
    remote_trace.disable_all_events()
    local_trace.trace_off()
    local_trace.disable_all_events()

    netperf_perf = netperf.run_netperf(vm, msg_size=netperf_msg_size)
    print("Base Netperf performance: %s" % (netperf_perf, ))
    logger.info("Base Netperf performance: %s", netperf_perf)

    local_trace.read_trace_once(to_file=True)
    remote_trace.read_trace_once(to_file=True)
    # local_trace.trace_to_local_file_stop()

    local_trace.disable_all_events()

    # input("Press Enter to exit")
    vm.teardown()
    netserver_stop()
class MainTest(TestBase):
    def __init__(self, netperf_runtime, *args, **kargs):
        super(MainTest, self).__init__(*args, **kargs)

    def get_x_categories(self):
        return [
                # (65160, "65K"),
                # (64*2**10, "64K"),
                # (32*2**10, "32K"),
                # (16*2**10, "16K"),
                # (8*2**10, "8K"),
                (4*2**10, "4K"),
                # (2*2**10, "2K"),
                (1*2**10, "1K"),
                # (512, "512"),
                # (256, "256"),
                # (128, "128"),
                (64, "64"),
                ]

    def get_runtimes(self):
        return [
            2, 4, 8, 16, 32, 64
        ]

    def get_sensors(self):
        netperf_graph = GraphErrorBars("runtime", "throughput", r"/tmp/runtime.pdf", r"/tmp/runtime.txt")
        self.netperf = NetPerfTCP(netperf_graph, runtime=0)

        # packet_sensor = PacketNumberSensor(
        #     Graph("msg size", "packet number", r"/tmp/packet_num.pdf", r"/tmp/packet_num.txt"),
        #     Graph("msg size", "average packet size", r"/tmp/packet_size.pdf", r"/tmp/packet_size.txt")
        # )
        return [self.netperf] # , packet_sensor]

    def get_vms(self):
        qemu_virtio = Qemu(disk_path=r"../vms/ubuntu-20.img",
                           guest_ip="10.10.0.43",
                           host_ip="10.10.0.44")
        qemu_virtio.ethernet_dev = Qemu.QEMU_VIRTIO

        return [
            (qemu_virtio, "qemu_virtio"),
        ]

    def test_func(self, vm: VM, msg_size_name: str, runtime: int, x_value):
        self.netperf.runtime = runtime
        self.netperf.run_netperf(vm, msg_size_name, x_value, msg_size=x_value)

    def pre_run(self):
        for sensor in self._sensors:
            sensor.set_column_names([msg_size_name for _, msg_size_name in self._x_categories])
            sensor.set_x_tics(labels=[str(times) for times in self.get_runtimes()],
                              values=[times for times in self.get_runtimes()])

    def run(self):
        for vm, vm_name in self._vms:
            vm.setup()
            vm.run()

            for msg_size, msg_size_name in self._x_categories:
                for runtime in self.get_runtimes():
                    for i in range(self._retries):
                        for sensor in self._sensors:
                            sensor.test_before(vm)

                        logger.info("Runing msg_size=%s, runtime=%s", msg_size_name, runtime)
                        self.test_func(vm, msg_size_name, runtime, msg_size)

                        for sensor in self._sensors:
                            sensor.test_after(vm, msg_size_name, runtime)

            vm.teardown()
Ejemplo n.º 13
0
    def get_sensors(self):
        netperf_graph = GraphErrorBarsGnuplot("msg size", "throughput",
                                              path.join(self.DIR, "throughput"),
                                              graph_title="Throughput")
        self.netperf = NetPerfTCP(netperf_graph, runtime=self.netperf_runtime)

        # packet_sensor = PacketNumberSensor(
        #     Graph("msg size", "packet number", r"../tmp/packet_num.pdf", r"../tmp/packet_num.txt"),
        #     Graph("msg size", "average packet size", r"../tmp/packet_size.pdf", r"../tmp/packet_size.txt")
        # )

        packet_sensor_tx_bytes = PacketRxBytesSensor(
            Graph("msg size", "Total TX size",
                  path.join(self.DIR, "throughput-tx_bytes"),
                  normalize=self.netperf_runtime
                  )
        )
        packet_sensor_tx_packets = PacketRxPacketsSensor(
            Graph("msg size", "Total TX packets",
                  path.join(self.DIR, "throughput-tx_packets"),
                  normalize=self.netperf_runtime)
        )

        packet_sensor_avg_size = DummySensor(
            RatioGraph(packet_sensor_tx_bytes.graph, packet_sensor_tx_packets.graph,
                       "msg size", "TX Packet Size",
                       path.join(self.DIR, "throughput-tx_packet_size")
                       )
        )

        interrupt_sensor = InterruptSensor(
            Graph("msg size", "interrupt count (per sec)",
                  path.join(self.DIR, "throughput-interrupts"),
                  normalize=self.netperf_runtime)
        )

        kvm_exits = KvmExitsSensor(
            Graph("msg size", "exits count (per sec)",
                  path.join(self.DIR, "throughput-kvm_exits"),
                  normalize=self.netperf_runtime)
        )

        kvm_exits_ratio = DummySensor(
            RatioGraph(kvm_exits.graph, packet_sensor_tx_packets.graph,
                       "msg size", "Exits per Packet",
                       path.join(self.DIR, "throughput-kvm_exits-ratio")
                       )
        )

        interrupt_ratio = DummySensor(
            RatioGraph(interrupt_sensor.graph, packet_sensor_tx_packets.graph,
                       "msg size", "Interrupts per Packet",
                       path.join(self.DIR, "throughput-interrupts-ratio")
                       )
        )

        kvm_halt_exits = KvmHaltExitsSensor(
            GraphErrorBarsGnuplot("msg size", "Halt exits count (per sec)",
                                  path.join(self.DIR, "throughput-kvm_halt_exits"),
                                  normalize=self.netperf_runtime)
        )

        batch_size = QemuBatchSizeSensor(
            Graph("msg size", "Average batch size (in packets)",
                  path.join(self.DIR, "throughput-batch_size"))
        )

        batch_descriptos_size = QemuBatchDescriptorsSizeSensor(
            Graph("msg size", "Average batch size (in descriptors)",
                  path.join(self.DIR, "throughput-batch_descriptors_size"))
        )

        batch_count = QemuBatchCountSensor(
            Graph("msg size", "Average batch Count (per Sec)",
                  path.join(self.DIR, "throughput-batch_count"),
                  normalize=self.netperf_runtime)
        )

        batch_halt_ratio = DummySensor(
            RatioGraph(batch_count.graph, kvm_halt_exits.graph,
                       "msg size", "batch count / kvm halt",
                       path.join(self.DIR, "throughtput-batchCount_kvmHalt"))
        )

        cpu_sensors = get_all_cpu_sensors(self.DIR, "throughput", self.netperf_runtime)

        return [
                   self.netperf,
                   packet_sensor_tx_bytes,
                   packet_sensor_tx_packets,
                   packet_sensor_avg_size,

                   interrupt_sensor,
                   kvm_exits,

                   kvm_exits_ratio,
                   kvm_halt_exits,

                   interrupt_ratio,

                   batch_size,
                   batch_descriptos_size,
                   batch_count,
                   batch_halt_ratio,

               ] + cpu_sensors
Ejemplo n.º 14
0
class QemuRegularTest(TestBaseNetperf):
    DIR = r"../tmp/results"

    def __init__(self, netperf_runtime, *args, **kargs):
        self.netperf_runtime = netperf_runtime
        super(QemuRegularTest, self).__init__(*args, **kargs)
        # self._stop_after_test = True

    def get_x_categories(self):
        return [
            (64, "64"),
            # (128, "128"),
            (256, "256"),
            # (512, "512"),
            (1 * 2 ** 10, "1K"),
            # (2 * 2 ** 10, "2K"),
            (4 * 2 ** 10, "4K"),
            # (8 * 2 ** 10, "8K"),
            (16 * 2 ** 10, "16K"),
            # (32 * 2 ** 10, "32K"),
            (64 * 2 ** 10, "64K"),
        ]

    def get_sensors(self):
        netperf_graph = GraphErrorBarsGnuplot("msg size", "throughput",
                                              path.join(self.DIR, "throughput"),
                                              graph_title="Throughput")
        self.netperf = NetPerfTCP(netperf_graph, runtime=self.netperf_runtime)

        # packet_sensor = PacketNumberSensor(
        #     Graph("msg size", "packet number", r"../tmp/packet_num.pdf", r"../tmp/packet_num.txt"),
        #     Graph("msg size", "average packet size", r"../tmp/packet_size.pdf", r"../tmp/packet_size.txt")
        # )

        packet_sensor_tx_bytes = PacketRxBytesSensor(
            Graph("msg size", "Total TX size",
                  path.join(self.DIR, "throughput-tx_bytes"),
                  normalize=self.netperf_runtime
                  )
        )
        packet_sensor_tx_packets = PacketRxPacketsSensor(
            Graph("msg size", "Total TX packets",
                  path.join(self.DIR, "throughput-tx_packets"),
                  normalize=self.netperf_runtime)
        )

        packet_sensor_avg_size = DummySensor(
            RatioGraph(packet_sensor_tx_bytes.graph, packet_sensor_tx_packets.graph,
                       "msg size", "TX Packet Size",
                       path.join(self.DIR, "throughput-tx_packet_size")
                       )
        )

        interrupt_sensor = InterruptSensor(
            Graph("msg size", "interrupt count (per sec)",
                  path.join(self.DIR, "throughput-interrupts"),
                  normalize=self.netperf_runtime)
        )

        kvm_exits = KvmExitsSensor(
            Graph("msg size", "exits count (per sec)",
                  path.join(self.DIR, "throughput-kvm_exits"),
                  normalize=self.netperf_runtime)
        )

        kvm_exits_ratio = DummySensor(
            RatioGraph(kvm_exits.graph, packet_sensor_tx_packets.graph,
                       "msg size", "Exits per Packet",
                       path.join(self.DIR, "throughput-kvm_exits-ratio")
                       )
        )

        interrupt_ratio = DummySensor(
            RatioGraph(interrupt_sensor.graph, packet_sensor_tx_packets.graph,
                       "msg size", "Interrupts per Packet",
                       path.join(self.DIR, "throughput-interrupts-ratio")
                       )
        )

        kvm_halt_exits = KvmHaltExitsSensor(
            GraphErrorBarsGnuplot("msg size", "Halt exits count (per sec)",
                                  path.join(self.DIR, "throughput-kvm_halt_exits"),
                                  normalize=self.netperf_runtime)
        )

        batch_size = QemuBatchSizeSensor(
            Graph("msg size", "Average batch size (in packets)",
                  path.join(self.DIR, "throughput-batch_size"))
        )

        batch_descriptos_size = QemuBatchDescriptorsSizeSensor(
            Graph("msg size", "Average batch size (in descriptors)",
                  path.join(self.DIR, "throughput-batch_descriptors_size"))
        )

        batch_count = QemuBatchCountSensor(
            Graph("msg size", "Average batch Count (per Sec)",
                  path.join(self.DIR, "throughput-batch_count"),
                  normalize=self.netperf_runtime)
        )

        batch_halt_ratio = DummySensor(
            RatioGraph(batch_count.graph, kvm_halt_exits.graph,
                       "msg size", "batch count / kvm halt",
                       path.join(self.DIR, "throughtput-batchCount_kvmHalt"))
        )

        cpu_sensors = get_all_cpu_sensors(self.DIR, "throughput", self.netperf_runtime)

        return [
                   self.netperf,
                   packet_sensor_tx_bytes,
                   packet_sensor_tx_packets,
                   packet_sensor_avg_size,

                   interrupt_sensor,
                   kvm_exits,

                   kvm_exits_ratio,
                   kvm_halt_exits,

                   interrupt_ratio,

                   batch_size,
                   batch_descriptos_size,
                   batch_count,
                   batch_halt_ratio,

               ] + cpu_sensors

    def get_vms(self):
        qemu_virtio = Qemu(disk_path=r"../vms/ubuntu-20.img",
                           guest_ip="10.10.0.43",
                           host_ip="10.10.0.44")
        qemu_virtio.ethernet_dev = Qemu.QEMU_VIRTIO

        qemu_virtio_latency = Qemu(disk_path=r"../vms/ubuntu-20.img",
                                   guest_ip="10.10.0.43",
                                   host_ip="10.10.0.44")
        qemu_virtio_latency.ethernet_dev = Qemu.QEMU_VIRTIO
        qemu_virtio_latency.qemu_config["latency_itr"] = 2

        qemu_e1000_baseline = Qemu(disk_path=r"../vms/ubuntu-20.img",
                                   guest_ip="10.10.0.43",
                                   host_ip="10.10.0.44")
        qemu_e1000_baseline.ethernet_dev = Qemu.QEMU_E1000

        qemu_e1000_arthur = QemuE1000Max(disk_path=r"../vms/ubuntu-20.img",
                                         guest_ip="10.10.0.43",
                                         host_ip="10.10.0.44")
        qemu_e1000_arthur.qemu_config["latency_itr"] = 0
        qemu_e1000_arthur.is_io_thread_nice = False

        qemu_e1000_arthur_nice = QemuE1000Max(disk_path=r"../vms/ubuntu-20.img",
                                         guest_ip="10.10.0.43",
                                         host_ip="10.10.0.44")
        qemu_e1000_arthur_nice.qemu_config["latency_itr"] = 0


        qemu_large_queue = QemuLargeRing(disk_path=r"../vms/ubuntu-20.img",
                               guest_ip="10.10.0.43",
                               host_ip="10.10.0.44")
        qemu_large_queue.is_io_thread_nice = True

        qemu_large_queue_itr = list()
        for i in range(500, 1600, 100):
            for nice in (True, ):
                v = QemuLargeRing(disk_path=r"../vms/ubuntu-20.img",
                                 guest_ip="10.10.0.43",
                                 host_ip="10.10.0.44")
                v.is_io_thread_nice = nice
                v.qemu_config["interrupt_mitigation_multiplier"] = i
                v.qemu_config["drop_packet_every"] = 0
                v.qemu_config["interrupt_mode"] = 1
                qemu_large_queue_itr.append((v, "qemu_large_queueu_%s_itr_%d" % (["no_nice", "nice"][nice], i,)))

        return [
            # (qemu_virtio, "virtio-net_baseline"),
            # (qemu_e1000_baseline, "e1000_baseline"),

            # (qemu_e1000_arthur, "e1000_10x_arthur"),
            # (qemu_large_queue, "qemu_large_queue"),
        ] + qemu_large_queue_itr

    def test_func(self, vm: VM, vm_name: str, x_value: int):
        self.netperf.run_netperf(vm, vm_name, x_value, msg_size=x_value)
Ejemplo n.º 15
0
class MainTest(TestBaseNetperf):
    def __init__(self, netperf_runtime, *args, **kargs):
        self.netperf_runtime = netperf_runtime
        super(MainTest, self).__init__(*args, **kargs)

    def get_x_categories(self):
        return [
            # (65160, "65K"),
            (64 * 2**10, "64K"),
            (32 * 2**10, "32K"),
            (16 * 2**10, "16K"),
            (8 * 2**10, "8K"),
            (4 * 2**10, "4K"),
            (2 * 2**10, "2K"),
            (1 * 2**10, "1K"),
            (512, "512"),
            (256, "256"),
            (128, "128"),
            (64, "64"),
        ]

    def get_sensors(self):
        netperf_graph = Graph("msg size", "throughput",
                              r"/tmp/throughput_2cpu.pdf",
                              r"/tmp/throughput_2cpu.txt")
        self.netperf = NetPerfTCP(netperf_graph, runtime=self.netperf_runtime)

        packet_sensor = PacketNumberSensor(
            Graph("msg size", "packet number", r"/tmp/packet_num_2cpu.pdf",
                  r"/tmp/packet_num_2cpu.txt"),
            Graph("msg size", "average packet size",
                  r"/tmp/packet_size_2cpu.pdf", r"/tmp/packet_size_2cpu.txt"))
        return [self.netperf, packet_sensor]

    def get_vms(self):
        qemu_virtio = Qemu(disk_path=r"../vms/ubuntu-20.img",
                           guest_ip="10.10.0.43",
                           host_ip="10.10.0.44")
        qemu_virtio.ethernet_dev = Qemu.QEMU_VIRTIO
        qemu_virtio.io_thread_cpu = "1"

        qemu_e1000 = Qemu(disk_path=r"../vms/ubuntu-20.img",
                          guest_ip="10.10.0.43",
                          host_ip="10.10.0.44")
        qemu_e1000.ethernet_dev = Qemu.QEMU_E1000
        qemu_e1000.io_thread_cpu = "1"

        qemu_e1000_best = QemuE1000Max(disk_path=r"../vms/ubuntu-20.img",
                                       guest_ip="10.10.0.43",
                                       host_ip="10.10.0.44")
        qemu_e1000_best.io_thread_cpu = "1"

        # self.qemu_virtio_1g = Qemu(disk_path=r"../vms/ubuntu-20.img",
        #                            guest_ip="10.10.0.43",
        #                            host_ip="10.10.0.44")
        # self.qemu_virtio_1g.ethernet_dev = Qemu.QEMU_VIRTIO
        # self.qemu_virtio_1g.mem=1024
        #
        # self.qemu_e1000_1g = Qemu(disk_path=r"../vms/ubuntu-20.img",
        #                           guest_ip="10.10.0.43",
        #                           host_ip="10.10.0.44")
        # self.qemu_e1000_1g.ethernet_dev = Qemu.QEMU_E1000
        # self.qemu_e1000_1g.mem=1024

        return [
            (qemu_virtio, "qemu_virtio_base"),
            (qemu_e1000, "qemu_e1000_base"),
            (qemu_e1000_best, "qemu_e1000"),
            # (self.qemu_virtio_1g, "qemu_virtio_1G"),
            # (self.qemu_e1000_1g, "qemu_e1000_1G"),
        ]

    def test_func(self, vm: VM, vm_name: str, x_value: int):
        self.netperf.run_netperf(vm, vm_name, x_value, msg_size=x_value)
Ejemplo n.º 16
0
class MainTest(TestBase2VM):
    def __init__(self, netperf_runtime, *args, **kargs):
        self.netperf_runtime = netperf_runtime
        super(MainTest, self).__init__(*args, **kargs)

    def get_x_categories(self):
        return [
            # (65160, "65K"),
            (64 * 2 ** 10, "64K"),
            (32 * 2 ** 10, "32K"),
            (16 * 2 ** 10, "16K"),
            (8 * 2 ** 10, "8K"),
            (4 * 2 ** 10, "4K"),
            (2 * 2 ** 10, "2K"),
            (1 * 2 ** 10, "1K"),
            (512, "512"),
            (256, "256"),
            (128, "128"),
            (64, "64"),
        ]

    def get_sensors(self):
        netperf_graph = Graph("msg size", "throughput", r"/tmp/throughput_qemu_vm2vm.pdf",
                              r"/tmp/throughput_qemu_vm2vm.txt")
        self.netperf = NetPerfTCP(netperf_graph, runtime=self.netperf_runtime)

        packet_sensor = PacketNumberSensor(
            Graph("msg size", "packet number", r"/tmp/packet_num_vm2vm.pdf", r"/tmp/packet_num_vm2vm.txt"),
            Graph("msg size", "average packet size", r"/tmp/packet_size_vm2vm.pdf", r"/tmp/packet_size_vm2vm.txt")
        )
        return [self.netperf, packet_sensor]

    def test_func(self, vm: VM, vm_name: str, x_value: int, remote_ip=None):
        self.netperf.run_netperf(vm, vm_name, x_value, remote_ip=remote_ip, msg_size=x_value)

    def get_vms(self):
        qemu_virtio1 = Qemu(disk_path=r"../vms/ubuntu-20.img",
                            guest_ip="10.10.0.43",
                            host_ip="10.10.0.44")
        qemu_virtio1.ethernet_dev = Qemu.QEMU_VIRTIO
        qemu_virtio2 = Qemu(disk_path=r"../vms/vm-copy.img",
                            guest_ip="10.10.0.42",
                            host_ip="10.10.0.44")
        qemu_virtio2.vnc_number = 11
        qemu_virtio2.ethernet_dev = Qemu.QEMU_VIRTIO
        qemu_virtio2.mac_address = "52:54:00:a0:e5:1d"
        qemu_virtio2.cpu_to_pin = 3

        qemu_e1000_1 = Qemu(disk_path=r"../vms/ubuntu-20.img",
                            guest_ip="10.10.0.43",
                            host_ip="10.10.0.44")
        qemu_e1000_1.ethernet_dev = Qemu.QEMU_E1000
        qemu_e1000_2 = Qemu(disk_path=r"../vms/vm-copy.img",
                            guest_ip="10.10.0.42",
                            host_ip="10.10.0.44")
        qemu_e1000_2.ethernet_dev = Qemu.QEMU_E1000
        qemu_e1000_2.vnc_number = 11
        qemu_e1000_2.mac_address = "52:54:00:a0:e5:1d"
        qemu_e1000_2.cpu_to_pin = 3

        qemu_e1000_best1 = QemuE1000GuestOnly(disk_path=r"../vms/ubuntu-20.img",
                                              guest_ip="10.10.0.43",
                                              host_ip="10.10.0.44")
        qemu_e1000_best2 = QemuE1000GuestOnly(disk_path=r"../vms/vm-copy.img",
                                              guest_ip="10.10.0.42",
                                              host_ip="10.10.0.44")
        qemu_e1000_best2.vnc_number = 11
        qemu_e1000_best2.mac_address = "52:54:00:a0:e5:1d"
        qemu_e1000_best2.cpu_to_pin = 3

        for vm in (qemu_virtio1, qemu_virtio2, qemu_e1000_1, qemu_e1000_2, qemu_e1000_best1,
                   qemu_e1000_best2):
            vm.bridge = "br-vms"
            # vm.cpu_to_pin = "0-3"

        return [
            (qemu_e1000_1, qemu_e1000_2, "qemu_e1000_base"),
            (qemu_virtio1, qemu_virtio2, "qemu_virtio_base"),
            (qemu_e1000_best1, qemu_e1000_best2, "qemu_e1000_tcp_checksum"),
        ]

    def configure_bride(self):
        run_command("sudo brctl addbr br-vms")
        run_command("sudo  ip link set {tap} up".format(tap="br-vms"))
        run_command("sudo ip a a {host_ip}/24 dev {tap}".format(host_ip="10.10.0.44",
                                                                tap="br-vms"))

    def teardown_bridge(self):
        run_command_check("sudo  ip link set {tap} down".format(tap="br-vms"))
        run_command_check("sudo brctl delbr br-vms")