2019-10-31 17:05:47 +00:00
library ( ggplot2 )
library ( sqldf )
library ( plyr )
library ( dplyr )
2019-11-01 14:34:23 +00:00
library ( cowplot )
2019-10-31 17:05:47 +00:00
2019-11-02 16:53:27 +00:00
d <- read.csv ( " ../../donar-res/tmp_light/window3.csv" )
d <- d %>% mutate ( window = window / 1000 )
2019-10-31 17:05:47 +00:00
d $ strat <- as.factor ( d $ strat )
d $ window <- as.factor ( d $ window )
#d$decile <- factor(d$decile, levels = c("MIN", "D0.1", "D1", "D25", "D50", "D75", "D99", "D99.9"))
2019-11-02 16:53:27 +00:00
d $ percentile <- factor ( d $ percentile , levels = c ( " MAX" , " P99.9" , " P99" , " P75" , " P50" , " P25" , " P1" , " P0.1" , " MIN" ) )
2019-11-01 14:34:23 +00:00
d $ strat <- revalue ( d $ strat , c ( " 1" = " T" , " 0" = " D" ) )
2019-10-31 17:05:47 +00:00
d <- d %>% mutate ( lat = latency / 1000 )
2019-11-02 16:53:27 +00:00
gd <- ggplot ( sqldf ( " select * from d where percentile != 'MAX' and percentile != 'P1' and percentile != 'P0.1'" ) %>% arrange ( percentile ) , aes ( x = strat : window , y = lat , group = percentile , fill = percentile ) ) +
2019-10-31 17:05:47 +00:00
geom_bar ( stat = ' identity' , position = ' identity' ) +
scale_fill_grey ( ) +
2019-11-01 14:34:23 +00:00
ylab ( " Latency (ms)" ) +
2019-11-02 16:53:27 +00:00
xlab ( " Strategy:Window (sec)" ) +
labs ( fill = " Percentile" ) +
2019-11-01 14:34:23 +00:00
coord_cartesian ( ylim = c ( 0 , 600 ) ) +
2019-10-31 17:05:47 +00:00
geom_hline ( yintercept = 200 ) +
geom_hline ( yintercept = 400 ) +
theme_classic ( )
2019-11-02 14:19:15 +00:00
e <- read.csv ( " ../../donar-res/tmp_light/links3.csv" )
2019-10-31 17:05:47 +00:00
e $ strat <- as.factor ( e $ strat )
e $ links <- as.factor ( e $ links )
2019-11-01 14:34:23 +00:00
e $ strat <- revalue ( e $ strat , c ( " 1" = " T" , " 0" = " D" ) )
2019-11-02 16:53:27 +00:00
e $ percentile <- factor ( e $ percentile , levels = c ( " MAX" , " P99.9" , " P99" , " P75" , " P50" , " P25" , " P1" , " P0.1" , " MIN" ) )
2019-10-31 17:05:47 +00:00
e <- e %>% mutate ( lat = latency / 1000 )
2019-11-02 16:53:27 +00:00
ge <- ggplot ( sqldf ( " select * from e where percentile != 'MAX' and percentile != 'P1' and percentile != 'P0.1' and links != 6 and links != 4" ) %>% arrange ( percentile ) , aes ( x = strat : links , y = lat , group = percentile , fill = percentile ) ) +
2019-10-31 17:05:47 +00:00
geom_bar ( stat = ' identity' , position = ' identity' ) +
scale_fill_grey ( ) +
2019-11-01 14:34:23 +00:00
ylab ( " Latency (ms)" ) +
xlab ( " Strategy:Links" ) +
2019-11-02 16:53:27 +00:00
labs ( fill = " Percentile" ) +
2019-10-31 17:05:47 +00:00
geom_hline ( yintercept = 200 ) +
geom_hline ( yintercept = 400 ) +
2019-11-01 14:34:23 +00:00
coord_cartesian ( ylim = c ( 0 , 600 ) ) +
2019-10-31 17:05:47 +00:00
theme_classic ( )
2019-11-01 14:34:23 +00:00
2019-11-02 16:53:27 +00:00
f <- read.csv ( " ../../donar-res/tmp_light/fast3.csv" )
2019-11-01 14:34:23 +00:00
f $ strat <- as.factor ( f $ strat )
f $ strat <- revalue ( f $ strat , c ( " 1" = " T" , " 0" = " D" ) )
f $ fast_count <- as.factor ( f $ fast_count )
2019-11-02 16:53:27 +00:00
f $ percentile <- factor ( f $ percentile , levels = c ( " MAX" , " P99.9" , " P99" , " P75" , " P50" , " P25" , " P1" , " P0.1" , " MIN" ) )
2019-11-01 14:34:23 +00:00
f <- f %>% mutate ( lat = latency / 1000 )
2019-11-27 15:08:44 +00:00
gf <- ggplot ( sqldf ( " select * from f where percentile != 'MAX' and percentile != 'P1' and percentile != 'P0.1'" ) %>% arrange ( percentile ) , aes ( x = strat : fast_count , y = lat , group = percentile , fill = percentile ) ) +
2019-11-01 14:34:23 +00:00
geom_bar ( stat = ' identity' , position = ' identity' ) +
scale_fill_grey ( ) +
geom_hline ( yintercept = 200 ) +
geom_hline ( yintercept = 400 ) +
coord_cartesian ( ylim = c ( 0 , 600 ) ) +
ylab ( " Latency (ms)" ) +
xlab ( " Strategy:Fast Links" ) +
2019-11-02 16:53:27 +00:00
labs ( fill = " Percentile" ) +
2019-11-01 14:34:23 +00:00
theme_classic ( )
2019-11-27 15:08:44 +00:00
plot_grid ( gd , ge , gf , ncol = 1 ) + ggsave ( " light_config.pdf" , dpi = 300 , dev = ' pdf' , height = 17 , width = 15 , units = " cm" )
2019-11-02 16:53:27 +00:00
g <- read.csv ( " ../../donar-res/tmp_light/guards.csv" )
2019-11-02 14:19:15 +00:00
g $ strat <- as.factor ( g $ strat )
g $ strat <- revalue ( g $ strat , c ( " 1" = " T" , " 0" = " D" ) )
g $ guard <- as.factor ( g $ guard )
g $ guard <- revalue ( g $ guard , c ( " guard_1" = " 1" , " guard_3" = " 3" , " guard_5" = " 5" , " guard_7" = " 7" , " guard_9" = " 9" , " guard_11" = " 11" , " simple" = " inf" ) )
g $ guard <- factor ( g $ guard , levels = c ( " 1" , " 3" , " 5" , " 7" , " 9" , " 11" , " inf" ) )
2019-11-02 16:53:27 +00:00
g $ percentile <- factor ( g $ percentile , levels = c ( " MAX" , " P99.9" , " P99" , " P75" , " P50" , " P25" , " P1" , " P0.1" , " MIN" ) )
2019-11-02 14:19:15 +00:00
g <- g %>% mutate ( lat = latency / 1000 )
2019-11-02 16:53:27 +00:00
gg <- ggplot ( sqldf ( " select * from g where percentile != 'MAX' and percentile != 'P1' and percentile != 'P0.1' " ) %>% arrange ( percentile ) , aes ( x = strat : guard , y = lat , group = percentile , fill = percentile ) ) +
2019-11-02 14:19:15 +00:00
geom_bar ( stat = ' identity' , position = ' identity' ) +
scale_fill_grey ( ) +
geom_hline ( yintercept = 200 ) +
geom_hline ( yintercept = 400 ) +
coord_cartesian ( ylim = c ( 0 , 600 ) ) +
ylab ( " Latency (ms)" ) +
xlab ( " Strategy:Guards" ) +
2019-11-27 15:08:44 +00:00
labs ( fill = " Percentile" ) +
2019-11-02 14:19:15 +00:00
theme_classic ( )
2019-11-02 16:53:27 +00:00
gg + ggsave ( " light_guards.png" , dpi = 300 , dev = ' png' , height = 7 , width = 15 , units = " cm" )
2019-11-27 15:08:44 +00:00
h <- read.csv ( " ../../donar-res/tmp_light/complem.csv" )
h $ strat <- revalue ( h $ strat , c ( " ticktock" = " T" , " duplicate" = " D" ) )
h $ percentile <- factor ( h $ percentile , levels = c ( " MAX" , " P99.9" , " P99" , " P75" , " P50" , " P25" , " P1" , " P0.1" , " MIN" ) )
h $ mode <- factor ( h $ mode , levels = c ( " no_redundancy" , " no_scheduler" , " donar" ) )
h $ mode <- revalue ( h $ mode , c ( " no_redundancy" = " scheduler" , " no_scheduler" = " padding" , " donar" = " both" ) )
h <- h %>% mutate ( lat = latency / 1000 )
gh <- ggplot ( sqldf ( " select * from h where percentile != 'MAX' and percentile != 'P1' and percentile != 'P0.1' " ) %>% arrange ( percentile ) , aes ( x = strat : mode , y = lat , group = percentile , fill = percentile ) ) +
geom_bar ( stat = ' identity' , position = ' identity' ) +
scale_fill_grey ( ) +
geom_hline ( yintercept = 200 ) +
geom_hline ( yintercept = 400 ) +
coord_cartesian ( ylim = c ( 0 , 500 ) ) +
ylab ( " Latency (ms)" ) +
xlab ( " Strategy:Feature" ) +
labs ( fill = " Percentile" ) +
theme_classic ( )
gh + ggsave ( " light_complementary.png" , dpi = 300 , dev = ' png' , height = 7 , width = 15 , units = " cm" )
i <- read.csv ( " ../../donar-res/tmp_light/battle.csv" )
i $ percentile <- revalue ( i $ percentile , c ( " MAX" = " 100%" , " P99.9" = " 99.9%" , " P99" = " 99%" , " P75" = " 75%" , " P50" = " 50%" , " P25" = " 25%" , " P1" = " 1%" , " P0.1" = " 0.1%" , " MIN" = " 0%" ) )
i $ percentile <- factor ( i $ percentile , levels = c ( " 100%" , " 99.9%" , " 99%" , " 75%" , " 50%" , " 25%" , " 1%" , " 0.1%" , " 0%" ) )
i <- i %>% mutate ( lat = latency / 1000 )
i $ secmode <- factor ( i $ secmode , levels = c ( " hardened" , " default" , " light" ) )
i $ algo <- factor ( i $ algo , levels = c ( " simple" , " dup2" , " lightning-ticktock" , " lightning-dup" ) )
i $ algo <- revalue ( i $ algo , c ( " dup2" = " torfone" , " simple" = " simple" , " lightning-ticktock" = " donar-ticktock" , " lightning-dup" = " donar-dup" ) )
gi <- ggplot ( sqldf ( " select * from i where percentile != '100%' and percentile != '1%' and percentile != '0.1%' and secmode = 'default' " ) %>% arrange ( percentile ) , aes ( x = algo , y = lat , group = percentile , fill = percentile ) ) +
geom_bar ( stat = ' identity' , position = ' identity' , width = 1 ) +
#scale_fill_grey() +
scale_y_continuous ( expand = c ( 0 , 0 ) ) +
scale_x_discrete ( expand = c ( 0 , 0 ) ) +
scale_fill_viridis_d ( ) +
geom_hline ( yintercept = 200 ) +
geom_hline ( yintercept = 400 ) +
coord_cartesian ( ylim = c ( 0 , 600 ) ) +
ylab ( " Latency (ms)" ) +
xlab ( " Algorithm" ) +
labs ( fill = " Distribution" ) + #, title="linear scale, zoomed") +
theme_classic ( ) +
theme ( axis.text.x = element_text ( angle = 10 , hjust = 1 ) , plot.margin = unit ( c ( 0.3 , 0.2 , 0.2 , 1 ) , " cm" ) )
gibis <- ggplot ( sqldf ( " select * from i where percentile != 'MAX' and percentile != 'P1' and percentile != 'P0.1' " ) %>% arrange ( percentile ) , aes ( x = algo : secmode , y = lat , group = percentile , fill = percentile ) ) +
geom_bar ( stat = ' identity' , position = ' identity' ) +
scale_fill_grey ( ) +
scale_y_log10 ( ) +
#geom_hline(yintercept = 200) +
#geom_hline(yintercept = 400) +
coord_cartesian ( ylim = c ( 100 , 250000 ) ) +
ylab ( " Latency (ms)" ) +
xlab ( " Algorithm:Security Profile" ) +
labs ( fill = " Percentile" , title = " log scale, full" ) +
theme_classic ( ) +
theme ( axis.text.x = element_text ( angle = 20 , hjust = 1 ) , plot.margin = unit ( c ( 0.2 , 0.2 , 0.2 , 1 ) , " cm" ) )
plot_grid ( gibis , gi , ncol = 1 ) + ggsave ( " light_battle.png" , dpi = 300 , dev = ' png' , height = 12 , width = 15 , units = " cm" )
gi + ggsave ( " battle_color.pdf" , dpi = 300 , dev = ' pdf' , height = 7 , width = 12 , units = ' cm' )
fastprobe = read.csv ( text =
"
group , pad , count , strat
fast , orig , 0.47348781884198304 , ticktock
fast , pad , 0.2629428441715532 , ticktock
probe , orig , 0.23705662669600178 , ticktock
probe , pad , 0.026512710290461965 , ticktock
probe , orig , 0.1154165656941915 , duplicate
probe , pad , 0.015345347029610245 , duplicate
fast , orig , 0.7349205324574037 , duplicate
fast , pad , 0.13431755481879454 , duplicate
" )
gj <- ggplot ( fastprobe , aes ( x = group : pad , y = count , fill = strat ) ) +
geom_bar ( stat = ' identity' , position = ' dodge' ) +
scale_fill_grey ( ) +
ylab ( " Count" ) +
xlab ( " Group:Padding" ) +
labs ( fill = " Strategy" ) +
scale_y_continuous ( labels = scales :: percent ) +
theme_classic ( ) +
theme ( axis.text.x = element_text ( angle = 20 , hjust = 1 ) )
gj + ggsave ( " light_fastprobe.png" , dpi = 300 , dev = ' png' , height = 7 , width = 15 , units = " cm" )
fastlinks = read.csv ( text =
"
link_count , occ_count , strat
5 , 0 , ticktock
9 , 0.20634920634920634 , ticktock
8 , 0.25396825396825395 , ticktock
7 , 0.1111111111111111 , ticktock
6 , 0.1746031746031746 , ticktock
10 , 0.1746031746031746 , ticktock
11 , 0.07936507936507936 , ticktock
12 , 0 , ticktock
9 , 0.19047619047619047 , duplicate
8 , 0.14285714285714285 , duplicate
10 , 0.20634920634920634 , duplicate
7 , 0.09523809523809523 , duplicate
6 , 0.09523809523809523 , duplicate
11 , 0.14285714285714285 , duplicate
5 , 0.015873015873015872 , duplicate
12 , 0.1111111111111111 , duplicate
" )
gk <- ggplot ( fastlinks , aes ( x = link_count , y = occ_count , fill = strat ) ) +
geom_bar ( stat = ' identity' , position = ' dodge' ) +
scale_fill_grey ( ) +
ylab ( " Runs" ) +
xlab ( " Links fast at least once" ) +
labs ( fill = " Strategy" ) +
scale_y_continuous ( labels = scales :: percent ) +
theme_classic ( )
#theme(axis.text.x = element_text(angle = 20, hjust=1))
gk + ggsave ( " light_fastlinks.png" , dpi = 300 , dev = ' png' , height = 7 , width = 15 , units = " cm" )
l <- read.csv ( " ../../donar-res/tmp_light/basic.csv" )
l <- l %>% mutate ( lat = latency / 1000 )
gl <- ggplot ( sqldf ( " select * from l where way='client'" ) , aes ( x = packet_id , y = lat ) ) +
coord_cartesian ( ylim = c ( 0 , 500 ) ) +
geom_hline ( yintercept = 200 ) +
geom_hline ( yintercept = 400 ) +
xlab ( " Packet Identifier" ) +
ylab ( " Latency (ms)" ) +
labs ( linetype = " Way" ) +
geom_point ( ) +
theme_classic ( )
gl + ggsave ( " light_single.png" , dpi = 300 , dev = ' png' , height = 7 , width = 15 , units = " cm" )
m <- read.csv ( " ../../donar-res/tmp_light/fp.csv" )
m <- m %>% mutate ( lat = latency / 1000 )
gm <- ggplot ( sqldf ( " select * from m where `way`='client'" ) , aes ( x = packet_id , y = lat , color = group ) ) +
scale_color_grey ( ) +
coord_cartesian ( ylim = c ( 0 , 500 ) ) +
geom_hline ( yintercept = 200 ) +
geom_hline ( yintercept = 400 ) +
xlab ( " Packet Identifier" ) +
ylab ( " Latency (ms)" ) +
labs ( color = " Group" ) +
labs ( linetype = " Way" ) +
geom_point ( ) +
theme_classic ( )
n <- read.csv ( " ../../donar-res/tmp_light/linkgroup.csv" )
n $ group <- revalue ( n $ group , c ( " fast" = " fast link" , " probe" = " other link" ) )
gn <- ggplot ( n , aes ( x = packet_id , y = link_id , color = group ) ) +
scale_color_grey ( ) +
#scale_color_viridis_d() +
xlab ( " Packet Identifier" ) +
ylab ( " Link Identifier" ) +
labs ( color = " Group" ) +
geom_point ( ) +
theme_classic ( )
plot_grid ( gl , gm , gn , ncol = 1 ) + ggsave ( " light_single.png" , dpi = 300 , dev = ' png' , height = 17 , width = 15 , units = " cm" )
gn + ggsave ( " links_group.pdf" , dpi = 300 , dev = ' pdf' , height = 7 , width = 15 , units = " cm" )
o <- read.csv ( " ../../donar-res/tmp_light/torrate.csv" )
o <- o %>% mutate ( latency = latency / 1000 )
o <- o %>% mutate ( rate = round ( rate , 0 ) )
q1coefs <- coef ( lm ( latency ~ rate , data = sqldf ( " select rate, latency from o where percentile= 'P25'" ) ) )
mcoefs <- coef ( lm ( latency ~ rate , data = sqldf ( " select rate, latency from o where percentile= 'P50'" ) ) )
q3coefs <- coef ( lm ( latency ~ rate , data = sqldf ( " select rate, latency from o where percentile= 'P75'" ) ) )
o $ percentile <- revalue ( o $ percentile , c ( " MAX" = " 100%" , " MIN" = " 0%" , " P99.9" = " 99.9%" , " P99" = " 99%" , " P75" = " 75%" , " P50" = " 50%" , " P25" = " 25%" ) )
o $ percentile <- factor ( o $ percentile , levels = c ( " 100%" , " 99.9%" , " 99%" , " 75%" , " 50%" , " 25%" , " 1%" , " 0.1%" , " 0%" ) )
o $ rate <- factor ( o $ rate )
go <- ggplot ( sqldf ( " select * from o where percentile != 'MAX' and percentile != 'P1' and percentile != 'P0.1'" ) %>% arrange ( percentile ) , aes ( x = rate , y = latency , group = percentile , fill = percentile ) ) +
geom_bar ( stat = ' identity' , position = ' identity' , width = 1 ) +
#scale_fill_grey() +
scale_fill_viridis_d ( expand = c ( 0 , 0 ) ) +
scale_y_continuous ( expand = c ( 0 , 0 ) ) +
scale_x_discrete ( expand = c ( 0 , 0 ) ) +
ylab ( " Latency (ms)" ) +
xlab ( " Packets / second" ) +
labs ( fill = " Distribution" ) + #, title="low values") +
coord_cartesian ( ylim = c ( 0 , 500 ) ) +
geom_hline ( yintercept = 200 ) +
geom_hline ( yintercept = 400 ) +
#geom_abline(intercept = q1coefs[1], slope = q1coefs[2], linetype='dashed') +
#geom_abline(intercept = mcoefs[1], slope = mcoefs[2], linetype='dashed') +
#geom_abline(intercept = q3coefs[1], slope = q3coefs[2], linetype='dashed') +
theme_classic ( )
gp <- ggplot ( sqldf ( " select * from o where percentile != 'MAX' and percentile != 'P1' and percentile != 'P0.1'" ) %>% arrange ( percentile ) , aes ( x = rate , y = latency , group = percentile , fill = percentile ) ) +
geom_bar ( stat = ' identity' , position = ' identity' ) +
scale_fill_grey ( ) +
scale_y_log10 ( ) +
ylab ( " Latency (ms)" ) +
xlab ( " Packets / second" ) +
labs ( fill = " Percentile" , title = " high values (log scale)" ) +
coord_cartesian ( ylim = c ( 100 , 100000 ) ) +
geom_hline ( yintercept = 200 ) +
geom_hline ( yintercept = 400 ) +
theme_classic ( )
plot_grid ( gp , go , align = " v" , axis = " l" , ncol = 1 ) + ggsave ( " torrate.pdf" , dpi = 300 , dev = ' pdf' , height = 12 , width = 15 , units = " cm" )
go + ggsave ( " torrate_scale.pdf" , dpi = 300 , dev = ' pdf' , height = 6 , width = 12 , units = ' cm' )