diff --git a/bin/r/response-time-of-chunks-of-calls-30-November-2016.pdf b/bin/r/response-time-of-chunks-of-calls-30-November-2016.pdf new file mode 100644 index 0000000000000000000000000000000000000000..16cab1f8f5cbe33e77fd7810f40b984dd56f6d6b Binary files /dev/null and b/bin/r/response-time-of-chunks-of-calls-30-November-2016.pdf differ diff --git a/bin/r/response-time-of-chunks-of-calls.r b/bin/r/response-time-of-chunks-of-calls.r new file mode 100644 index 0000000000000000000000000000000000000000..331bd7a851733ff4794a12a9d1edf82d5fa3b4c6 --- /dev/null +++ b/bin/r/response-time-of-chunks-of-calls.r @@ -0,0 +1,107 @@ +library("data.table") # fread (fast csv reading) + +pdf(file=sprintf("response-time-of-chunks-of-calls-%s.pdf", format(Sys.time(), format="%d-%B-%Y"))) + +filename = "response-time-of-chunks-of-calls.csv" +numFirstValuesToIgnore = 10000000 +chunkSize = 10000 + +colors = c("red", "blue", "green", "black") +yVerticals = c(NA, 2, NA, 2) + +# returns a data.table (by default) +## which enhances/extends a data.frame +### which in turn is a list of vectors. +#### Each vector in the list represents a row with its column values. +csvTable = fread(filename, skip=numFirstValuesToIgnore) +# csvTable with an additional column "id" which contains the row numbers +csvTable[, id:=1:.N] + +print(csvTable) + +# default column name: "V" followed by the column number +thread <- csvTable[["V1"]] +time <- csvTable[["V2"]] +# groupedTime is a table with "id" and "V1" +groupedMaxTime <- csvTable[, max(V2), by=.((id-1)%/%chunkSize)] +groupedMeanTime <- csvTable[, mean(V2), by=.((id-1)%/%chunkSize)] +groupedMedianTime <- csvTable[, median(V2), by=.((id-1)%/%chunkSize)] +groupedMinTime <- csvTable[, min(V2), by=.((id-1)%/%chunkSize)] +memory <- csvTable[["V3"]] +gcActivity <- csvTable[["V4"]] + +maxTimes <- groupedMaxTime[["V1"]] +meanTimes <- groupedMeanTime[["V1"]] +medianTimes <- groupedMedianTime[["V1"]] +minTimes <- groupedMinTime[["V1"]] + +# disable scientific number representation, e.g., 1e+07 +options(scipen=10) + +ts.plot( + ts(maxTimes), ts(meanTimes), ts(medianTimes), ts(minTimes), + gpars = list(yaxt="n", xaxt="n"), + col=colors, + type="l", + log="y", + xlab="Chunk", + ylab="Response time (in us) of a chunk" +) +# display x-ticks with "th" as suffix +ticks <- axTicks(1) +axis(1, at = ticks, labels=sprintf("%dth", ticks)) +# display y-ticks in micro seconds (so, we divide the current ticks by 1000) +ticks <- axTicks(2) +axis(2, at = ticks, labels=ticks/1000) + +legend("top", c("max", "mean", "median", "min"), + fill=colors, + horiz=TRUE, + title=sprintf("Each chunk of %d calls is aggregated via:", chunkSize) +) + +i=1 +plot(maxTimes, col=colors[i], type="l") +plot(meanTimes, col=colors[i+1], type="l") +plot(medianTimes, col=colors[i+2], type="l") +plot(minTimes, col=colors[i+3], type="l") + + +### experimental code ### +#print("experimental code follows...") + +#csvTable = fread(filename, skip=0, nrows=10) +#csvTable = fread(filename, skip=numFirstValuesToIgnore, select=c(1,2)) +#csvTable = fread(filename, skip=numFirstValuesToIgnore, select=c("thread","time")) + +#print(csvTable) + +# increase the width of the plot (margin) due to multiple y-axes +#par(oma = c(0, 2, 0, 2)) + +# returns the column named "thread" as vector +#csvTable[["thread"]] + +# returns the column with number 1 as vector +#csvTable[1] + +#numRows = csvTable[, .N] + +# default column name: "V" followed by the column number +#x <- seq(1:numRows) + +#groupedTime <- csvTable[,c(V2),by=V1] +#print(groupedTime) + +# x and y are each a list of values +#plot(x,y) +# y label is "-log_10(p)" +#plot(x,y, ylab=expression(-log[10](italic(p)))) + +# axis(..): side=2 means left side; side=4 means right side + +#labels <- sapply(ticks, function(i) as.expression(bquote(10^ .(i)))) +# labels <- c("a", "b", "c") + +# write pdf +invisible(dev.off())