def __build_modified_profiles(mix): for handle in mix.handles: print 'processing modified profile %s ...' % (handle.name) # Load TS ts_name = wmeta.times_name(handle, wmeta.MUTATION_PNORM, mix) # Modify CPU normal profile profile = profile_modifier.process_trace(tc.connection(), ts_name, handle.modifier, handle.additive, handle.scale, handle.shift) # Attach profile to handle handle.profile_frequency, handle.profile = profile # Store profiles for handle in mix.handles: profile = np.array(handle.profile) profile_frequency = handle.profile_frequency for size in xrange(conf_domainsize.count_domain_sizes()): size = conf_domainsize.get_domain_spec(size).max_user_demand() user_profile = (profile / 100.0) * size.users profile_frequency = profile_frequency / (wmeta.CYCLE_TIME / schedule_builder.EXPERIMENT_DURATION) user_profile = np.array(user_profile) user_profile += 5 if not DRY_RUN: print 'storing modified profile %s ...' % (handle.name) __write_profile(wmeta.times_name(handle, wmeta.MUTATION_PUSER, mix), user_profile, profile_frequency)
def __write_profile(name, ts, frequency, overwrite=True): # Check if the profile exists if len(tc.connection().find(name)) > 0: # Double check if it is allowed to overwrite profiles in Times if overwrite: tc.connection().remove(name) else: print 'WARNING - will not overwrite profile %s' % name return # Create a new ts print ' writing profile handles %s' % (name) tc.connection().create(name, frequency) # Crete elements array elements = [] for i in xrange(len(ts)): item = ts[i] element = ttypes.Element() element.timestamp = i * frequency element.value = item elements.append(element) # Append elements to ts tc.connection().append(name, elements)
def __build_sampleday(mix, handles): # Build profiles from sample days for handle in handles: print 'processing sample day %s ...' % (handle.name) profile = profile_sampleday.process_trace(tc.connection(), wmeta.times_name(handle, wmeta.MUTATION_RAW), wmeta.CYCLE_TIME, handle.htype.day) # Attach profile to handle handle.profile_frequency, handle.profile = profile # Max value in each set of TS normalizing_value = __get_normalizing_value(handles) # Store profiles for handle in handles: print 'storing sample day %s ...' % (handle.name) __store_profile_yarns(mix, handle, normalizing_value, handle.profile, handle.profile_frequency)
def __build_convolutions(mix, handles): # Build profiles by convolution for handle in handles: print 'processing convolution: %s ...' % (handle.name) profile = profile_convolution.process_trace(tc.connection(), wmeta.times_name(handle, wmeta.MUTATION_RAW), wmeta.CYCLE_TIME) # Attach profile to handle handle.profile_frequency, handle.profile = profile # Get normalizing value for each handle type normalizing_value = __get_normalizing_value(handles) # Store profiles for handle in handles: print 'storing convolution: %s ...' % (handle.name) __store_profile_yarns(mix, handle, normalizing_value, handle.profile, handle.profile_frequency)
def createBenchmarkProfile(name, users, freq, duration): # Check if the profile exists if len(tc.connection().find(name)) > 0: # Double check if it is allowed to overwrite profiles in Times if overwrite: tc.connection().remove(name) else: print 'WARNING - will not overwrite profile %s' % name return # Create a new ts print ' writing profile handles %s' % (name) tc.connection().create(name, freq) # Crete elements array elements = [] for i in xrange(duration / freq): element = ttypes.Element() element.timestamp = i * freq element.value = users elements.append(element) # Append elements to ts tc.connection().append(name, elements)