def target_workload_events(self):
        # special event indicates the start of workload
        barriergen = BarrierGen(self.conf.ssd_ncq_depth())
        yield hostevent.ControlEvent(operation=OP_ENABLE_RECORDER)
        for req in barriergen.barrier_events():
            yield req
        yield hostevent.ControlEvent(operation=OP_REC_TIMESTAMP,
                                     arg1='interest_workload_start')

        workload_line_iter = hostevent.FileLineIterator(self.ftlsim_event_path)
        event_workload_iter = hostevent.EventIterator(self.conf,
                                                      workload_line_iter)

        total_rw_bytes = 0
        for event in event_workload_iter:
            yield event

            if event.operation in [OP_READ, OP_WRITE] and event.action == 'D':
                total_rw_bytes += event.size

                if total_rw_bytes >= self.stop_on_bytes:
                    print 'break! stop on ', self.stop_on_bytes / MB
                    break

        for req in barriergen.barrier_events():
            yield req
        yield hostevent.ControlEvent(operation=OP_REC_TIMESTAMP,
                                     arg1='interest_workload_end')
    def prepfs_events(self):
        prepfs_line_iter = hostevent.FileLineIterator(self.mkfs_event_path)
        event_prepfs_iter = hostevent.EventIterator(self.conf,
                                                    prepfs_line_iter)

        for event in event_prepfs_iter:
            yield event
예제 #3
0
    def prepfs_events(self):
        prepfs_line_iter = hostevent.FileLineIterator(
            self.conf.get_ftlsim_events_output_path_mkfs())
        event_prepfs_iter = hostevent.EventIterator(self.conf, prepfs_line_iter)

        for event in event_prepfs_iter:
            yield event
예제 #4
0
    def gen_ncq_depth_table_from_event(self):
        if self.conf["workload_src"] == config.LBAGENERATOR:
            event_file_path = self.conf["lba_workload_configs"]["ftlsim_event_path"]
        else:
            event_file_path = self.conf.get_ftlsim_events_output_path()

        workload_line_iter = hostevent.FileLineIterator(event_file_path)
        event_workload_iter = hostevent.EventIterator(self.conf, workload_line_iter)

        parser = EventNCQParser(event_workload_iter)
        table = parser.parse()

        ncq_depth_table_path = os.path.join(self.conf['result_dir'],
                'ncq_depth_timeline.txt')
        with open(ncq_depth_table_path, 'w') as f:
            f.write(utils.table_to_str(table, width=0))
예제 #5
0
    def test(self):
        # blkparse-events-for-ftlsim.txt
        conf = ConfigNCQFTL()

        workload_line_iter = hostevent.FileLineIterator(
            "tests/testdata/blkparse-events-for-ftlsim.txt")
        event_workload_iter = hostevent.EventIterator(conf, workload_line_iter)

        # for event in event_workload_iter:
            # print str(event)

        parser = EventNCQParser(event_workload_iter)
        table = parser.parse()

        self.assertEqual(table[0]['pre_depth'], 0)
        self.assertEqual(table[0]['post_depth'], 1)

        self.assertEqual(table[1]['pre_depth'], 1)
        self.assertEqual(table[1]['post_depth'], 0)
예제 #6
0
    def target_workload_events(self):
        # special event indicates the start of workload
        barriergen = BarrierGen(self.conf.ssd_ncq_depth())
        yield hostevent.ControlEvent(operation=OP_ENABLE_RECORDER)
        for req in barriergen.barrier_events():
            yield req
        yield hostevent.ControlEvent(operation=OP_REC_TIMESTAMP,
                arg1='interest_workload_start')

        workload_line_iter = hostevent.FileLineIterator(
            self.conf.get_ftlsim_events_output_path())
        event_workload_iter = hostevent.EventIterator(self.conf, workload_line_iter)

        for event in event_workload_iter:
            yield event

        for req in barriergen.barrier_events():
            yield req
        yield hostevent.ControlEvent(operation=OP_REC_TIMESTAMP,
                arg1='interest_workload_end')