[Mini-NDN] [EXT] Timeouts in MiniNDN

André Dexheimer adcarneiro at inf.ufrgs.br
Tue Apr 27 06:42:58 PDT 2021


Hi Junxiao

I understand, so probably my application is sending to much data in short intervals and causing the producer to crash. I believe a simple approach would be to have a TCP-like window which increases in size when the consumer receives data and decreses upon Nacks and Timeouts. That might be enough since I don’t need very high bandwidths.

And what about this other point, do you have an ideia of what might be happening here? 
I also encountered another issue when testing this. I tried starting the consumer processes from the python script that creates the experiment, but I found that the Scheduler does not run for some reason. All the calls to m_scheduler.schedule() are made, but after calling m_ioService.run(), the delayedInterest() function is not called at all. However, the exact same program works when called with the same parameters from the host's xterm window. This a pretty big problem, because I cannot manually start all the consumers for the experiment. 
Core scheduling mechanism.
for (i = 0; i < lstData.size(); i++){
  dataBuff = lstData[i];
  fprintf(stdout, "[Consumer::run] Scheadule at %dms, Type=%d, ID=%d, Payload=%d, Prod=%s\n", dataBuff.nTimeMs, dataBuff.nType, dataBuff.nId, dataBuff.nPayload, dataBuff.strProd);
  m_scheduler.schedule(boost::chrono::milliseconds(dataBuff.nTimeMs), [this, dataBuff] { delayedInterest(dataBuff); });
}
// m_ioService.run() will block until all events finished or m_ioService.stop() is called
m_ioService.run();
return;

Call from the python script.

getPopen(pHost, 'consumer-with-queue %s /home/vagrant/icnsimulations/topologies/queue_wired-topo4.txt' % (str(pHost)))


Once again, thank you so much for your help.

Best regards, 
André Dexheimer Carneiro

From: Junxiao Shi
Sent: 26 April 2021 23:32
To: Andre
Cc: sepehr abdous via Mini-NDN
Subject: Re: [EXT][Mini-NDN] Timeouts in MiniNDN

Hi Andre

I don't see congestion control in this snippet.
Applications are required to implement congestion control in order to operate smoothly in an NDN network.

Yours, Junxiao

On Mon, Apr 26, 2021 at 8:45 PM Andre <adcarneiro at inf.ufrgs.br> wrote:
Inside delayedInterest, the variable nPackets is determined according to the 8000 byte payload limit.
// Express interest for all packets
for (i = 0; i < nPackets; i++){
if ((bHasLeftover) && (i+1 == nPackets)){
// Last packet
nPacketPayload = dataBuff.nPayload % N_MAX_PACKET_BYTES;
}
else{
// Any other packet
nPacketPayload = N_MAX_PACKET_BYTES;
}
snprintf(strBuf, sizeof(strBuf), "%s-%db-%dof%d", strPrefix, nPacketPayload, i+1, nPackets);
fprintf(stdout, "[Consumer::delayedInterest] Expressing interest=%s (%d/%d)\n", strBuf, i+1, nPackets);
dtBegin = std::chrono::steady_clock::now();
interestName = Name(strBuf);
interest = Interest(interestName);
interest.setCanBePrefix(false);
interest.setMustBeFresh(true);
interest.setInterestLifetime(6_s);
m_face.expressInterest(interest,
bind(&Consumer::onData, this, _1, _2, dtBegin),
bind(&Consumer::onNack, this, _1, _2, dtBegin),
bind(&Consumer::onTimeout, this, _1, dtBegin));
}

This runs fine for small requests, but when more interests are expressed in a row, making requests of about 60 to 100 8KB packages, the producers work for a while but then start becoming unresponsive. Once I get a timeout from a specific producer, it does not answer to any more requests, even if I kill the producer/consumer process and start them back up.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.lists.cs.ucla.edu/pipermail/mini-ndn/attachments/20210427/ba43e29a/attachment.html>


More information about the Mini-NDN mailing list