Project Ideas for simulator - HolDCSim/HolDCSim GitHub Wiki
The following are the list of pre-defined experiments for specific simulation needs:
Linecard Network Experiment: Experiment which implements sleep states in both the servers and switch line cards. Has the ability to use a global queue by user speicification. User can also set the amount of time each Line Card waits in the idle state before going into sleep. User can also set the job inter arrival time using the parameters.
Sleep Scale Experiment: Experiment with 1 server, and provides 5 sleep states that the server can go into: Active state, idle state, shallow sleep state, deep sleep state, and deepest sleep state. This experiment allows users to explore CPU C-States in a server.
Windowed Sleep Scale Experiment: Extension of Sleep Scale Experiment. Userspecifiesy a “window” param. The “window” param’s unit is in ms. The param enforces the server to spend this much time in each sleep state upon each transition.
Multi Server Experiment: Simple, default experiment where servers are always on. Takes 1 parameter- the # of servers.
Shallow Deep Experiment: Introduces the concept of shallow and deep sleep states. Experiment where two traffic thresholds are defined in user params- Ts and Tw. Ts is the lower bound, and Tw is the higher bound. When the traffic rate dips lower than Ts, servers will be put into shallow sleep until the traffic rate is >= Ts. When the traffic rate goes to higher than Tw, servers will be woken up (starting from servers in the lightest sleep state) until the traffic rate is <= Tw. The purpose of the shallow deep experiment is to maintain an incoming job traffic rate between Ts and Tw. After a server has entered shallow sleep state, it has the potential to enter deep sleep state(s), as specified by experiments that extend the Shallow Deep Experiment (ERover Experiment, Dual ERover Experiment).
ERover Experiment: Extension of Shallow Deep Experiment. User specifies a param which is the delay time between shallow sleep state and deep sleep state(s).
Dual ERover Experiment: Extension of the ERover experiment. A portion of the servers have a low delay time between shallow sleep state and deep sleep state(s). The other portion of servers have a longer delay time between shallow sleep state and deep sleep state(s). These delay times are specified by user parameters.
On Off Experiment: Experiment where server will immediately be turned off when all 4 cores are idle, and then be turned on again once a core is needed for an incoming job.
Delay Off Experiment: Experiment where server will be turned off after they are idle for a specified delay time. This delay time is specified by user params.
Delay Doze Experiment: Experiment where servers will go to deep sleep state after they are idle for a specified delay time. This delay time is specified by user params.
Dual Delay Doze Experiment: Experiment where a portion of the servers have a low delay time before going into deep sleep after being idle. The other portion of servers have a longer delay timer before going into deep sleep. THese delay times are specified by user params.
Configuration
A configuration file is included, with which the user can configure the different features included within HolDCSim. Below is a table which shows each of the parameters included in the configuration file, what the parameter changes, the format of the entry for that parameter, and for many of the parameters the default value the parameter is set to.
Parameter | Description | Value |
---|---|---|
topo_type |
Network Topology to be used | fattree ,bcube ,camcube ,smalltopo ,fbfly ,flowtesttopo |
topo_params |
k value for topolgoy | k=(int) |
num_of_sockets |
Number of CPU sockets | Integer (default = 1) |
cores_per_socket |
Number of cores per CPU socket | Integer (default = 1) |
network_routing_algorithm |
Which networking algorithm the experiment will use | popcorns ,elastc_tree ,djikstra |
core_switch_bw |
Bandwidth of the Core Switches | Integer (default=100000) |
aggregate_switch_bw |
Bandwidth of the Aggregate Switches | Integer (default=10000) |
edge_switch_bw |
Bandwidth of the Edge Switches | Integer (default=1000) |
core_lc_active |
Core Switch Active Power (Watts) | Integer (default=300) |
core_lc_lpi1 |
Core Switch LPI1 Power (Watts) | Integer (default=176) |
core_lc_lpi2 |
Core Switch LPI2 Power (Watts) | Integer (default=117) |
core_lc_lpi3 |
Core Switch LPI3 Power (Watts) | Integer (default=72) |
aggregate_lc_active |
Aggregate Switch Active Power (Watts) | Integer (default=200) |
aggregate_lc_lpi1 |
Aggregate Switch LPI1 Power (Watts) | Integer (default=120) |
aggregate_lc_lpi2 |
Aggregate Switch LPI2 Power (Watts) | Integer (default=78) |
aggregate_lc_lpi3 |
Aggregate Switch LPI3 Power (Watts) | Integer (default=48) |
edge_lc_active |
Edge Switch Active Power (Watts) | Integer (default=150) |
edge_lc_lpi1 |
Edge Switch LPI1 Power (Watts) | Integer (default=75) |
edge_lc_lpi2 |
Edge Switch LPI2 Power (Watts) | Integer (default=58) |
edge_lc_lpi3 |
Edge Switch LPI3 Power (Watts) | Integer (default=28) |
lc_active_to_lpi1_time |
Time before Switch transisitions from Active to LPI1 | Double (default=0.250) |
lc_lpi1_to_lpi2_time |
Time before Switch transitions from LPI1 to LPI2 | Double (default=0.750) |
lc_lpi2_to_lpi3_time |
Time before Switch transitions from LPI2 to LPI3 | Double (default=1.80) |
lc_lpi3_to_off_time |
Time before Switch transitions from LPI3 to Off | Double (default=4.00) |
Server_active_to_1_Time |
Time before Server transitions from Active to Shallow Sleep | Double (default=0.01) |
Server_1_to_4_Time |
Time before Server transitions from Shallow to Deep Sleep | Double (default=0.5) |
Server_4_to_5_Time |
Time before Server transitions from Deep to Deepest Sleep | Double (default=1) |
port_power_policy |
Power Policy of device Ports | no_management ,port_lpi |
line_card_power_policy |
Power Policy of Line Cards | no_management ,linecard_sleep |
ports_per_line_card |
Number of ports per Line Card | Integer (default=4) |
num_of_jobs |
Number of Jobs for the Experiment | fixed (int) ,random |
job_QoS |
Job Quality of Service Constraint | Integer |
num_of_tasks |
Number of Tasks | fixed (int) , random |
task_size |
Size of Each Task | fixed (int) , random |
all_jobs |
The type of workload | stride ,hotspot ,onetoone ,random ,small_topo_custom ,test_trans ,flow_test ,WSEARCH ,WSERVICE ,DNS |
packet_num |
Number of packets data is split into for communication | fixed (int) , random |
flow_size |
Size of the flows in the experiment | Integer (default = 1) |
job_workload |
The Job Workload to be used for the experiment | poisson ,mmpp ,mixed ,mmpp_fluent ,mmpp_oracle ,trace ,user_specify |
mixture |
Proportion of Mixed Workload | Double between 0 and 1 (default = 0.950) |
service_dis |
Service Distribution, either exponential or uniform | unif , expo |
trace_filename |
Filename for workload trace | |
path_preolad |
Whether or not to preload the path when initializing the experiment | Boolean 0 ,1 |
seed |
Seed used to randomize values during the experiment | Integer |
verbose |
Whether outputs are printed while running the experiement | Boolean 0 ,1 |
debug_level |
Sets the debug level for the experiment, the higher the debug level, the more information is printed | 0 ,1 ,2 ,3 |
task_scheduler |
Sets the task scheduler to be used in the experiment | energy_aware ,simple ,test_trans ,one_server |
sche_policy |
Sets the scheduling poicy, either first pick or random available | first_pick , random_avail |
multi_states |
Whether the Servers are set to use multiple sleep state levels | Boolean 0 ,1 |
job_arrivals |
Whether to log the job arrival distribution | Boolean 0 ,1 |
job_completes |
Whether to log the job completion distribuition | Boolean 0 ,1 |
collect_stats |
Whether to collect server statistics throughout experiment | Boolean 0 ,1 |
print_full_his |
Whether to print the full statistics history to log file | Boolean 0 ,1 |
print_agg_stats |
Whether to write the task start and completion time statistics to a log file | Boolean 0 ,1 |
allserver_stats |
Whether to write all server stats to an output file for later parsing | Boolean 0 ,1 |
idle_distribuition |
Whether to write the server idle distribuition to a log file | Boolean 0 ,1 |
state_durations |
Whether to write the amount of time spent in each sleep state | Boolean 0 ,1 |
energy_distributions |
Whether to log the amount of energy used by each sleep state level | Boolean 0 ,1 |
abs_percentile_90 |
Whether or not to calculate and show the 90th Percentile Latency | Boolean 0 ,1 |
skip_initial_jobs |
The number of jobs to skip as warm-up jobs during initialization | Boolean 0 ,1 |
timing_check |
Whether or not to perform a timing check to validate a successful simulation | Boolean 0 ,1 |
dump_prediction |
Whether or not to log the prediction history | Boolean 0 ,1 |
dump_sch_serverhis |
Whether to log the history of when servers are set to active by the scheduler | Boolean 0 ,1 |
dump_act_serverhis |
Whether to log the active servers throughout the experiment | Boolean 0 ,1 |
dump_queue_his |
Whether to log the queue history | Boolean 0 ,1 |
latency_percent |
The latency percent used when calculating job latency statistics | Double betwen 0 and 1 |
asyn_log |
Enables asynchronous logging, dump_prediction, dump_sch_serverhis no longer take effect when enabled | Boolean 0 ,1 |
cycle |
The length of the time window for MMPP workload (seconds) | Integer (default = 30) |
aratio |
Arrival Rate for MMPP workload | Double (default = 4.0) |
tratio |
Ratio of Active Time to Inactive Time | Between 1 and 4 |
s4_provision |
Percentage of servers required to be in the s4 sleep state during ERover Experiment | Integer |
sampling_rate |
The number of samples which are calculated and logged for server and switch graphs | Integer |
frames |
The number of frames for which data is collected for topology animation | Integer |