%PDF- %PDF-
Direktori : /usr/share/doc/libproc-processtable-perl/examples/ |
Current File : //usr/share/doc/libproc-processtable-perl/examples/ppt_profile_plot.R |
#!/usr/bin/env Rscript ## created on 2013-08-30 scale_human <- function(m, info) { for(i in 1:nrow(info)) { cp <- prod(info[1:i,"factor"]) if(m/cp < 100) return( list(factor=cp,abbr=as.character(info[i,"abbr"]))) } return(list(factor=c(1), abbr=as.character(info[1, "abbr"]))) } args <- commandArgs(T) fin <- args[1] fout <- args[2] ## some basic checks if(is.na(fout)) fout <- paste0(fin,".pdf", collapse="") cat("INPUT:", fin, "\n", file=stderr()) cat("OUTPUT:", fout, "\n", file=stderr()) if(fin == fout) stop("input and output files are the same") if(file.info(fin)$size == 0) stop("input file empty") z <- read.table(fin, header=TRUE, sep="\t", fill=TRUE) ## get rid of incomplete columns (sometimes incomplete output while the profiling is running) z.incomplete.idx <- apply(z,c(1), function(x) { any(is.na(x)) }) z <- z[!z.incomplete.idx,] if(nrow(z) < 3) stop("at least 3 data points are needed") cat("data rows:", nrow(z), "\n", file=stderr()) z[!is.finite(z[,"pcpu"]),"pcpu"] <- 0 info.byte <- data.frame(factor=c(1,1024,1024,1024), abbr=c("b", "kb", "mb", "gb")) info.ts <- data.frame(factor=c(1, 60, 60, 24), abbr=c("sec", "min", "h", "d")) t.scale <- scale_human(max(z[,"time"]), info.ts) m.scale <- scale_human(median(z[,"rss"]), info.byte) k2 <- with(z, by(z, tp, function(x) { c( t=mean(x[,"time"])/t.scale[["factor"]], m=mean(x[,"rss"])/m.scale[["factor"]], pc=mean(x[,"pcpu"]) ) })) k <- as.data.frame(do.call(rbind,k2)) k$pc <- k$pc * 100 ## old method. Got rid of plyr dependency #library(plyr) #k <- ddply(z7, .(tp), summarise, t=mean(time)/t.scale[["factor"]], m=mean(rss)/m.scale[["factor"]], pc=mean(pcpu)) span <- 0.3 #if(nrow(k) > 300) #span <- 1/20 pdf(fout,width=13, height=6) plot( pc ~ t, data=k, xlab=paste0("time in ", t.scale[["abbr"]], collapse=" "), ylab="% cpu usage", cex=0.3, pch=16, col="grey20" ) with(k, lines(loess.smooth(t, pc, span=span), col = "brown", lwd=1.6)) plot( m ~ t, data=k, xlab=paste0("time in ", t.scale[["abbr"]], collapse=" "), ylab=paste0("mem in ", m.scale[["abbr"]], collapse=" "), cex=0.3, pch=16, col="grey20" ) with(k, lines(loess.smooth(t, m, span=span), col = "brown", lwd=1.6)) dev.off()