MetricsTable (
	"[total] Total execution time",
	"[tthruput] Total thruput in KBps",
	"[tread] Record read time, avg MSEC",
	"[tread_sd] Record read time, stddev MSEC",
	"[twrite] Record write time, avg MSEC",
	"[twrite_sd] Record write time, stddev MSEC",
	"Wall Clock Time",
	"Execution Time"
    	) {
	name <- "Metrics Summary",
	x_axis <- "Value",
	y_axis <- "Metric",
	menu <- "Metrics"
}

MetricsTable (
    	"[Pattern] Access pattern",
    	"[Nio] Number of I/O procs",
    	"[Ncomp] Number of compute procs",
	"[NO_OF_DISKS]",
	"[STAGE] Stage number",
	"[CPFS] CPFS type",
	"[IOPFS] IOPFS type",
	"[CONSISTENCY] Consistency type",
        "[AHEAD_BEHIND] IOP ahead/behind", 
	"[FILE_BLOCKS] in blocks",
	"[FILE_SIZE] in bytes",
	"[RECORD_SIZE] in bytes",
	"[NUM_RECORDS]",
	"[BLOCK_SIZE] in bytes",
        "[DISK_TYPE]",
        "[DISK_LAYOUT]",
    	"[DISK_SORT] Sort disk requests",
	"[DISK_READ_TIME] in msec",
	"[DISK_WRITE_TIME] in msec",
	"[NET_SCATTER_GATHER]",
	"[TICSperSEC] TICS per second",
	"[BYTESperSEC] Bytes per second",
	"[BYTESperFLIT] Bytes per flit"
    	) {
    	name <- "Parameters Summary",
	x_axis <- "Value",
	y_axis <- "Parameter",
	menu <- "Parameters"
}

MetricsTable (
    "[CPread_n] FS*read call count",
    "[CPread_bytes] FS*read byte count",
    "[tread] Record read time, avg MSEC",
    "[tread_sd] Record read time, stddev MSEC",

    "[IOPread_n] IOPread call count",
    "[IOPread_bytes] IOPread byte count",
    "[IOPread] read time, avg MSEC",
    "[IOPread_sd] read time, stddev MSEC",

    "[CPwrite_n] FS*write call count",
    "[CPwrite_bytes] FS*write byte count",
    "[twrite] Record write time, avg MSEC",
    "[twrite_sd] Record write time, stddev MSEC",

    "[IOPwrite_n] IOPwrite call count",
    "[IOPwrite_bytes] IOPwrite byte count",
    "[IOPwrite] write time, avg MSEC",
    "[IOPwrite_sd] write time, stddev MSEC",

    "[Redirects] Redirects, fraction successful"
    ) {
	name <- "Transfers: calls, bytes, and times",
	x_axis <- "Value",
	y_axis <- "Metric",
	menu <- "Transfers"
}

ArrayMetricsGraph "[diskread] Disk reads, per disk" {
	name <- "Disk reads, per disk",
	menu <- "diskread",
	x_axis <- "Disk reads"
}

ArrayMetricsGraph "[diskwrite] Disk writes, per disk" {
	name <- "Disk writes, per disk",
	menu <- "diskwrite",
	x_axis <- "Disk writes"
}

ArrayMetricsGraph "[diskidle] Disk idle time, per disk" {
	name <- "Disk idle time, per disk",
	menu <- "diskidle",
	x_axis <- "Disk idle time (msec)"
}

ArrayMetricsGraph "[diskwait] Disk wait time, avg" {
	name <- "Disk wait time (average), per disk",
	menu <- "diskwait",
	x_axis <- "Disk wait time (msec)"
}

ArrayMetricsGraph "[diskwait_sd] Disk wait time, std dev" {
	name <- "Disk wait time (std dev), per disk",
	menu <- "diskwait_sd",
	x_axis <- "Disk wait time standard deviation (msec)"
}

ArrayMetricsGraph "[ithruput] Inner thruput in KBps, per CP" {
	name <- "Inner thruput per CP",
	menu <- "inner thruput graph",
	x_axis <- "Thruput per compute proc (KBps)"
}

ArrayMetricsTable "[ithruput] Inner thruput in KBps, per CP" {
	name <- "Inner thruput per CP",
	menu <- "inner thruput table"
}

