Skip to content

System Workload Description

Andre Merzky edited this page Oct 22, 2013 · 1 revision

Introduction

This System Workload Description is an expansion of the [[Workload Description]], tailored towards modeling purposes. As such, it does not contain details which are only relevant for actual workload execution (executable, arguments, environment...), but focuses on the resource requirements and runtime dependencies of the components. Also, several parameters are now required in order to fully specify the workload to be mapped to the infrastructure.

Specification of System Workload Description

This spec uses the EBNF notation.

#
# Characters
#
LETTER = "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" 
       | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z" ;

DIGIT  = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "-" ;

SYMBOL = "[" | "]" | "{" | "}" | "(" | ")" | "<" | ">" | "'" | '"' | "="
       | "|" | "." | "," | ";" | ":" | "_" | "-" | "+" | "&" | "*" | "%"
       | "@" | "!" | "?" | "~" | "`" | "#" | "$" | "^" ;

WHITESPACE = " " ;

#
# Positive and negative numbers 
#
NUMBER = DIGIT, { DIGIT } ;

#
# Free text strings
#
STRING = "'", { LETTER | DIGIT | SYMBOL | WHITESPACE }, "'" ;

#
# Unique identifiers for objects
#
IDENTIFIER    = LETTER, {LETTER | DIGIT | "_" | "-" } ;

#
# pre-defined keys
#
COMP_ARCH     = 'ARCHITECTURE'
COMP_LOAD     = 'FLOPs'

MEM_FREQ      = 'MEMORY_IO_FREQUENCY'
MEM_CHUNK     = 'MEMORY_IO_CHUNKSIZE'
MEM_SIZE      = 'MEMORY_SIZE_MAX'

IO_FREQ       = 'DISK_IO_FREQUENCY'
IO_CHUNK      = 'DISK_IO_CHUNKSIZE'
IO_SIZE       = 'DISK_SIZE_MAX'

NET_IN_FREQ   = 'NETWORK_INPUT_FREQUENCY'
NET_IN_CHUNK  = 'NETWORK_INPUT_CHUNKSIZE'
NET_OUT_FREQ  = 'NETWORK_OUTPUT_FREQUENCY'
NET_OUT_CHUNK = 'NETWORK_OUTPUT_CHUNKSIZE'

#
# pre-defined values
#
ANY           = '*'

#
# ordering dependencies
#
REL_TYPE      = { 'CONCURRENT'         # Start ONE and TWO concurrently
                | 'SEQUENTIAL_START'   # Start TWO when ONE is started
                | 'SEQUENTIAL_END'     # Start TWO when ONE is finished
                | 'NONE'               # Startup sequence is irrelevant
                } ;

#
# Components
#
COMP_ID       = IDENTIFIER   ;
COMP_ARCH     = STRING | ANY ;
COMP_LOAD     = NUMBER | ANY ;
MEM_FREQ      = NUMBER | ANY ;
MEM_CHUNK     = NUMBER | ANY ;
MEM_SIZE      = NUMBER | ANY ;
IO_FREQ       = NUMBER | ANY ;
IO_CHUNK      = NUMBER | ANY ;
IO_SIZE       = NUMBER | ANY ;
NET_IN_FREQ   = NUMBER | ANY ;
NET_IN_CHUNK  = NUMBER | ANY ;
NET_OUT_FREQ  = NUMBER | ANY ;
NET_OUT_CHUNK = NUMBER | ANY ;

COMPONENT     = COMP_ID,   
                COMP_ARCH,    COMP_LOAD,
                MEM_FREQ,     MEM_CHUNK,   MEM_SIZE,
                IO_FREQ,      IO_CHUNK,    IO_SIZE
                NET_IN_FREQ,  NET_IN_CHUNK,
                NET_OUT_FREQ, NET_OUT_CHUNK


#
# Relations between components -- directed edge
#
COMP_1      = COMP_ID ;    # source, from, etc.
COMP_2      = COMP_ID ;    # dest, to, etc.
REL_TYPE    = RELATION_TYPE ; 

RELATION    = COMP_1, COMP_2, REL_TYPE


#
# Workload description
#
WORKLOAD_DESCRIPTION = { COMPONENT } , { RELATION } ;
Clone this wiki locally