tor_multipath_voip/r/config_light.R

415 lines
20 KiB
R

library(ggplot2)
library(sqldf)
library(plyr)
library(dplyr)
library(cowplot)
scale_fill_bw_qdu_6 <- scale_fill_manual(values = c("#000000", "#333333", "#666666", "#999999", "#cccccc", "#ffffff"))
scale_fill_bw_qdu_4 <- scale_fill_manual(values = c("#000000", "#555555", "#aaaaaa", "#ffffff"))
d <- read.csv("../../donar-res/tmp_light/window3.csv")
d <- d %>% mutate (window = window / 1000)
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"))
d$percentile <-factor(d$percentile,levels=c("MAX", "P99.9", "P99", "P75", "P50", "P25", "P1", "P0.1", "MIN"))
d$strat <- revalue(d$strat, c("1"="TickTock", "0"="Duplicate"))
d <- d %>% mutate (lat = latency / 1000)
dwin <- sqldf("select * from d where percentile != 'MAX' and percentile != 'P1' and percentile != 'P0.1'") %>% arrange(percentile)
gd <- ggplot(dwin, aes(x=window,y=lat,group=percentile,fill=percentile)) +
geom_bar(stat='identity', position='identity', color="black", width=1) +
scale_fill_grey() +
ylab("Latency (ms)") +
xlab("Window (sec)") +
labs(fill="Percentile") +
scale_x_discrete(expand = c(0, 0)) +
scale_y_continuous(expand = c(0, 0)) +
coord_cartesian(ylim=c(0,600)) +
geom_hline(yintercept = 160, linetype="dashed", color="white") +
annotate("text", x=4, y=160, label = "QoS: OWD best", vjust = -1, color="white") +
geom_hline(yintercept = 360) +
annotate("text", x=4, y=360, label = "QoS: OWD limit", vjust = -1,color="black") +
theme_classic() +
theme(legend.position="none") +
facet_grid( . ~ strat)
e <- read.csv("../../donar-res/tmp_light/links3.csv")
e$strat <- as.factor(e$strat)
e$links <- as.factor(e$links)
e$strat <- revalue(e$strat, c("1"="TickTock", "0"="Duplicate"))
e$percentile <-factor(e$percentile,levels=c("MAX", "P99.9", "P99", "P75", "P50", "P25", "P1", "P0.1", "MIN"))
e <- e %>% mutate (lat = latency / 1000)
elinks <- sqldf("select * from e where percentile != 'MAX' and percentile != 'P1' and percentile != 'P0.1' and links != 6 and links != 4") %>% arrange(percentile)
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)) +
geom_bar(stat='identity', position='identity', width=1, color="black") +
scale_fill_grey() +
ylab("Latency (ms)") +
xlab("Strategy:Links") +
labs(fill="Percentile") +
geom_hline(yintercept = 200) +
geom_hline(yintercept = 400) +
coord_cartesian(ylim=c(0,600)) +
theme_classic()
f <- read.csv("../../donar-res/tmp_light/fast3.csv")
f$strat <- as.factor(f$strat)
f$strat <- revalue(f$strat, c("1"="TickTock", "0"="Duplicate"))
f$fast_count <- as.factor(f$fast_count)
f$percentile <-factor(f$percentile,levels=c("MAX", "P99.9", "P99", "P75", "P50", "P25", "P1", "P0.1", "MIN"))
f <- f %>% mutate (lat = latency / 1000)
ffast <- sqldf("select * from f where percentile != 'MAX' and percentile != 'P1' and percentile != 'P0.1'") %>% arrange(percentile)
gf <- ggplot(ffast, aes(x=strat:fast_count,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,600)) +
ylab("Latency (ms)") +
xlab("Strategy:Fast Links") +
labs(fill="Percentile") +
theme_classic()
plot_grid(gd, gdbis, ge, ge, gf, gf, ncol=3) +
ggsave("light_config.pdf", dpi=300, dev='pdf', height=17, width=15, units="cm")
mega <- sqldf("
select window as variable, lat, strat, percentile, 'Window (sec)' as variable_name from dwin
union
select links as variable, lat, strat, percentile, '# of total links' as variable_name from elinks
union
select fast_count as variable, lat, strat, percentile, '# of fast links' as variable_name from ffast
") %>% arrange(percentile)
mega$percentile <- revalue(mega$percentile, c("P99.9" = "99.9%", "P99" = "99%", "P75"="75%", "P50" = "50%", "P25" = "25%", "MIN" = "Min"))
mega$variable <- factor(mega$variable, levels =c("0.2", "1", "2", "3", "4", "5", "6", "8", "10", "12", "13", "14", "16", "20", "34"))
QoS <- data.frame(x = c(1.2, 1.5), name = c("bar", "foo"))
ggplot(mega, aes(x=variable,y=lat,group=percentile,fill=percentile)) +
geom_bar(stat='identity', position='identity', color="black", width=1) +
scale_fill_bw_qdu_6 +
ylab("Latency (ms)") +
xlab("Protocol Parameter Value") +
labs(fill="Distribution") +
scale_x_discrete(expand = c(0, 0)) +
scale_y_continuous(expand = c(0, 0)) +
coord_cartesian(ylim=c(0,600)) +
geom_hline(aes(yintercept = 110, linetype="Target One Way Delay"), color="grey") +
#annotate("text", x=4, y=160, label = "OWD best", vjust = 1.5, color="white") +
geom_hline(aes(yintercept = 360, linetype="Max One Way Delay"), color="grey") +
#annotate("text", x=4, y=360, label = "OWD limit", vjust = -1, color="black") +
theme_classic() +
theme(legend.position="top",
legend.direction = "horizontal",
legend.box = "vertical",
panel.spacing.y = unit(4, "mm"),
strip.placement = "outside",
legend.margin=margin(t = -0.1, unit='cm')) +
guides(fill = guide_legend(nrow = 1)) +
facet_grid(strat ~ variable_name, scales = "free", switch = "x") +
scale_linetype_manual(name = "QoS", values = c(1, 2), guide = guide_legend(override.aes = list(linetype = c("solid", "dashed")))) +
ggsave("light_config.pdf", dpi=300, dev='pdf', height=12.5, width=12.5, units="cm")
g <- read.csv("../../donar-res/tmp_light/guards.csv")
g$strat <- as.factor(g$strat)
g$strat <- revalue(g$strat, c("1"="TickTock", "0"="Duplicate"))
g$guard <- as.factor(g$guard)
g$percentile <- revalue(g$percentile, c("MAX" = "100%", "P99.9"="99.9%", "P99"="99%", "P75" = "75%", "P50"="50%","P25"="25%","P1"="1%","P0.1"="0.1%","MIN"="Min"))
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"))
g$percentile <-factor(g$percentile,levels=c("100%", "99.9%", "99%", "75%", "50%", "25%", "1%", "0.1%", "Min"))
g <- g %>% mutate (lat = latency / 1000)
gg <- ggplot(sqldf("select * from g where percentile != '100%' and percentile != '1%' and percentile != '0.1%' ") %>% arrange(percentile), aes(x=guard,y=lat,group=percentile,fill=percentile)) +
geom_bar(stat='identity', position='identity', width=1, color="black") +
scale_fill_bw_qdu_6 +
scale_x_discrete(expand = c(0, 0)) +
scale_y_continuous(expand = c(0, 0)) +
coord_cartesian(ylim=c(0,600)) +
ylab("Latency (ms)") +
xlab("# of guards") +
labs(fill="Distribution") +
scale_linetype_manual(name = "QoS", values = c(1, 2), guide = guide_legend(override.aes = list(linetype = c("solid", "dashed")))) +
geom_hline(aes(yintercept = 110, linetype="Target One Way Delay"), color="grey") +
geom_hline(aes(yintercept = 360, linetype="Max One Way Delay"), color="grey") +
facet_grid(. ~ strat, scales = "free", switch = "x") +
theme_classic() +
guides(fill = guide_legend(nrow = 1)) +
theme(strip.placement = "outside",
legend.position="top",
legend.direction = "horizontal",
legend.box = "vertical",
legend.margin=margin(t = -0.2, l=-0.8, unit='cm'))
gg + ggsave("light_guards.pdf", dpi=300, dev='pdf', height=7.5, width=12.5, units="cm")
h <- read.csv("../../donar-res/tmp_light/complem.csv")
h$strat <- revalue(h$strat, c("ticktock"="TickTock", "duplicate"="Duplicate"))
h$percentile <- revalue(h$percentile, c("MAX" = "100%", "P99.9"="99.9%", "P99"="99%", "P75" = "75%", "P50"="50%","P25"="25%","P1"="1%","P0.1"="0.1%","MIN"="Min"))
h$percentile <-factor(h$percentile,levels=c("100%", "99.9%", "99%", "75%", "50%", "25%", "1%", "0.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 != '100%' and percentile != '1%' and percentile != '0.1%' ") %>% arrange(percentile), aes(x=mode,y=lat,group=percentile,fill=percentile)) +
geom_bar(stat='identity', position='identity', width=1, color="black") +
scale_fill_bw_qdu_6 +
scale_x_discrete(expand = c(0, 0)) +
scale_y_continuous(expand = c(0, 0)) +
scale_linetype_manual(name = "QoS", values = c(1, 2), guide = guide_legend(override.aes = list(linetype = c("solid", "dashed")))) +
geom_hline(aes(yintercept = 110, linetype="Target One Way Delay"), color="grey") +
geom_hline(aes(yintercept = 360, linetype="Max One Way Delay"), color="grey") +
coord_cartesian(ylim=c(0,500)) +
ylab("Latency (ms)") +
xlab("Feature") +
labs(fill="Distribution") +
facet_grid(. ~ strat, scales = "free", switch = "x") +
theme_classic() +
guides(fill = guide_legend(nrow = 1)) +
theme(strip.placement = "outside",
legend.position="top",
legend.direction = "horizontal",
legend.box = "vertical",
legend.margin=margin(t = -0.2, l=-0.8, unit='cm'))
gh + ggsave("light_complementary.pdf", dpi=300, dev='pdf', height=7.5, width=12.5, 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"="Min"))
i$percentile <-factor(i$percentile,levels=c("100%", "99.9%", "99%", "75%", "50%", "25%", "1%", "0.1%", "Min"))
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%' ") %>% arrange(percentile), aes(x=algo,y=lat,group=percentile,fill=percentile)) +
geom_bar(stat='identity', position='identity',width=1,color="black") +
scale_fill_bw_qdu_6 +
scale_y_continuous(expand = c(0, 0)) +
scale_x_discrete(expand = c(0, 0)) +
#scale_fill_viridis_d() +
geom_hline(aes(yintercept = 110, linetype="Target One Way Delay"), color="grey") +
geom_hline(aes(yintercept = 360, linetype="Max One Way Delay"), color="grey") +
coord_cartesian(ylim=c(0,600)) +
ylab("Latency (ms)") +
xlab("Algorithm") +
labs(fill="Distribution", title="linear scale, cropped") +
theme_classic() +
scale_linetype_manual(name = "QoS", values = c(1, 2), guide = guide_legend(override.aes = list(linetype = c("solid", "dashed")))) +
guides(fill = guide_legend(nrow = 1)) +
facet_grid(. ~ secmode, scales = "free", switch = "x") +
theme(axis.text.x = element_text(angle = 20, hjust=1),
plot.margin = unit(c(0.3,0.2,0.2,1), "cm"),
strip.placement = "outside",
legend.position="none",
legend.direction = "horizontal",
legend.box = "vertical",
legend.margin=margin(t = -0.1, unit='cm'))
gibis <- ggplot(sqldf("select * from i where percentile != '100%' and percentile != '1%' and percentile != '0.1%' ") %>% arrange(percentile), aes(x=algo,y=lat,group=percentile,fill=percentile)) +
geom_bar(stat='identity', position='identity', color="black", width=1) +
scale_fill_bw_qdu_6 +
scale_y_log10() +
#geom_hline(aes(yintercept = 160, linetype="Target One Way Delay"), color="grey") +
#geom_hline(aes(yintercept = 360, linetype="Max One Way Delay"), color="grey") +
scale_x_discrete(expand = c(0, 0)) +
coord_cartesian(ylim=c(30,250000)) +
ylab("Latency (ms)") +
xlab("Algorithm") +
labs(fill="Distribution", title="log scale, full") +
facet_grid(. ~ secmode, scales = "free", switch = "x") +
theme_classic() +
theme(legend.position="none",
axis.text.x = element_text(angle = 20, hjust=1),
plot.margin = unit(c(0.2,0.2,0.2,1), "cm"),
strip.placement = "outside")
gilegend <- get_legend(gi + theme(legend.position = "top"))
plot_grid(gilegend, plot_grid(gibis, gi, align="v", ncol=1), ncol=1, rel_heights = c(1,6)) +
ggsave("light_battle.pdf", dpi=300, dev='pdf', height=15, width=12.5, 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")
fastprobe2 = read.csv(text="
strat,schedule_state,packet_position,ratio
Ticktock,tick,original on 1st class,0.946975638
Ticktock,tick,piggybacked on 2nd class,0.053025421
Ticktock,tock,original on 2nd class,0.474113253
Ticktock,tock,piggybacked on 1st class,0.525885688
Duplicate,all,original on 1st class,0.7349205324574037
Duplicate,all,piggybacked on 1st class,0.13431755481879454
Duplicate,all,original on 2nd class,0.1154165656941915
Duplicate,all,piggybacked on 2nd class,0.015345347029610245
")
fastprobe2$schedule_state <-factor(fastprobe2$schedule_state,levels=c("all", "tock", "tick"))
ggplot(fastprobe2, aes(x=schedule_state, y=ratio, fill=packet_position)) +
geom_bar(stat='identity', position='stack', width=1, color="black") +
facet_grid(strat ~ ., scales = "free", switch = "x") +
scale_y_continuous(expand = c(0, 0), labels = scales::percent) +
scale_x_discrete(expand = c(0, 0)) +
scale_fill_bw_qdu_4 +
xlab("Schedule State") +
ylab("Fastest Delivery") +
labs(fill="Scheduling Decision") +
coord_flip() +
theme_classic() +
ggsave("light_fastprobe.pdf", dpi=300, dev='pdf', height=5, width=12.5, 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', color="black") +
scale_fill_grey() +
ylab("Calls") +
xlab("Links fast at least once") +
labs(fill="Strategy") +
scale_y_continuous(expand = c(0, 0), labels = scales::percent) +
scale_x_continuous(expand = c(0, 0)) +
theme_classic()
#theme(axis.text.x = element_text(angle = 20, hjust=1))
gk + ggsave("light_fastlinks.pdf", dpi=300, dev='pdf', height=6, width=12.5, 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)) +
scale_y_continuous(expand = c(0, 0)) +
scale_x_continuous(expand = c(0, 0)) +
xlab("Packet Identifier") +
ylab("Latency (ms)") +
labs(linetype="Way") +
geom_point(size=0.1) +
geom_hline(aes(yintercept = 110, linetype="Target One Way Delay"), color="white") +
geom_hline(aes(yintercept = 360, linetype="Max One Way Delay"), color="grey") +
scale_linetype_manual(name = "QoS", values = c(1, 2), guide = guide_legend(override.aes = list(linetype = c("solid", "dashed")))) +
theme_classic() +
theme(legend.position="top",legend.margin=margin(t = -0.1, b = -0.1, unit='cm'))
#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)
m$group <- revalue(m$group, c("fast" = "1st class links", "probe" = "2nd class links"))
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)) +
scale_y_continuous(expand = c(0, 0)) +
scale_x_continuous(expand = c(0, 0)) +
xlab("Packet Identifier") +
ylab("Latency (ms)") +
labs(color="Link Group") +
labs(linetype="Way") +
geom_point(size=0.1) +
geom_hline(yintercept = 110, linetype="dashed", color="white") +
geom_hline(yintercept = 360, linetype="solid", color="grey") +
guides(color = guide_legend(override.aes = list(size=2))) +
theme_classic() +
theme(legend.position="top", legend.margin=margin(t = -0.1, b = -0.1, unit='cm'))
n <- read.csv("../../donar-res/tmp_light/linkgroup.csv")
n$group <- revalue(n$group, c("fast" = "1st class links", "probe" = "2nd class links"))
#n$link_id <- as.factor(n$link_id)
gn <- ggplot(n, aes(x=packet_id, y=link_id, color=group)) +
scale_color_grey() +
scale_fill_grey() +
geom_point(size=0.6) +
scale_y_continuous(expand = c(0.1, 0.1)) +
scale_x_continuous(expand = c(0, 0)) +
#scale_color_viridis_d() +
xlab("Packet Identifier") +
ylab("Link Identifier") +
labs(color="Link group") +
#geom_tile() +
theme_classic() +
theme(legend.position="none")
plot_grid(gl, gm, gn, ncol=1,align="v",rel_heights = c(1.3,1.3,1)) + ggsave("light_single.pdf", dpi=300, dev='pdf', height=12.5, width=12.5, 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')