ArrayMetricsGraph "[othruput] Outer thruput in KBps, per CP" {
	name <- "Outer thruput per CP",
	menu <- "outer thruput graph",
	x_axis <- "Thruput per compute proc (KBps)"
}

ArrayMetricsTable "[othruput] Outer thruput in KBps, per CP" {
	name <- "Outer thruput per CP",
	menu <- "outer thruput table"
}

ArrayMetricsGraph "[miss] Cache misses, per proc" {
	name <- "Cache misses per processor",
	menu <- "cache miss graph",
	x_axis <- "Number of cache misses"
}

ArrayMetricsTable "[miss] Cache misses, per proc" {
	name <- "Cache misses per processor",
	menu <- "cache miss table"
}

ArrayMetricsGraph "[hit] Cache hits, per proc" {
	name <- "Cache hits per processor",
	menu <- "cache hit graph",
	x_axis <- "Number of cache hits"
}

ArrayMetricsTable "[hit] Cache hits, per proc" {
	name <- "Cache hits per processor",
	menu <- "cache hit table"
}

ArrayMetricsGraph "[diskmiss] Disk cache misses, per disk" {
	name <- "DiskCache misses per disk",
	menu <- "diskcache miss graph",
	x_axis <- "Number of disk-cache misses"
}

ArrayMetricsTable "[diskmiss] Disk cache misses, per disk" {
	name <- "DiskCache misses per disk",
	menu <- "diskcache miss table"
}

ArrayMetricsGraph "[diskhit] Disk cache hits, per disk" {
	name <- "DiskCache hits per disk",
	menu <- "diskcache hit graph",
	x_axis <- "Number of disk-cache hits"
}

ArrayMetricsTable "[diskhit] Disk cache hits, per disk" {
	name <- "DiskCache hits per disk",
	menu <- "diskcache hit table"
}

ArrayMetricsGraph "[diskmoves] Disk movements, per disk" {
	name <- "Disk movements per disk",
	menu <- "diskmoves graph",
	x_axis <- "Number of disk movements"
}

ArrayMetricsTable "[diskmoves] Disk movements, per disk" {
	name <- "Disk movements per disk",
	menu <- "diskmoves table"
}

Map reversemap {
	"Busy" 0, "Idle" 1 }

ArrayGraph diskbusy (d, 0, NO_OF_DISKS - 1) {
	name <- "Disk Lifelines",
	menu <- "Disk Lifelines",
	usemap <- reversemap,
	y_axis <- "Disk",
	action {
		EV_DISKBUSY: DEC(d),
		EV_DISKIDLE: INC(d)
	}
}

Map themap {
	"Busy" 1, "Idle" 0 }

ArrayGraph lifelines (p, 1, metric("[Nio] Number of I/O procs")
    	    	         + metric("[Ncomp] Number of compute procs")) {
	name <- "Processor Lifelines",
	menu <- "Proc Lifelines",
	usemap <- themap,
	y_axis <- "Processor",
	action {
		EV_BUSY: INC(p),
		EV_IDLE: DEC(p)
	}
}

Map diskstate {
	"Idle" 0, "Control" 1, "Move" 2, "Transfer" 3 }

Map busstate {
	"Idle" 0, "Grab" 1, "Command" 2, "Data" 3 }

ArrayGraph diskactivity (disk, 0, NO_OF_DISKS-1)  {
	name <- "Disk status vs time",
	menu <- "Disk Activity",
	x_axis <- "Time",
	y_axis <- "Disk",
    	usemap <- diskstate,
    	action { EV_DISKSTATE : VALUE(disk) }
}

ArrayGraph busactivity (bus, 0, NO_OF_DISKS-1)  {
	name <- "Bus status vs time",
	menu <- "Bus Activity",
	x_axis <- "Time",
	y_axis <- "Bus",
    	usemap <- busstate,
    	action { EV_BUSSTATE : VALUE(bus) }
}

ArrayMetricsTable "profile calls" {
	name <- "Procedure Calls",
	menu <- "Calls",
	x_axis <- "Number of Calls",
	y_axis <- "Procedure",
	profile
}

ArrayMetricsTable "profile time" {
	name <- "Procedure Times",
	menu <- "Procedure Times",
	x_axis <- "Total Time",
	y_axis <- "Procedure",
	profile
}

