nets-cs-pub-ro / ndp Goto Github PK
View Code? Open in Web Editor NEWNDP datacenter stack
License: BSD 2-Clause "Simplified" License
NDP datacenter stack
License: BSD 2-Clause "Simplified" License
In https://github.com/nets-cs-pub-ro/NDP/blob/master/sim/datacenter/main.h#L7, I think the unit of 'HOST_NIC' should be Mbps instead of Gbps.
Hi @craiciu, I experienced a bug in a case when running NDP code.
Here is the scenario, I have a message of two packets, the first packet gets payload trimmed, the second packet arrives at the receiver. The cut-payloaded packet of the first packet arrives at the receiver first, the second packet arrives at the receiver later. The receiver generates an NACK for the first packet with pull_no of 2, the receiver then generates an ACK for the second packet, and a PULL packet for the second packet with pull_no of 3; However, due to the multi-path, the PULL packet arrives at the sender earlier than the NACK packet; The PULL packet would first increase the _last_pull to be 3 in the function NdpSrc::pull_packets, because there is not any packet in the retransmission queue, nothing happens. The NACK packet arrives later and also call pull_packets function, because _last_pull has already increased to 3, the NACK packet would not trigger a retransmission. At the end, only timeout can help this packet gets retransmitted. However, as the code already erased the timer when process NACK packet. There is not any timer at retransmit_packet function, thus, no packets get retransmitted even timeout kicks in. At the end, this message never gets finished.
To fix this bug, below is the new function of NdpSrc::pull_packets. Does the change make sense to you?
void NdpSrc::pull_packets(NdpPull::seq_t pull_no, NdpPull::seq_t pacer_no) {
// Pull number is cumulative both to allow for lost pulls and to
// reduce reverse-path RTT - if one pull is delayed on one path, a
// pull that gets there faster on another path can supercede it
if(pull_no !=0 && pull_no <= _last_pull){
send_packet(pacer_no);
}else{
while (_last_pull < pull_no) {
send_packet(pacer_no);
_last_pull++;
}
}
}
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.