[ndnSIM] No Cache Hits or Misses via ndnSim Example or anything else
Prajjwal Singh
csb17053 at tezu.ac.in
Tue Jul 27 13:19:42 PDT 2021
Hello Justin,
Just as a quick fix to check which node had which interest Name prefix hit,
here is what I would do.
open NFD/daemon/table/cs.hpp and tweak the find () function as the one below
.
template<typename HitCallback, typename MissCallback>
void
find(const Interest& interest, HitCallback&& hit, MissCallback&& miss) const
{
auto match = findImpl(interest);
if (match == m_table.end()) {
miss(interest);
return;
}
int node = ns3::Simulator::GetContext();
std::cout<<"Node:"<<node<<" HIT"<<" for
Name:"<<interest.getName()<<std::endl;
hit(interest, match->getData());
}
// instead of stdout you can output to a file.
On Wed, 28 Jul 2021, 01:34 Justin Rodrigues via ndnSIM, <
ndnsim at lists.cs.ucla.edu> wrote:
> Hello Everyone,
>
> So right now I am running a scenario where I have one consumer running
> four client requests. Based on the ndn-simple-with-content-freshness
> example:
>
> /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
> /**
> * Copyright (c) 2011-2015 Regents of the University of California.
> *
> * This file is part of ndnSIM. See AUTHORS for complete list of ndnSIM
> authors and
> * contributors.
> *
> * ndnSIM is free software: you can redistribute it and/or modify it under
> the terms
> * of the GNU General Public License as published by the Free Software
> Foundation,
> * either version 3 of the License, or (at your option) any later version.
> *
> * ndnSIM is distributed in the hope that it will be useful, but WITHOUT
> ANY WARRANTY;
> * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
> PARTICULAR
> * PURPOSE. See the GNU General Public License for more details.
> *
> * You should have received a copy of the GNU General Public License along
> with
> * ndnSIM, e.g., in COPYING.md file. If not, see <
> http://www.gnu.org/licenses/>.
> **/
>
> // ndn-simple-with-content-freshness.cpp
>
> #include "ns3/core-module.h"
> #include "ns3/network-module.h"
> #include "ns3/point-to-point-module.h"
> #include "ns3/ndnSIM-module.h"
>
> namespace ns3 {
>
> /**
> * This scenario simulates a very simple network topology:
> *
> *
> * +----------+ 1Mbps +--------+ 1Mbps +----------+
> * | consumer | <------------> | router | <------------> | producer |
> * +----------+ 10ms +--------+ 10ms +----------+
> *
> * This scenario demonstrates how to use content store that responds to
> Freshness parameter set in
> * data packets. In other words, if the producer set FreshnessPeriod
> field to 2 seconds, the
> * corresponding data packet will not be considered fresh for more than 2
> seconds (can be cached
> * for a shorter time, if entry is evicted earlier)
> *
> * NS_LOG=OneInterestRequester ./waf --run
> ndn-simple-with-content-freshness
> */
>
> int
> main(int argc, char* argv[])
> {
> // setting default parameters for PointToPoint links and channels
> Config::SetDefault("ns3::PointToPointNetDevice::DataRate",
> StringValue("1Mbps"));
> Config::SetDefault("ns3::PointToPointChannel::Delay",
> StringValue("10ms"));
> Config::SetDefault("ns3::QueueBase::MaxSize", StringValue("20p"));
>
> // Read optional command-line parameters (e.g., enable visualizer with
> ./waf --run=<> --visualize
> CommandLine cmd;
> cmd.Parse(argc, argv);
>
> // Creating nodes
> NodeContainer nodes;
> nodes.Create(3);
>
> // Connecting nodes using two links
> PointToPointHelper p2p;
> p2p.Install(nodes.Get(0), nodes.Get(1));
> p2p.Install(nodes.Get(1), nodes.Get(2));
>
> // Install Ndn stack on all nodes
> ndn::StackHelper ndnHelper;
> ndnHelper.SetDefaultRoutes(true);
> ndnHelper.setCsSize(2); // allow just 2 entries to be cached
> ndnHelper.setPolicy("nfd::cs::lru");
> ndnHelper.InstallAll();
>
> // Installing applications
>
> // Consumer
> ndn::AppHelper consumerHelper("OneInterestRequester");
>
> // /*
> // 1) at time 1 second requests Data from a producer that does not
> specify freshness Client 1
> // 2) at time 10 seconds requests the same Data packet as client 1
>
> // 3) at time 2 seconds requests Data from a producer that specifies
> freshness set to 2 seconds
> // 4) at time 12 seconds requests the same Data packet as client 3
>
> // Expectation:
> // Interests from 1, 3 and 4 will reach producers
> // Interset from 2 will be served from cache
> // */
>
> consumerHelper.SetPrefix("/no-freshness");
> consumerHelper.Install(nodes.Get(0)).Start(Seconds(1));
> //nfd::cs::insert("/no-freshness",true);
> consumerHelper.Install(nodes.Get(0)).Start(Seconds(10));
>
> consumerHelper.SetPrefix("/with-freshness");
> consumerHelper.Install(nodes.Get(0)).Start(Seconds(2));
> consumerHelper.Install(nodes.Get(0)).Start(Seconds(12));
>
>
>
> // Producer
> ndn::AppHelper producerHelper("ns3::ndn::Producer");
> producerHelper.SetAttribute("PayloadSize", StringValue("1024"));
>
> producerHelper.SetAttribute("Freshness", TimeValue(Years(100))); //
> freshness long enough
> producerHelper.SetPrefix("/no-freshness");
> producerHelper.Install(nodes.Get(2)); // last node
>
> producerHelper.SetAttribute("Freshness", TimeValue(Seconds(2.0))); //
> freshness 2 seconds (!!!
> //
> freshness granularity is 1
> //
> seconds !!!)
> producerHelper.SetPrefix("/with-freshness");
> producerHelper.Install(nodes.Get(2)); // last node
>
>
> ndn::L3RateTracer::InstallAll("../traces/rate-trace.txt", Seconds(1.0));
> L2RateTracer::InstallAll("../traces/drop-trace.txt", Seconds(1.0));
> ndn::AppDelayTracer::InstallAll("../traces/app-delays-trace.txt" );
> ndn::CsTracer::InstallAll("../traces/cs-trace.txt", Seconds(1.0));
>
>
>
> Simulator::Stop(Seconds(30.0));
>
> Simulator::Run();
> Simulator::Destroy();
>
> return 0;
> }
> } // namespace ns3
>
> int
> main(int argc, char* argv[])
> {
> return ns3::main(argc, argv);
> }
>
> That's the current code I am working with.
>
> I want to prove without a shadow of a doubt that the 2nd Client is
> retrieving data from a cache hit basically. I can show it in visualizer but
> I was requested to also have this information in some trace file. I thought
> cs-tracer would work but all I get are 0s in Cache hits and Misses even
> though I know that the information is being retrieved from the cache. Then
> I would use the app-delays trace file to show how the Round trip time of
> this client would be much shorter than the other 3 clients due to the fact
> that this client retrieved the data from the content store of the router as
> opposed to the interest being forwarded to the producer and then back to
> the router and then consumer.
>
> Thanks,
>
> Justin Rodrigues
> ------------------------------
> *From:* Justin Rodrigues
> *Sent:* Monday, July 26, 2021 2:50 PM
> *To:* ndnsim at lists.cs.ucla.edu <ndnsim at lists.cs.ucla.edu>
> *Subject:* No Cache Hits or Misses via ndnSim Example or anything else
>
> Hello Everyone,
>
> I hope you are doing well.
>
> I am not sure why but when I run the example for cs-trace called
> ndn-tree-cs-tracers.cpp I get 0 cache hits and 0 misses is this normal in
> the cs-trace file? I need to understand how the hits or misses are
> accounted for I think something is wrong.
>
> // ndn-tree-cs-tracers.cpp
> #include "ns3/core-module.h"#include "ns3/network-module.h"#include "ns3/ndnSIM-module.h"
> namespace ns3 {
> intmain(int argc, char* argv[]){
> CommandLine cmd;
> cmd.Parse(argc, argv);
>
> AnnotatedTopologyReader topologyReader("", 1);
> topologyReader.SetFileName("src/ndnSIM/examples/topologies/topo-tree.txt");
> topologyReader.Read();
>
> // Install NDN stack on all nodes
> ndn::StackHelper ndnHelper;
> ndnHelper.setPolicy("nfd::cs::lru");
> ndnHelper.setCsSize(100);
> ndnHelper.InstallAll();
>
> // Choosing forwarding strategy
> ndn::StrategyChoiceHelper::InstallAll("/prefix", "/localhost/nfd/strategy/best-route");
>
> // Installing global routing interface on all nodes
> ndn::GlobalRoutingHelper ndnGlobalRoutingHelper;
> ndnGlobalRoutingHelper.InstallAll();
>
> // Getting containers for the consumer/producer
> Ptr<Node> consumers[4] = {Names::Find<Node>("leaf-1"), Names::Find<Node>("leaf-2"),
> Names::Find<Node>("leaf-3"), Names::Find<Node>("leaf-4")};
> Ptr<Node> producer = Names::Find<Node>("root");
>
> for (int i = 0; i < 4; i++) {
> ndn::AppHelper consumerHelper("ns3::ndn::ConsumerCbr");
> consumerHelper.SetAttribute("Frequency", StringValue("10")); // 100 interests a second
>
> // Each consumer will express the same data /root/<seq-no>
> consumerHelper.SetPrefix("/root");
> ApplicationContainer app = consumerHelper.Install(consumers[i]);
> app.Start(Seconds(0.01 * i));
> }
>
> ndn::AppHelper producerHelper("ns3::ndn::Producer");
> producerHelper.SetAttribute("PayloadSize", StringValue("1024"));
>
> // Register /root prefix with global routing controller and
> // install producer that will satisfy Interests in /root namespace
> ndnGlobalRoutingHelper.AddOrigins("/root", producer);
> producerHelper.SetPrefix("/root");
> producerHelper.Install(producer);
>
> // Calculate and install FIBs
> ndn::GlobalRoutingHelper::CalculateRoutes();
>
> Simulator::Stop(Seconds(20.0));
> ndn::CsTracer::InstallAll("cs-trace.txt", Seconds(1));
> Simulator::Run();
> Simulator::Destroy();
>
> return 0;}
> } // namespace ns3
> intmain(int argc, char* argv[]){
> return ns3::main(argc, argv);}
>
> Above is the source file that I am creating the trace file from which can
> be found via this link:
>
> https://ndnsim.net/current/metric.html?highlight=obtaining%20metrics
>
>
> Thanks,
>
> Justin Rodrigues
> _______________________________________________
> ndnSIM mailing list
> ndnSIM at lists.cs.ucla.edu
> http://www.lists.cs.ucla.edu/mailman/listinfo/ndnsim
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.lists.cs.ucla.edu/pipermail/ndnsim/attachments/20210728/6aeec1c5/attachment-0001.html>
More information about the ndnSIM
mailing list