diff --git a/r/lightning_begin.R b/r/lightning_begin.R index 2e62b99..3af8f15 100644 --- a/r/lightning_begin.R +++ b/r/lightning_begin.R @@ -67,3 +67,27 @@ ggplot(data=xx3, aes(x=lat, group=flag, color=flag)) + geom_vline(xintercept = 400) + coord_cartesian(xlim=c(0,1200)) + theme_classic() + +xy <- read.csv("../res/tmp_light/light.csv") +xz <- sqldf("select packet_id,1.0 * MIN(latency) / 1000.0 as lat,way,conf,run from xy where packet_id > 50 and packet_id < 7400 group by packet_id,way,conf,run") +xz$conf <- factor(xz$conf) +ggplot(data=xz, aes(x=lat, group=conf, color=conf)) + + stat_ecdf(pad = FALSE) + + geom_vline(xintercept = 200) + + geom_vline(xintercept = 400) + + coord_cartesian(xlim=c(0,600)) + + theme_classic() + +ggplot(data=xz, aes(y=lat, x=conf)) + + geom_violin(scale='width') + + geom_boxplot(width=0.1, outlier.shape=NA) + + theme_classic() + +xa <- sqldf("select packet_id,1.0 * MIN(latency) / 1000.0 as lat,way,conf,run from xy where flag=1 and packet_id > 50 and packet_id < 7400 group by packet_id,way,conf,run") +ggplot(data=sqldf("select * from xa where run='out/bhTF0rd7MOI5SOPs-6'"), aes(x=packet_id, y=lat, color=way)) + + geom_line() + + geom_hline(yintercept=400) + + geom_hline(yintercept=200) + + coord_cartesian(ylim=c(0,1000)) + + #geom_point(aes(shape=conf)) + + theme_classic() diff --git a/src/algo_lightning.c b/src/algo_lightning.c index e1ccd61..c41fded 100644 --- a/src/algo_lightning.c +++ b/src/algo_lightning.c @@ -380,6 +380,21 @@ int send_message(struct evt_core_ctx* ctx, struct buffer_packet* bp) { return 1; } +void tag_packet_measlat(union abstract_packet* ap, uint8_t link_id, uint8_t is_slow) { + union abstract_packet* cur = ap; + while (cur != NULL) { + if (ap->fmt.headers.cmd != CMD_UDP_ENCAPSULATED) { + cur = ap_next(cur); + continue; + } + struct measure_packet *mp = (void*)&cur->fmt.content.udp_encapsulated.payload; + mp->flag = 0x7f & link_id; + mp->flag |= is_slow << 7; + cur = ap_next(cur); + } + +} + int algo_lightning_on_datagram(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo, struct buffer_packet* bp) { struct algo_ctx* app_ctx = fdinfo->cat->app_ctx; struct light_ctx* lightc = app_ctx->misc; @@ -415,25 +430,12 @@ int algo_lightning_on_datagram(struct evt_core_ctx* ctx, struct evt_core_fdinfo* sel_link_last = lightc->last[stats[i].link_id]; } } + if (lightc->is_measlat) tag_packet_measlat (ap, lightc->selected_link, 0); send_message (ctx, bp); if (lightc->csv) printf("%ld,%d,fast\n", now_timestamp, lightc->selected_link); } if (lightc->sched_strat == SCHEDULE_BOTH || lightc->sched_strat == SCHEDULE_SLOW) { - // Tag packets for slow link - if (lightc->is_measlat) { - union abstract_packet* cur = ap; - while (cur != NULL) { - if (ap->fmt.headers.cmd != CMD_UDP_ENCAPSULATED) { - cur = ap_next(cur); - continue; - } - struct measure_packet *mp = (void*)&cur->fmt.content.udp_encapsulated.payload; - mp->flag = 1; - cur = ap_next(cur); - } - } - // Select slow link sel_link_last = now; lightc->selected_link = UINT8_MAX; @@ -443,6 +445,7 @@ int algo_lightning_on_datagram(struct evt_core_ctx* ctx, struct evt_core_fdinfo* sel_link_last = lightc->last[stats[i].link_id]; } } + if (lightc->is_measlat) tag_packet_measlat (ap, lightc->selected_link, 1); send_message (ctx, bp); if (lightc->csv) printf("%ld,%d,slow\n", now_timestamp, lightc->selected_link); } diff --git a/src/measure.c b/src/measure.c index 02a8915..c52667b 100644 --- a/src/measure.c +++ b/src/measure.c @@ -17,7 +17,9 @@ void measure_parse(int size, struct measure_conf* mc) { char* ctime_no_newline = strtok(ctime(&now), "\n"); micro_sec = elapsed_micros (&head->emit_time, &curr); - printf("[%s] Packet %llu latency %luµs with flag %d\n", ctime_no_newline, (unsigned long long)head->counter, micro_sec, head->flag); + uint8_t is_slow = head->flag >> 7; + uint8_t link_id = head->flag & 0x7f; + printf("[%s] Packet %llu latency %luµs with flag %d sent on link %d\n", ctime_no_newline, (unsigned long long)head->counter, micro_sec, is_slow, link_id); if (!mc->is_server && head->counter >= mc->max_measure) { printf("Measurement done\n");