NFD’s Content Store

The Contest Store (CS) is implemented as a set of :ndnsim:`CS entries <nfd::cs::EntryImpl>`), ordered by the full data name including the implicit digest. To manage entries, CS adopts a cache policy interface (:ndnsim:`nfd::cs::Policy`), invoked any time a CS entry is added, removed, updated, or used.

The supported cache replacement policies are the following:

NFD’s Content Store Policies
nfd::cs::lru Last Recently Used (LRU)
nfd::cs::priority_fifo Priority-Based First-In-First-Out (FIFO)

For more detailed specification refer to the NFD Developer’s Guide, section 3.3.

To control the maximum size and the policy of NFD’s Content Store use StackHelper::setCsSize() and StackHelper::setPolicy() methods:

ndnHelper.setCsSize(<max-size-in-packets>);
ndnHelper.setPolicy(<replacement-policy>);
...
ndnHelper.Install(nodes);

Examples:

  • To set CS size 100 on node1, size 1000 on node2, and size 2000 on all other nodes. LRU replacement policy for node 1, priority FIFO for the rest:

    ndnHelper.setCsSize(100);
    ndnHelper.setPolicy("nfd::cs::lru");
    ndnHelper.Install(node1);
    
    ndnHelper.setCsSize(1000);
    ndnHelper.setPolicy("nfd::cs::priority_fifo");
    ndnHelper.Install(node2);
    
    NodeContainer allOtherNodes;
    for (NodeList::Iterator i = NodeList::Begin(); i != NodeList::End(); ++i) {
      if (*i != node1 && *i != node2) {
        allOtherNodes.Add(*i);
      }
    }
    ndnHelper.Install(allOtherNodes);
    
  • To effectively disable NFD content store an all nodes

    Minimum allowed value for NFD content store maximum size is 1.

    ndnHelper.setCsSize(1);
    ...
    ndnHelper.Install(nodes);
    

CS entry

The Data packet, along with other necessary fields, are stored in a CS entry. Each entry contains:

  • the Data packet
  • flag indicating whether the Data packet is unsolicited
  • the timestamp at which the cached Data becomes stale

Misc

  • Get aggregate statistics of CS hit/miss ratio (works with any policy)

    The simplest way tro track CS hit/miss statistics is to use :ndnsim:`CsTracer`, in more details described in Metrics Section.

    CsTracer::InstallAll("cs-trace.txt", Seconds(1));