Пример #1
0
    def _create_taskset_from_file(self, params, res_number, folderpath, collaborative):
        ts = []

        """ read a taskset in sched.py done (-S option included) """
        with open (folderpath+"/sched.py", 'r') as f:
            index = 0
            for line in f:
                elements = line.split()
                c = int(elements[4])
                p = int(elements[5])
                temp = SporadicTask(c, p, p)
                temp.id = index
                index = index + 1
                ts.append(temp)
        """ distribute resources """
        resources.initialize_resource_model(ts)
        ts.sort(key=lambda x:x.cost, reverse=True)
        self._custom_distribute(ts, collaborative, res_number)

        """ create the params from params.py file """
        temp = {}
        with open (folderpath+"/params.py", 'r') as f:
            temp = eval(f.read())
        for key in temp:
            params[key] = temp[key]
        """ adding RES parameters """
        params['cpus'] = int(params['cpus'])
        params['res_nmb'] = res_number
        params['res_distr'] = collaborative
        params['res_weight'] = 0
        return ts
Пример #2
0
def split_task_C_equal_D(t, wcet_part_one, split_callback):
    t1 = SporadicTask(wcet_part_one, t.period, deadline=wcet_part_one, id=t.id)
    t2 = SporadicTask(t.cost - wcet_part_one, t.period,
                      deadline=t.deadline - wcet_part_one, id=t.id)
    t2.affinity = set(t.affinity)
    if split_callback:
        split_callback(t, t1, t2)
    return (t1, t2)
Пример #3
0
def split_task_C_equal_D(t, wcet_part_one, split_callback):
    t1 = SporadicTask(wcet_part_one, t.period, deadline=wcet_part_one, id=t.id)
    t2 = SporadicTask(t.cost - wcet_part_one,
                      t.period,
                      deadline=t.deadline - wcet_part_one,
                      id=t.id)
    t2.affinity = set(t.affinity)
    if split_callback:
        split_callback(t, t1, t2)
    return (t1, t2)
Пример #4
0
def gen_taskset(periods, period_distribution, tasks_n, utilization,
                period_granularity=None, scale=ms2us, want_integral=True):
    if periods in NAMED_PERIODS:
        # Look up by name.
        (period_min, period_max) = NAMED_PERIODS[periods]
    else:
        # If unknown, then assume caller specified range manually.
        (period_min, period_max) = periods
    x = StaffordRandFixedSum(tasks_n, utilization, 1)
    if period_granularity is None:
        period_granularity = period_min
    periods = gen_periods(tasks_n, 1, period_min, period_max, period_granularity, period_distribution)
    ts = TaskSystem()

    periods = numpy.maximum(periods[0], max(period_min, period_granularity))

    C = scale(x[0] * periods)

    taskset = numpy.c_[x[0], C / periods, periods, C]
    for t in range(numpy.size(taskset,0)):
        ts.append(SporadicTask(taskset[t][3], scale(taskset[t][2])))

    if want_integral:
        quantize_params(ts)
    return ts
Пример #5
0
    def __init__(self, length, period, deadline=None, id=None, tid=None):
        """The structure of a CANMessage is almost similar to SporadicTask, 
        except that a CAN message does not have a WCET (cost), but rather the 
        payload size. We use the same field 'cost' o store the payload size.
        CANMessage also has a 'tid' field. The 'id' is unique per message, but 
        the 'tid' field remains same for message replicas.
        """
        SporadicTask.__init__(self, length, period, deadline, id)
        self.tid = tid
        self.transfer_delay = None
        self.jitter = 0

        self.max_framesize = 44 + (8 * length) 
        self.max_framesize += math.floor((33 + (8 * length)) / 4.0)
        self.max_framesize = int(self.max_framesize)
        self.critical = False
Пример #6
0
    def __init__(self, length, period, deadline=None, id=None, tid=None):
        """The structure of a CANMessage is almost similar to SporadicTask, 
        except that a CAN message does not have a WCET (cost), but rather the 
        payload size. We use the same field 'cost' o store the payload size.
        CANMessage also has a 'tid' field. The 'id' is unique per message, but 
        the 'tid' field remains same for message replicas.
        """
        SporadicTask.__init__(self, length, period, deadline, id)
        self.tid = tid
        self.transfer_delay = None
        self.jitter = 0

        self.max_framesize = 44 + (8 * length)
        self.max_framesize += math.floor((33 + (8 * length)) / 4.0)
        self.max_framesize = int(self.max_framesize)
        self.critical = False
Пример #7
0
def charge_scheduling_overheads(oheads, num_cpus, dedicated_irq, taskset):
    if not oheads or not taskset:
        return TaskSystem(taskset)

    event_latency = oheads.release_latency(taskset)

    # pseudo-task representing the tick interrupt
    tck = oheads.tick(taskset)
    if tck > 0:
        tick_isr = SporadicTask(tck, oheads.quantum_length)
        tick_isr.jitter = event_latency
        tick_tasks = [tick_isr]
    else:
        tick_tasks = []

    # pseudo-tasks representing release interrupts
    rel_cost   = oheads.release(taskset)
    if not dedicated_irq and rel_cost > 0:
        release_tasks = [SporadicTask(rel_cost, t.period) for t in taskset]
        for isr in release_tasks:
            isr.jitter = event_latency
    else:
        release_tasks = [] # releases don't impact tasks directly

    # account for initial release delay as jitter
    release_delay = event_latency + oheads.release(taskset)
    if dedicated_irq:
        release_delay += oheads.ipi_latency(taskset)

    for t in taskset:
        if not 'jitter' in t.__dict__:
            t.jitter = 0
        t.jitter += release_delay

    # account for scheduling cost and CPMD
    sched  = oheads.schedule(taskset)
    cxs    = oheads.ctx_switch(taskset)
    cpmd   = oheads.cache_affinity_loss(taskset)
    preemption = 2 * (sched + cxs) + cpmd
    for t in taskset:
        t.cost += preemption

    return TaskSystem(tick_tasks + release_tasks + taskset)
Пример #8
0
 def _from_file(self, file_name):
     with open(file_name, 'r') as f:
         data = f.read().strip()
     try:
         schedule = eval(data)
     except:
         schedule = run_exps.convert_data(data)
     ts = []
     for task_conf in schedule['task']:
         (task, args) = (task_conf[0], task_conf[1])
         real_args = args.split()
         index = 0
         if '-S' in real_args:
             index = real_args.index('-S') + 2
         ts.append(SporadicTask(int(real_args[index + 0]), int(real_args[index + 1])))
     return ts
Пример #9
0
def gen_tasksets(options):
    x = StaffordRandFixedSum(options.n, options.util, 1)
    periods = gen_periods(options.n, 1, options.permin, options.permax, options.pergran, options.perdist)
    ts = TaskSystem()

    C = x[0] * periods[0]
    if options.round_C:
        C = numpy.round(C, decimals=0)
    elif options.floor_C:
        C = numpy.floor(C)

    taskset = numpy.c_[x[0], C / periods[0], periods[0], C]
    for t in range(numpy.size(taskset,0)):
        ts.append(SporadicTask(taskset[t][3], taskset[t][2]))

#    print ts
    return ts