mirror of
https://gitlab.com/manzerbredes/loosely-coupled-dss-extended.git
synced 2025-04-05 19:16:26 +02:00
Debug retransmission
This commit is contained in:
parent
6372182723
commit
9bbae8a423
12 changed files with 320541 additions and 41726 deletions
Binary file not shown.
Binary file not shown.
|
@ -61,6 +61,7 @@ energy60P=ggplot(energy60%>%dformat,aes(x=simkey,y=energy,fill=type))+
|
|||
labs(fill="60s uptime:")+theme(legend.position="top")+color()+coord_cartesian(ylim=c(0,1200))
|
||||
#ggsave("energy-60sec.png",width = 12,height=4.8)
|
||||
|
||||
|
||||
energy180=data%>%filter(wakeupfor==180)
|
||||
energy180Snd=energy180%>%filter(isSender==1)%>%group_by(simkey,wireless)%>%summarise(sd=sd(energy),energy=mean(energy),type="Sender")
|
||||
energy180Rcv=energy180%>%filter(isSender==0)%>%group_by(simkey,wireless)%>%summarise(sd=sd(energy),energy=mean(energy),type="Receiver")
|
||||
|
|
169
results/analysis2_scalability.R
Normal file
169
results/analysis2_scalability.R
Normal file
|
@ -0,0 +1,169 @@
|
|||
library("tidyverse")
|
||||
library("gridExtra")
|
||||
library("patchwork")
|
||||
library(RColorBrewer)
|
||||
|
||||
data=read_csv("results.csv")
|
||||
r_=function(x){round(x,digits=1)}
|
||||
color=function(){scale_fill_brewer(palette = "Accent")}
|
||||
color2=function(){scale_fill_brewer(palette = "Set2")}
|
||||
nolegend=function(){theme(legend.position="none")}
|
||||
simkeys=unique(data$simkey)
|
||||
nsimkeys=length(simkeys)
|
||||
s_=function(x){if(x<0){return("")}else{return("+")}}
|
||||
simkey_rename=function(key){
|
||||
if(key=="hint")
|
||||
return("Hints")
|
||||
if(key=="baseline")
|
||||
return("Baseline")
|
||||
if(key=="extended")
|
||||
return("Extended")
|
||||
if(key=="hintandextended")
|
||||
return("Hints+Extended")
|
||||
return(key)
|
||||
}
|
||||
dformat=function(data){
|
||||
data%>%rowwise()%>%mutate(simkey=simkey_rename(simkey))%>%mutate(wireless=ifelse(wireless=="lora","LoRa","NbIoT"))
|
||||
}
|
||||
g_legend <- function(a.gplot){
|
||||
tmp <- ggplot_gtable(ggplot_build(a.gplot))
|
||||
leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box")
|
||||
legend <- tmp$grobs[[leg]]
|
||||
legend
|
||||
}
|
||||
|
||||
energy60=data%>%filter(wakeupfor==60)
|
||||
energy60Snd=energy60%>%filter(isSender==1)%>%group_by(simkey,wireless)%>%summarise(sd=sd(energy),energy=mean(energy),type="Sender")
|
||||
energy60Rcv=energy60%>%filter(isSender==0)%>%group_by(simkey,wireless)%>%summarise(sd=sd(energy),energy=mean(energy),type="Receiver")
|
||||
energy60=energy60Snd%>%ungroup()%>%rbind(energy60Rcv)
|
||||
energy60=energy60%>%mutate(sd_min=energy-sd,sd_max=energy+sd)%>%mutate(sd_min_txt=paste0("-",r_(sd_min)))%>%mutate(sd_max_txt=paste0("+",r_(sd_max)))
|
||||
energy60Baseline=energy60%>%filter(simkey=="baseline")%>%uncount(nsimkeys,.id="id")%>%mutate(simkey=simkeys[id])
|
||||
energy60=energy60%>%left_join(energy60Baseline,by=c("simkey","wireless","type"),suffix = c("","_baseline"))
|
||||
energy60=energy60%>%mutate(ovhd=energy*100/energy_baseline-100)
|
||||
energy60=energy60%>%rowwise()%>%mutate(ovhd_txt=paste0("(",s_(ovhd),r_(ovhd),"%)"))
|
||||
success60Snd=data%>%filter(wakeupfor==60)%>%filter(isSender!=0)%>%group_by(simkey,wireless,wakeupfor)%>%summarise(success_orig=mean(nSend),success=r_(mean(nSend)),type="Sender")
|
||||
success60Rcv=data%>%filter(wakeupfor==60)%>%filter(isSender!=0)%>%group_by(simkey,wireless,wakeupfor)%>%summarise(success_orig=mean(nSend),success=r_(mean(nSend)),type="Receiver")
|
||||
success60=rbind(success60Snd,success60Rcv)
|
||||
success60=success60%>%rowwise()%>%mutate(success_txt=paste0("[",success,"]"))
|
||||
energy60=energy60%>%left_join(success60)%>%rowwise()%>%mutate(infos=paste0(ovhd_txt,"\n{",r_(energy/success_orig),"}"))
|
||||
energy60=energy60%>%mutate(type=factor(type,levels = c("Sender","Receiver")))
|
||||
|
||||
|
||||
energy60P=ggplot(energy60%>%dformat,aes(x=simkey,y=energy,fill=type))+
|
||||
geom_bar(colour="black", stat="identity",position=position_dodge())+
|
||||
geom_errorbar(position=position_dodge(0.9),aes(ymin=energy-sd, ymax=energy+sd),width=0.3,size=1)+
|
||||
geom_text(aes(label = r_(sd_max), y= sd_max),vjust=-0.4,position=position_dodge(0.9))+
|
||||
geom_text(aes(label = r_(sd_min), y= sd_min),vjust=+1.5,position=position_dodge(0.9))+
|
||||
geom_text(aes(label = paste0(r_(energy),"\n",infos), y= min(energy)/2),fontface="bold",colour="white",position=position_dodge(0.9))+
|
||||
geom_label(data=success60%>%dformat(),aes(label = success_txt, y=35),label.padding=unit(0.35,"lines"),label.r=unit(0.09,"lines"),fill="#f0f0f0",label.size=0.5,fontface="bold",colour="black",position=position_dodge(0.9))+
|
||||
facet_wrap(~wireless)+
|
||||
xlab(element_blank())+ylab("Energy consumption (J)")+
|
||||
labs(fill="60s uptime:")+theme(legend.position="top")+color()+coord_cartesian(ylim=c(0,2200))
|
||||
#ggsave("energy-60sec.png",width = 12,height=4.8)
|
||||
|
||||
|
||||
energy180=data%>%filter(wakeupfor==180)
|
||||
energy180Snd=energy180%>%filter(isSender==1)%>%group_by(simkey,wireless)%>%summarise(sd=sd(energy),energy=mean(energy),type="Sender")
|
||||
energy180Rcv=energy180%>%filter(isSender==0)%>%group_by(simkey,wireless)%>%summarise(sd=sd(energy),energy=mean(energy),type="Receiver")
|
||||
energy180=energy180Snd%>%ungroup()%>%rbind(energy180Rcv)%>%mutate(type=factor(type,levels = c("Sender","Receiver")))
|
||||
energy180=energy180%>%mutate(sd_min=energy-sd,sd_max=energy+sd)%>%mutate(sd_min_txt=paste0("-",r_(sd_min)))%>%mutate(sd_max_txt=paste0("+",r_(sd_max)))
|
||||
energy180Baseline=energy180%>%filter(simkey=="baseline")%>%uncount(nsimkeys,.id="id")%>%mutate(simkey=simkeys[id])
|
||||
energy180=energy180%>%left_join(energy180Baseline,by=c("simkey","wireless","type"),suffix = c("","_baseline"))
|
||||
energy180=energy180%>%mutate(ovhd=energy*100/energy_baseline-100)
|
||||
energy180=energy180%>%rowwise()%>%mutate(ovhd_txt=paste0("(",s_(ovhd),r_(ovhd),"%)"))
|
||||
success180Snd=data%>%filter(wakeupfor==180)%>%filter(isSender!=0)%>%group_by(simkey,wireless,wakeupfor)%>%summarise(success_orig=mean(nSend),success=r_(mean(nSend)),type="Sender")
|
||||
success180Rcv=data%>%filter(wakeupfor==180)%>%filter(isSender!=0)%>%group_by(simkey,wireless,wakeupfor)%>%summarise(success_orig=mean(nSend),success=r_(mean(nSend)),type="Receiver")
|
||||
success180=rbind(success180Snd,success180Rcv)
|
||||
success180=success180%>%rowwise()%>%mutate(success_txt=paste0("[",success,"]"))
|
||||
energy180=energy180%>%left_join(success180)%>%rowwise()%>%mutate(infos=paste0(ovhd_txt,"\n{",r_(energy/success_orig),"}"))
|
||||
energy180=energy180%>%mutate(type=factor(type,levels = c("Sender","Receiver")))
|
||||
|
||||
energy180P=ggplot(energy180%>%dformat,aes(x=simkey,y=energy,fill=type))+
|
||||
geom_bar(colour="black",stat="identity",position=position_dodge())+
|
||||
geom_errorbar(position=position_dodge(0.9),aes(ymin=energy-sd, ymax=energy+sd),width=0.3,size=1)+
|
||||
geom_text(aes(label = r_(sd_max), y= sd_max),vjust=-0.4,position=position_dodge(0.9))+
|
||||
geom_text(aes(label = r_(sd_min), y= sd_min),vjust=+1.5,position=position_dodge(0.9))+
|
||||
geom_text(aes(label = paste0(r_(energy),"\n",infos), y= min(energy)/2),fontface="bold",colour="white",position=position_dodge(0.9))+
|
||||
geom_label(data=success180%>%dformat(),aes(label = success_txt, y=100),label.padding=unit(0.35,"lines"),label.r=unit(0.09,"lines"),fill="#f0f0f0",label.size=0.5,fontface="bold",colour="black",position=position_dodge(0.9))+
|
||||
facet_wrap(~wireless)+
|
||||
xlab(element_blank())+ylab("Energy consumption (J)")+
|
||||
labs(fill="180s uptime:")+theme(legend.position="top")+color2()+coord_cartesian(ylim=c(0,4500))
|
||||
#ggsave("energy-180sec.png",width = 12,height=4.8)
|
||||
|
||||
totalUptime60=data%>%filter(wakeupfor==60)
|
||||
totalUptime60Snd=totalUptime60%>%filter(isSender==1)%>%group_by(simkey,wireless)%>%summarise(sd=sd(totalUptime),totalUptime=mean(totalUptime),type="Sender")
|
||||
totalUptime60Rcv=totalUptime60%>%filter(isSender==0)%>%group_by(simkey,wireless)%>%summarise(sd=sd(totalUptime),totalUptime=mean(totalUptime),type="Receiver")
|
||||
totalUptime60=totalUptime60Snd%>%ungroup()%>%rbind(totalUptime60Rcv)%>%mutate(type=factor(type,levels = c("Sender","Receiver")))
|
||||
totalUptime60=totalUptime60%>%mutate(sd_min=totalUptime-sd,sd_max=totalUptime+sd)%>%mutate(sd_min_txt=paste0("-",r_(sd_min)))%>%mutate(sd_max_txt=paste0("+",r_(sd_max)))
|
||||
totalUptime60Baseline=totalUptime60%>%filter(simkey=="baseline")%>%uncount(nsimkeys,.id="id")%>%mutate(simkey=simkeys[id])
|
||||
totalUptime60=totalUptime60%>%left_join(totalUptime60Baseline,by=c("simkey","wireless","type"),suffix = c("","_baseline"))
|
||||
totalUptime60=totalUptime60%>%mutate(ovhd=totalUptime-totalUptime_baseline)
|
||||
totalUptime60=totalUptime60%>%rowwise()%>%mutate(ovhd_txt=paste0("(",s_(ovhd),r_(ovhd),")"))
|
||||
totalUptime60=totalUptime60%>%mutate(type=factor(type,levels = c("Sender","Receiver")))
|
||||
|
||||
totalUptime60P=ggplot(totalUptime60%>%dformat,aes(x=simkey,y=totalUptime,fill=type))+
|
||||
geom_bar(colour="black", stat="identity",position=position_dodge())+
|
||||
geom_errorbar(position=position_dodge(0.9),aes(ymin=totalUptime-sd, ymax=totalUptime+sd),width=0.3,size=1)+
|
||||
geom_text(aes(label = r_(sd_max), y= sd_max),vjust=-0.4,position=position_dodge(0.9))+
|
||||
geom_text(aes(label = r_(sd_min), y= sd_min),vjust=+1.5,position=position_dodge(0.9))+
|
||||
geom_text(aes(label = paste0(r_(totalUptime),"\n",ovhd_txt), y= min(totalUptime)/2),fontface="bold",colour="white",position=position_dodge(0.9))+
|
||||
facet_wrap(~wireless)+
|
||||
xlab("Policy")+ylab("Accumulated uptime (s)")+
|
||||
labs(fill="Total uptime:")+color2()+theme(legend.position="top")+coord_cartesian(ylim=c(0,4000))
|
||||
|
||||
totalUptime180=data%>%filter(wakeupfor==180)
|
||||
totalUptime180Snd=totalUptime180%>%filter(isSender==1)%>%group_by(simkey,wireless)%>%summarise(sd=sd(totalUptime),totalUptime=mean(totalUptime),type="Sender")
|
||||
totalUptime180Rcv=totalUptime180%>%filter(isSender==0)%>%group_by(simkey,wireless)%>%summarise(sd=sd(totalUptime),totalUptime=mean(totalUptime),type="Receiver")
|
||||
totalUptime180=totalUptime180Snd%>%ungroup()%>%rbind(totalUptime180Rcv)%>%mutate(type=factor(type,levels = c("Sender","Receiver")))
|
||||
totalUptime180=totalUptime180%>%mutate(sd_min=totalUptime-sd,sd_max=totalUptime+sd)%>%mutate(sd_min_txt=paste0("-",r_(sd_min)))%>%mutate(sd_max_txt=paste0("+",r_(sd_max)))
|
||||
totalUptime180Baseline=totalUptime180%>%filter(simkey=="baseline")%>%uncount(nsimkeys,.id="id")%>%mutate(simkey=simkeys[id])
|
||||
totalUptime180=totalUptime180%>%left_join(totalUptime180Baseline,by=c("simkey","wireless","type"),suffix = c("","_baseline"))
|
||||
totalUptime180=totalUptime180%>%mutate(ovhd=totalUptime-totalUptime_baseline)
|
||||
totalUptime180=totalUptime180%>%rowwise()%>%mutate(ovhd_txt=paste0("(",s_(ovhd),r_(ovhd),")"))
|
||||
totalUptime180=totalUptime180%>%mutate(type=factor(type,levels = c("Sender","Receiver")))
|
||||
|
||||
totalUptime180P=ggplot(totalUptime180%>%dformat,aes(x=simkey,y=totalUptime,fill=type))+
|
||||
geom_bar(colour="black",stat="identity",position=position_dodge())+
|
||||
geom_errorbar(position=position_dodge(0.9),aes(ymin=totalUptime-sd, ymax=totalUptime+sd),width=0.3,size=1)+
|
||||
geom_text(aes(label = r_(sd_max), y= sd_max),vjust=-0.4,position=position_dodge(0.9))+
|
||||
geom_text(aes(label = r_(sd_min), y= sd_min),vjust=+1.5,position=position_dodge(0.9))+
|
||||
geom_text(aes(label = paste0(r_(totalUptime),"\n",ovhd_txt), y= min(totalUptime)/2),fontface="bold",colour="white",position=position_dodge(0.9))+
|
||||
facet_wrap(~wireless)+
|
||||
xlab("Policy")+ylab("Accumulated uptime (s)")+
|
||||
labs(fill="Total uptime:")+theme(legend.position="top")+color2()+coord_cartesian(ylim=c(0,8800))
|
||||
|
||||
success60=data%>%filter(wakeupfor==60)
|
||||
success60=success60%>%filter(isSender==1)%>%group_by(simkey,wireless)%>%summarise(sd=sd(nSend),success=mean(nSend))
|
||||
success60=success60%>%mutate(sd_min=success-sd,sd_max=success+sd)
|
||||
|
||||
success60P=ggplot(success60%>%dformat,aes(x=simkey,y=success))+
|
||||
geom_bar(stat="identity",position=position_dodge(),fill="gray50")+
|
||||
geom_errorbar(position=position_dodge(0.9),aes(ymin=success-sd, ymax=success+sd),width=0.2,size=1)+
|
||||
geom_text(aes(label = r_(sd_max), y= sd_max),vjust=-0.4,position=position_dodge(0.9))+
|
||||
geom_text(aes(label = r_(sd_min), y= sd_min),vjust=+1.5,position=position_dodge(0.9))+
|
||||
geom_text(aes(label = r_(success), y= success/2),fontface="bold",colour="white",position=position_dodge(0.9))+
|
||||
facet_wrap(~wireless)+
|
||||
xlab("Policy")+ylab("Number of success")+
|
||||
labs(fill="Node type")+theme(legend.position="none")+color()+coord_cartesian(ylim=c(0,11))
|
||||
#ggsave("success-60sec.png",width = 5.8,height=4.2)
|
||||
|
||||
success180=data%>%filter(wakeupfor==180)
|
||||
success180=success180%>%filter(isSender==1)%>%group_by(simkey,wireless)%>%summarise(sd=sd(nSend),success=mean(nSend))
|
||||
success180=success180%>%mutate(sd_min=success-sd,sd_max=success+sd)
|
||||
|
||||
success180P=ggplot(success180%>%dformat,aes(x=simkey,y=success))+
|
||||
geom_bar(stat="identity",position=position_dodge(),fill="gray50")+
|
||||
geom_errorbar(position=position_dodge(0.9),aes(ymin=success-sd, ymax=success+sd),width=0.2,size=1)+
|
||||
geom_text(aes(label = r_(sd_max), y= sd_max),vjust=-0.4,position=position_dodge(0.9))+
|
||||
geom_text(aes(label = r_(sd_min), y= sd_min),vjust=+1.5,position=position_dodge(0.9))+
|
||||
geom_text(aes(label = r_(success), y= success/2),fontface="bold",colour="white",position=position_dodge(0.9))+
|
||||
facet_wrap(~wireless)+
|
||||
xlab("Policy")+ylab("Number of success")+
|
||||
labs(fill="Node type")+theme(legend.position="none")+color()+coord_cartesian(ylim=c(0,13))
|
||||
#ggsave("success-180sec.png",width = 5.8,height=4.2)
|
||||
|
||||
|
||||
ggsave("60sec.pdf",plot=(energy60P)/(totalUptime60P)+ plot_layout(guides = "collect")&theme(legend.position = "top"),width=12,height=11)
|
||||
ggsave("180sec.pdf",plot=(energy180P)/(totalUptime180P)+ plot_layout(guides = "collect")&theme(legend.position = "top"),width=12,height=11)
|
||||
ggsave("results.pdf",plot=(energy60P)/(energy180P)+ plot_layout(guides = "collect")&theme(legend.position = "top"),width=12,height=7)
|
||||
|
|
@ -42,7 +42,7 @@ seed=0
|
|||
simtime=86400 # One day
|
||||
wakeupevery=3600
|
||||
wakeupfor=60
|
||||
n_nodes=13
|
||||
n_nodes=13 # First node will be the sender so n_receivers=n_nodes-1
|
||||
extended="false"
|
||||
hint="false"
|
||||
poff=0
|
||||
|
@ -53,13 +53,12 @@ datasize=1000000 # 1Mb
|
|||
hintsize=8 # Integer
|
||||
hintdist=10800 # Hint distance while using farhint
|
||||
latency=0 # in Seconds
|
||||
shutdown_on_rcv="true"
|
||||
unschedule_on_rcv="true"
|
||||
farhint="true"
|
||||
shutdown_on_rcv="false"
|
||||
unschedule_on_rcv="false"
|
||||
farhint="false"
|
||||
bitrate="100kbps"
|
||||
|
||||
|
||||
|
||||
run-scenarios() {
|
||||
# Configure number of seed per scenarios
|
||||
nseed=200
|
||||
|
|
361713
results/results.csv
361713
results/results.csv
File diff suppressed because it is too large
Load diff
Binary file not shown.
|
@ -1,13 +1,13 @@
|
|||
node,ts
|
||||
on8,4398.000320
|
||||
on4,4438.000960
|
||||
on10,8258.000320
|
||||
on6,8299.600960
|
||||
on4,11766.000320
|
||||
on11,16301.000640
|
||||
on9,18165.000320
|
||||
on12,18289.000320
|
||||
on2,22575.000320
|
||||
on7,22615.000960
|
||||
on3,25587.000320
|
||||
on5,25627.000960
|
||||
on1,29140.000320
|
||||
on2,16300.000320
|
||||
on7,16341.001280
|
||||
on5,16381.400640
|
||||
on1,16421.700960
|
||||
on12,18289.600640
|
||||
on11,18340.600640
|
||||
on3,22575.000320
|
||||
on9,52295.000320
|
||||
|
|
|
|
@ -1,21 +1,41 @@
|
|||
node,wakets,duration,rcvat
|
||||
on4,8218.000000,180.000000,4398.000320
|
||||
on4,8218.000000,180.000000,4398.000640
|
||||
on6,11726.000000,180.000000,8258.000320
|
||||
on6,11726.000000,180.000000,8258.000640
|
||||
on4,11726.000000,180.000000,8258.000640
|
||||
on4,22535.000000,180.000000,8259.600640
|
||||
on4,11726.000000,180.000000,8299.601280
|
||||
on2,22535.000000,180.000000,11907.000000
|
||||
on7,22535.000000,180.000000,12052.000000
|
||||
on5,22535.000000,180.000000,12200.200000
|
||||
on3,16260.000000,180.000000,12567.000000
|
||||
on9,16260.000000,180.000000,14754.000000
|
||||
on11,16260.000000,180.000000,14755.000000
|
||||
on1,22535.000000,180.000000,16208.200000
|
||||
on9,18125.000000,180.000000,16261.000320
|
||||
on3,22535.000000,180.000000,16261.000320
|
||||
on3,25547.000000,180.000000,22575.000640
|
||||
on5,25547.000000,180.000000,22575.000640
|
||||
on1,25547.000000,180.000000,22576.000640
|
||||
on5,34755.000000,180.000000,25549.000000
|
||||
on1,34755.000000,180.000000,25550.000000
|
||||
on1,29100.000000,180.000000,25587.000640
|
||||
on2,16260.000000,180.000000,11906.000000
|
||||
on7,16260.000000,180.000000,12051.000000
|
||||
on5,16260.000000,180.000000,12200.800000
|
||||
on7,16260.000000,180.000000,15800.000000
|
||||
on1,16260.000000,180.000000,16208.200000
|
||||
on2,16260.000000,180.000000,16230.000000
|
||||
on1,16260.000000,180.000000,16230.000000
|
||||
on2,16260.000000,180.000000,16230.000000
|
||||
on1,18125.000000,180.000000,16300.000320
|
||||
on5,18125.000000,180.000000,16300.000640
|
||||
on7,18125.000000,180.000000,16300.000640
|
||||
on5,18125.000000,180.000000,16301.000320
|
||||
on7,18125.000000,180.000000,16301.000320
|
||||
on1,18125.000000,180.000000,16301.000960
|
||||
on5,18125.000000,180.000000,16301.000960
|
||||
on1,18125.000000,180.000000,16302.000320
|
||||
on5,18125.000000,180.000000,16302.000320
|
||||
on1,18125.000000,180.000000,16302.000320
|
||||
on5,18125.000000,180.000000,16302.000320
|
||||
on5,18125.000000,180.000000,16304.600320
|
||||
on5,18125.000000,180.000000,16304.600320
|
||||
on1,18125.000000,180.000000,16304.600320
|
||||
on1,18125.000000,180.000000,16341.400320
|
||||
on1,18125.000000,180.000000,16344.000320
|
||||
on1,18125.000000,180.000000,16381.400640
|
||||
on1,18125.000000,180.000000,16381.400640
|
||||
on12,22535.000000,180.000000,18249.000000
|
||||
on12,22535.000000,180.000000,18249.000000
|
||||
on12,22535.000000,180.000000,18249.000000
|
||||
on12,22535.000000,180.000000,18249.000320
|
||||
on11,22535.000000,180.000000,18300.000320
|
||||
on3,22535.000000,180.000000,19137.000000
|
||||
on3,22535.000000,180.000000,19139.600000
|
||||
on9,52255.000000,180.000000,50848.000000
|
||||
on9,52255.000000,180.000000,50848.000000
|
||||
on9,52255.000000,180.000000,50977.000000
|
||||
|
|
|
|
@ -1,15 +1,81 @@
|
|||
node,ts
|
||||
on6,8258.000640
|
||||
on10,8259.600640
|
||||
on6,11907.000000
|
||||
on2,12052.000000
|
||||
on7,12200.200000
|
||||
on8,12567.000000
|
||||
on3,14754.000000
|
||||
on9,14755.000000
|
||||
on8,4398.000320
|
||||
on4,4398.000640
|
||||
on10,8258.000320
|
||||
on4,8258.000640
|
||||
on4,8260.600640
|
||||
on6,11906.000000
|
||||
on2,12051.000000
|
||||
on7,12200.800000
|
||||
on7,15800.000000
|
||||
on6,15800.000000
|
||||
on2,16208.200000
|
||||
on1,16261.000320
|
||||
on3,22575.000640
|
||||
on5,22576.000640
|
||||
on7,25549.000000
|
||||
on5,25550.000000
|
||||
on2,16230.000000
|
||||
on1,16230.000000
|
||||
on8,16230.000000
|
||||
on8,16230.000000
|
||||
on1,16260.000000
|
||||
on8,16260.000000
|
||||
on2,16300.000320
|
||||
on5,16300.000640
|
||||
on1,16301.000320
|
||||
on2,16301.000320
|
||||
on1,16301.000960
|
||||
on2,16302.000320
|
||||
on8,16302.000320
|
||||
on8,16302.000320
|
||||
on8,16302.000320
|
||||
on2,16302.000320
|
||||
on2,16302.000320
|
||||
on5,16304.600320
|
||||
on1,16304.600320
|
||||
on10,16304.600320
|
||||
on10,16304.600320
|
||||
on7,16341.400320
|
||||
on1,16344.000320
|
||||
on7,16344.000320
|
||||
on5,16381.400640
|
||||
on1,16381.400640
|
||||
on5,16381.400640
|
||||
on5,16399.000000
|
||||
on5,18126.000320
|
||||
on7,18126.000320
|
||||
on1,18249.000000
|
||||
on7,18249.000000
|
||||
on5,18249.000000
|
||||
on5,19137.000000
|
||||
on3,19139.600000
|
||||
on5,19139.600000
|
||||
on1,20363.000000
|
||||
on6,20363.000000
|
||||
on3,22575.000320
|
||||
on12,22575.000320
|
||||
on12,22588.000000
|
||||
on3,22596.000000
|
||||
on3,23433.000000
|
||||
on5,23433.000000
|
||||
on3,23485.000000
|
||||
on12,24844.000000
|
||||
on1,24844.000000
|
||||
on12,29192.000000
|
||||
on4,41511.000000
|
||||
on2,41511.000000
|
||||
on12,41511.000000
|
||||
on4,41645.000000
|
||||
on11,46980.000320
|
||||
on11,50686.000000
|
||||
on6,50686.000000
|
||||
on11,50848.000000
|
||||
on6,50848.000000
|
||||
on9,50977.000000
|
||||
on2,50977.000000
|
||||
on2,51128.000000
|
||||
on10,52054.000000
|
||||
on3,52054.000000
|
||||
on10,52126.000000
|
||||
on5,52234.000000
|
||||
on9,52295.000320
|
||||
on5,52295.000320
|
||||
on4,52295.000320
|
||||
on5,52295.000320
|
||||
on0,52318.000000
|
||||
|
|
|
|
@ -4,8 +4,8 @@ on2,5124.000000,5304.000000,180
|
|||
on2,7307.000000,7487.000000,180
|
||||
on2,11906.000000,12086.000000,180
|
||||
on2,16052.000000,16232.000000,180
|
||||
on2,16260.000000,16440.000000,180
|
||||
on2,18629.000000,18809.000000,180
|
||||
on2,22535.000000,22575.000320,40.0003
|
||||
on2,24126.000000,24306.000000,180
|
||||
on2,27021.000000,27201.000000,180
|
||||
on2,30940.000000,31120.000000,180
|
||||
|
@ -26,8 +26,7 @@ on2,80256.000000,80436.000000,180
|
|||
on2,85098.000000,85278.000000,180
|
||||
on10,1202.000000,1382.000000,180
|
||||
on10,3963.000000,4143.000000,180
|
||||
on10,8211.000000,8258.000320,47.0003
|
||||
on10,8258.000320,8391.000000,133
|
||||
on10,8211.000000,8391.000000,180
|
||||
on10,12692.000000,12872.000000,180
|
||||
on10,16304.000000,16484.000000,180
|
||||
on10,20652.000000,20832.000000,180
|
||||
|
@ -54,11 +53,9 @@ on3,3879.000000,4059.000000,180
|
|||
on3,8872.000000,9052.000000,180
|
||||
on3,12460.000000,12640.000000,180
|
||||
on3,14753.000000,14933.000000,180
|
||||
on3,16260.000000,16440.000000,180
|
||||
on3,19080.000000,19260.000000,180
|
||||
on3,22535.000000,22715.000000,180
|
||||
on3,23366.000000,23546.000000,180
|
||||
on3,25547.000000,25587.000320,40.0003
|
||||
on3,28542.000000,28722.000000,180
|
||||
on3,29192.000000,29372.000000,180
|
||||
on3,35481.000000,35661.000000,180
|
||||
|
@ -81,8 +78,8 @@ on11,3701.000000,3881.000000,180
|
|||
on11,7941.000000,8121.000000,180
|
||||
on11,11372.000000,11552.000000,180
|
||||
on11,14657.000000,14837.000000,180
|
||||
on11,16260.000000,16301.000640,41.0006
|
||||
on11,18300.000000,18480.000000,180
|
||||
on11,22535.000000,22715.000000,180
|
||||
on11,23929.000000,24109.000000,180
|
||||
on11,27867.000000,28047.000000,180
|
||||
on11,29463.000000,29643.000000,180
|
||||
|
@ -105,7 +102,6 @@ on4,3074.000000,3254.000000,180
|
|||
on4,4368.000000,4548.000000,180
|
||||
on4,8218.000000,8398.000000,180
|
||||
on4,8426.000000,8606.000000,180
|
||||
on4,11726.000000,11766.000320,40.0003
|
||||
on4,12910.000000,13090.000000,180
|
||||
on4,16399.000000,16579.000000,180
|
||||
on4,18069.000000,18249.000000,180
|
||||
|
@ -132,8 +128,8 @@ on12,5482.000000,5662.000000,180
|
|||
on12,10214.000000,10394.000000,180
|
||||
on12,11441.000000,11621.000000,180
|
||||
on12,17789.000000,17969.000000,180
|
||||
on12,18249.000000,18289.000320,40.0003
|
||||
on12,18289.000320,18429.000000,140
|
||||
on12,18249.000000,18429.000000,180
|
||||
on12,22535.000000,22715.000000,180
|
||||
on12,24684.000000,24864.000000,180
|
||||
on12,25778.000000,25958.000000,180
|
||||
on12,29150.000000,29330.000000,180
|
||||
|
@ -156,11 +152,11 @@ on5,796.000000,976.000000,180
|
|||
on5,6968.000000,7148.000000,180
|
||||
on5,10284.000000,10464.000000,180
|
||||
on5,12200.000000,12380.000000,180
|
||||
on5,16260.000000,16440.000000,180
|
||||
on5,16874.000000,17054.000000,180
|
||||
on5,18125.000000,18305.000000,180
|
||||
on5,19136.000000,19316.000000,180
|
||||
on5,22535.000000,22715.000000,180
|
||||
on5,23431.000000,23611.000000,180
|
||||
on5,25547.000000,25627.000960,80.001
|
||||
on5,28535.000000,28715.000000,180
|
||||
on5,31912.000000,32092.000000,180
|
||||
on5,33244.000000,33424.000000,180
|
||||
|
@ -180,9 +176,8 @@ on5,80878.000000,81058.000000,180
|
|||
on5,85966.000000,86146.000000,180
|
||||
on6,2430.000000,2610.000000,180
|
||||
on6,6024.000000,6204.000000,180
|
||||
on6,8144.000000,8299.600960,155.601
|
||||
on6,8299.600960,8324.000000,24.399
|
||||
on6,11795.000000,11975.000000,180
|
||||
on6,8144.000000,8324.000000,180
|
||||
on6,11726.000000,11975.000000,249
|
||||
on6,15800.000000,15980.000000,180
|
||||
on6,20361.000000,20541.000000,180
|
||||
on6,24330.000000,24510.000000,180
|
||||
|
@ -208,9 +203,10 @@ on7,6571.000000,6751.000000,180
|
|||
on7,10296.000000,10476.000000,180
|
||||
on7,12051.000000,12231.000000,180
|
||||
on7,15735.000000,15915.000000,180
|
||||
on7,16260.000000,16440.000000,180
|
||||
on7,18125.000000,18305.000000,180
|
||||
on7,19353.000000,19533.000000,180
|
||||
on7,22535.000000,22615.000960,80.001
|
||||
on7,22615.000960,22776.000000,160.999
|
||||
on7,22596.000000,22776.000000,180
|
||||
on7,25545.000000,25725.000000,180
|
||||
on7,30364.000000,30544.000000,180
|
||||
on7,35548.000000,35728.000000,180
|
||||
|
@ -229,8 +225,7 @@ on7,76198.000000,76378.000000,180
|
|||
on7,80344.000000,80524.000000,180
|
||||
on7,84348.000000,84528.000000,180
|
||||
on8,1889.000000,2069.000000,180
|
||||
on8,4224.000000,4398.000320,174
|
||||
on8,4398.000320,4404.000000,5.99968
|
||||
on8,4224.000000,4404.000000,180
|
||||
on8,10504.000000,10684.000000,180
|
||||
on8,12566.000000,12746.000000,180
|
||||
on8,16230.000000,16410.000000,180
|
||||
|
@ -258,8 +253,6 @@ on9,5568.000000,5748.000000,180
|
|||
on9,8857.000000,9037.000000,180
|
||||
on9,14162.000000,14342.000000,180
|
||||
on9,14753.000000,14933.000000,180
|
||||
on9,16260.000000,16440.000000,180
|
||||
on9,18125.000000,18165.000320,40.0003
|
||||
on9,20801.000000,20981.000000,180
|
||||
on9,24297.000000,24477.000000,180
|
||||
on9,27442.000000,27622.000000,180
|
||||
|
@ -270,6 +263,7 @@ on9,40429.000000,40609.000000,180
|
|||
on9,46468.000000,46648.000000,180
|
||||
on9,48268.000000,48448.000000,180
|
||||
on9,50847.000000,51027.000000,180
|
||||
on9,52255.000000,52435.000000,180
|
||||
on9,54085.000000,54265.000000,180
|
||||
on9,59623.000000,59803.000000,180
|
||||
on9,63723.000000,63903.000000,180
|
||||
|
@ -284,7 +278,7 @@ on0,4358.000000,4538.000000,180
|
|||
on0,8218.000000,8398.000000,180
|
||||
on0,11726.000000,11906.000000,180
|
||||
on0,16260.000000,16440.000000,180
|
||||
on0,18125.000000,18305.000000,180
|
||||
on0,18125.000000,18340.600640,215.601
|
||||
on0,22535.000000,22715.000000,180
|
||||
on0,25547.000000,25727.000000,180
|
||||
on0,29100.000000,29280.000000,180
|
||||
|
@ -307,13 +301,11 @@ on1,169.000000,349.000000,180
|
|||
on1,3903.000000,4083.000000,180
|
||||
on1,7508.000000,7688.000000,180
|
||||
on1,11360.000000,11540.000000,180
|
||||
on1,16207.000000,16387.000000,180
|
||||
on1,16207.000000,16421.700960,214.701
|
||||
on1,18125.000000,18305.000000,180
|
||||
on1,20188.000000,20368.000000,180
|
||||
on1,22535.000000,22715.000000,180
|
||||
on1,24844.000000,25024.000000,180
|
||||
on1,25547.000000,25727.000000,180
|
||||
on1,27462.000000,27642.000000,180
|
||||
on1,29100.000000,29140.000320,40.0003
|
||||
on1,31747.000000,31927.000000,180
|
||||
on1,34449.000000,34629.000000,180
|
||||
on1,36975.000000,37155.000000,180
|
||||
|
|
|
127
src/simulator.cc
127
src/simulator.cc
|
@ -2,6 +2,7 @@
|
|||
#include <simgrid/s4u/Mailbox.hpp>
|
||||
#include <simgrid/s4u/Host.hpp>
|
||||
#include <simgrid/plugins/energy.h>
|
||||
#include <vector>
|
||||
#include <xbt/log.h>
|
||||
|
||||
#include <string>
|
||||
|
@ -41,14 +42,30 @@
|
|||
{ \
|
||||
if(hint_forward!=NULL && CLOCK<hint_forward->hint){ \
|
||||
hint_forward->HisForward=true; \
|
||||
hint_forward->SenderId=selfName; \
|
||||
hint_forward->DedicatedMailbox="hint_forward"; \
|
||||
hint_forward->HasData=false; \
|
||||
hint_forward->HasHint=true; \
|
||||
try { \
|
||||
XBT_INFO("%s try to forward a hint",CNAME); \
|
||||
TRACK_UPTIME(m->put(hint_forward,0,TRY_FORWARD_DURING)); \
|
||||
simgrid::s4u::Mailbox *m_ded= simgrid::s4u::Mailbox::by_name(hint_forward->DedicatedMailbox); \
|
||||
Payload* ack_rcv=m_ded->get<Payload>(); \
|
||||
if(!hint_forward->IsAlreadySent(ack_rcv->SenderId)){ \
|
||||
Payload *ack=new Payload(selfName); \
|
||||
ack->Abort=false; \
|
||||
m_ded->put(ack,0); \
|
||||
MODE_TX(); \
|
||||
SEND(m_ded->put(hint_forward,0,uptime)); \
|
||||
XBT_INFO("%s forward a hint successfully",CNAME); \
|
||||
hint_forward->AddReceiver(ack_rcv->SenderId); \
|
||||
} \
|
||||
else { \
|
||||
Payload *abort=new Payload(selfName); \
|
||||
abort->Abort=true; \
|
||||
m_ded->put(abort,0); \
|
||||
TRACK_UPTIME(simgrid::s4u::this_actor::sleep_for(FOR(TRY_FORWARD_DURING))); \
|
||||
} \
|
||||
} \
|
||||
catch(...){ \
|
||||
XBT_INFO("%s fail to forward a hint",CNAME); \
|
||||
|
@ -71,8 +88,8 @@ typedef unsigned int u32;
|
|||
*/
|
||||
class Payload{
|
||||
public:
|
||||
Payload():hint(0),duration(0),HasHint(false),HisForward(false),HasData(false),DataSize(0),Abort(false){}
|
||||
Payload(Payload &p):hint(p.hint),duration(p.duration),HasHint(p.HasHint),DedicatedMailbox(p.DedicatedMailbox),HisForward(p.HisForward),HasData(p.HasData),DataSize(p.DataSize),Abort(p.Abort){}
|
||||
Payload(std::string senderid):SenderId(senderid),hint(0),duration(0),HasHint(false),HisForward(false),HasData(false),DataSize(0),Abort(false){}
|
||||
Payload(Payload &p):hint(p.hint),duration(p.duration),HasHint(p.HasHint),DedicatedMailbox(p.DedicatedMailbox),HisForward(p.HisForward),HasData(false),DataSize(p.DataSize),Abort(p.Abort),SenderId(p.SenderId){}
|
||||
double hint; // The timestamp that should be used by the receiver
|
||||
double duration; // The duration that should be used by the receiver
|
||||
bool HasHint;
|
||||
|
@ -81,6 +98,18 @@ public:
|
|||
bool Abort; // Allow the receiver to abort a communication (if they already received the data for example) and unlock the sender
|
||||
u32 DataSize;
|
||||
std::string DedicatedMailbox; // Dedicated mailbox used by the sender/receiver
|
||||
std::string SenderId;
|
||||
std::vector<std::string> receivers; // Keep track of the receivers
|
||||
bool IsAlreadySent(std::string receiverId){
|
||||
for(auto id:receivers){
|
||||
if(id==receiverId)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
void AddReceiver(std::string receiverId){
|
||||
receivers.push_back(receiverId);
|
||||
}
|
||||
};
|
||||
|
||||
/// @brief Observation node code
|
||||
|
@ -156,31 +185,50 @@ static void obs_node(std::vector<std::string> args) {
|
|||
bool forward_mode=false; // Turned on and off every x seconds by the receiver (to switch between forward hint mode and receiving data mode)
|
||||
bool forward_only=false; // When observer receive a hint it switch to forward only up to the next wake up time
|
||||
bool sendhint_mode=false; // Turned on and off every x seconds by the sender (to switch between send hint and send data)
|
||||
Payload *sender_hint=new Payload(selfName); // One instance per wake up (since will send it one time per receiver it instance should be consistant across send)
|
||||
while(CLOCK < upuntil)
|
||||
{
|
||||
// ---------- SENDER ----------
|
||||
if(is_sender){
|
||||
// Send hint if send hint mode is enable
|
||||
if(i.use_hint && sendhint_mode && i.HasNext()){
|
||||
Payload *p=new Payload();
|
||||
p->DedicatedMailbox="hintmailbox"+selfName; // Use a dedicated mailbox
|
||||
p->HasHint=true;
|
||||
p->duration=i.GetNextDuration();
|
||||
p->hint=i.GetNextTS();
|
||||
p->DataSize=i.hint_size;
|
||||
sender_hint->DedicatedMailbox="hintmailbox"+selfName; // Use a dedicated mailbox
|
||||
sender_hint->HasHint=true;
|
||||
sender_hint->HasData=false;
|
||||
sender_hint->duration=i.GetNextDuration();
|
||||
sender_hint->hint=i.GetNextTS();
|
||||
sender_hint->DataSize=i.hint_size;
|
||||
try {
|
||||
TRACK_UPTIME(m->put(p,0,FOR(0.3))); // Init connection with a receiver
|
||||
simgrid::s4u::Mailbox *m_ded= simgrid::s4u::Mailbox::by_name(p->DedicatedMailbox);
|
||||
TRACK_UPTIME(m->put(sender_hint,0,FOR(0.3))); // Init connection with a receiver
|
||||
simgrid::s4u::Mailbox *m_ded=simgrid::s4u::Mailbox::by_name(sender_hint->DedicatedMailbox);
|
||||
Payload* ack_rcv=m_ded->get<Payload>();
|
||||
if(!sender_hint->IsAlreadySent(ack_rcv->SenderId)){
|
||||
// Send ack to receiver
|
||||
Payload *ack=new Payload(selfName);
|
||||
ack->Abort=false;
|
||||
m_ded->put(ack,0);
|
||||
// Start communication
|
||||
MODE_TX();
|
||||
SEND(m_ded->put(p,p->DataSize,uptime)); // Send the actual hint
|
||||
SEND(m_ded->put(sender_hint,sender_hint->DataSize,uptime)); // Send the actual hint
|
||||
MODE_ON();
|
||||
XBT_INFO("%s sent a hint successfully",CNAME);
|
||||
// Add the receiver to the list
|
||||
sender_hint->AddReceiver(ack_rcv->SenderId);
|
||||
}
|
||||
else {
|
||||
// Receiver already have the hint so abort
|
||||
Payload *abort=new Payload(selfName);
|
||||
abort->Abort=true;
|
||||
m_ded->put(abort,0);
|
||||
simgrid::s4u::this_actor::sleep_for(FOR(0.3)); // Make time progress
|
||||
}
|
||||
|
||||
}
|
||||
catch(...){}
|
||||
}
|
||||
// Send data if send hint mode is disable
|
||||
else{
|
||||
Payload *p=new Payload();
|
||||
Payload *p=new Payload(selfName);
|
||||
p->DedicatedMailbox="datamailbox"+selfName;
|
||||
p->HasData=true;
|
||||
p->HasHint=false;
|
||||
|
@ -236,9 +284,17 @@ static void obs_node(std::vector<std::string> args) {
|
|||
// Get the instantaneous message
|
||||
do {
|
||||
TRACK_UPTIME(p=m->get<Payload>(FOR(1)));
|
||||
Payload *ack=new Payload(selfName);
|
||||
ack->Abort=false;
|
||||
if(p->HisForward){
|
||||
if(hint_forward==NULL || (hint_forward !=NULL && p->hint>hint_forward->hint)){
|
||||
simgrid::s4u::Mailbox *m_ded=simgrid::s4u::Mailbox::by_name(p->DedicatedMailbox);
|
||||
// Send ack
|
||||
Payload *ack=new Payload(selfName);
|
||||
ack->Abort=false;
|
||||
m_ded->put(ack,0);
|
||||
// Check if we should receive
|
||||
p=m_ded->get<Payload>();
|
||||
if(!p->Abort){
|
||||
MODE_RX();
|
||||
TRACK_UPTIME(p=m_ded->get<Payload>(uptime));
|
||||
MODE_ON();
|
||||
|
@ -249,12 +305,21 @@ static void obs_node(std::vector<std::string> args) {
|
|||
hint_added++;
|
||||
}
|
||||
}
|
||||
p->HisForward=true; // To no get out of the loop
|
||||
}
|
||||
} while(p->HisForward);
|
||||
simgrid::s4u::Mailbox *m_ded= simgrid::s4u::Mailbox::by_name(p->DedicatedMailbox);
|
||||
// Start receiving data
|
||||
// Start receiving
|
||||
MODE_RX();
|
||||
// Only hint
|
||||
if(p->HasHint && !p->HasData){
|
||||
// Send ack
|
||||
Payload *ack=new Payload(selfName);
|
||||
ack->Abort=false;
|
||||
m_ded->put(ack,0);
|
||||
// Check if we should receive
|
||||
p=m_ded->get<Payload>();
|
||||
if(!p->Abort){
|
||||
TRACK_UPTIME(p=m_ded->get<Payload>(uptime));
|
||||
XBT_INFO("%s received a hint successfully",CNAME);
|
||||
hint_forward=new Payload(*p); // Enable hint forwarding
|
||||
|
@ -264,9 +329,10 @@ static void obs_node(std::vector<std::string> args) {
|
|||
hint_added++;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
// Inform the sender that we do not want to abort
|
||||
Payload *ack=new Payload();
|
||||
Payload *ack=new Payload(selfName);
|
||||
ack->Abort=false;
|
||||
m_ded->put(ack,0); // Instantaneous msg
|
||||
|
||||
|
@ -312,40 +378,55 @@ static void obs_node(std::vector<std::string> args) {
|
|||
else {
|
||||
Payload *p;
|
||||
try {
|
||||
do {
|
||||
TRACK_UPTIME(p=m->get<Payload>(FOR(1)));
|
||||
} while(p->HisForward); // Ignore forwarded hint
|
||||
simgrid::s4u::Mailbox *m_ded= simgrid::s4u::Mailbox::by_name(p->DedicatedMailbox);
|
||||
// Start receiving hint from sender
|
||||
if(p->HasData){
|
||||
Payload *ack=new Payload();
|
||||
Payload *ack=new Payload(selfName);
|
||||
ack->Abort=true;
|
||||
m_ded->put(ack,0);
|
||||
simgrid::s4u::this_actor::sleep_for(FOR(1));
|
||||
}
|
||||
else if(p->HasHint){
|
||||
// Send ack (allow the sender to fetch our node name (selfname))
|
||||
Payload *ack=new Payload(selfName);
|
||||
ack->Abort=false;
|
||||
m_ded->put(ack,0);
|
||||
// Check if we should receive (if sender did not send us the hint already abort should be true)
|
||||
p=m_ded->get<Payload>();
|
||||
if(!p->Abort){
|
||||
MODE_RX();
|
||||
TRACK_UPTIME(p=m_ded->get<Payload>(uptime));
|
||||
XBT_INFO("%s received a hint successfully",CNAME);
|
||||
hint_forward=new Payload(*p); // Enable hint forwarding
|
||||
forward_only=true;
|
||||
}
|
||||
else{ // Do not forget to sleep if no communications happend (otherwise time frooze)
|
||||
simgrid::s4u::this_actor::sleep_for(FOR(1));
|
||||
}
|
||||
}
|
||||
else {
|
||||
simgrid::s4u::this_actor::sleep_for(FOR(1));
|
||||
}
|
||||
}
|
||||
catch(...){
|
||||
}
|
||||
catch(...){}
|
||||
|
||||
}
|
||||
forward_mode=!forward_mode;
|
||||
forward_mode=!forward_mode; // Switch between forward and receive
|
||||
}
|
||||
else {
|
||||
simgrid::s4u::this_actor::sleep_until(upuntil);
|
||||
}
|
||||
}
|
||||
uptime=upuntil-CLOCK; // Note that uptime can be < 0 in extended mode
|
||||
uptime=uptime > 0 ? uptime : 0; // Just in case
|
||||
uptime=upuntil-CLOCK;
|
||||
uptime=uptime > 0 ? uptime : 0; // Note that uptime can be < 0 in extended mode
|
||||
|
||||
// Sometime uptimes get really, really small leading to deadlocks
|
||||
// it seems that in converge towards 0 close to infinitely
|
||||
if(uptime<0.001){
|
||||
uptime=0;
|
||||
upuntil=CLOCK;
|
||||
}
|
||||
}
|
||||
// Load next event
|
||||
i.GotoNextEvent();
|
||||
|
|
Loading…
Add table
Reference in a new issue