[Mini-NDN] [EXT] Timeouts in MiniNDN

Alexander Wilhelm Lane (awlane) awlane at memphis.edu
Tue Apr 27 16:13:00 PDT 2021


Regarding your process issue, Popen objects (getPopen is a wrapper method that returns one) generally either need arguments passed as a list rather than string ( ie ['consumer-with-queue, '%s /home/vagrant/icnsimulations/topologies/queue_wired-topo4.txt' % (str(pHost))] ) or to be run with the argument shell=True. The fact it's running from xterm but not the API suggests this may be the issue.
-Alex
________________________________
From: Mini-NDN <mini-ndn-bounces at lists.cs.ucla.edu> on behalf of André Dexheimer via Mini-NDN <mini-ndn at lists.cs.ucla.edu>
Sent: Tuesday, April 27, 2021 8:42 AM
To: Junxiao Shi <shijunxiao at email.arizona.edu>
Cc: sepehr abdous via Mini-NDN <mini-ndn at lists.cs.ucla.edu>
Subject: Re: [Mini-NDN] [EXT] Timeouts in MiniNDN

CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and trust the content is safe.


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<mailto:shijunxiao at email.arizona.edu>
Sent: 26 April 2021 23:32
To: Andre<mailto:adcarneiro at inf.ufrgs.br>
Cc: sepehr abdous via Mini-NDN<mailto:mini-ndn at lists.cs.ucla.edu>
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<mailto: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/2e3eb946/attachment-0001.html>


More information about the Mini-NDN mailing list