ndnSIM-2.8 缓存容量设置分析(setCsSize)

Intro

你在自己的仿真程序里会使用下面这句设置节点缓存容量:

StackHelper::setCsSize()

然后通过 StackHelper::doInstall() 把它设置到对应的节点上。

具体可以参考 src/ndnSIM/examples 路径下的不同示例。

本文来深入分析一下这个过程。(个人理解,如有错误之处,请各位批评指正

1. 首先来看 StackHelper::doInstall() 都做了什么 ?

1)L3Protocol 构造函数分析

Ptr<L3Protocol> ndn = m_ndnFactory.Create<L3Protocol>();

显然这是要构造一个 L3Protocol 对象,我们去找到 L3Protocol 对应的构造函数:

L3Protocol::L3Protocol(): m_impl(new Impl())

然后转到了  class L3Protocol::Impl::Impl()

这里面设置了一个 string 类型的 initialConfig,构造的时候会初始化所有配置项的默认值。

注意作者说了你不要直接去改这个初始化的文件。可以通过 helper 来设置特定的 NFD 参数。

例如上面的 tables.cs_max_packets 也在这里面设置初值,可以看到它的默认值是 100

2)缓存容量配置项修改

ndn->getConfig().put("tables.cs_max_packets", m_maxCsSize);

这里应该是完成了上面对应配置项的修改。

这个 m_maxCsSize 就是你 setCsSize() 中指定的那个值。

3)那么你设置的值又是如何生效的呢?

即如何将这些 L3Protocol 的配置和对应节点的缓存(CS)绑定到一起?

StackHelper::doInstall(Ptr<Node> node) 在最下面有这样一句:

node->AggregateObject(ndn);  
  •  但是有一说一,这个函数里面我看不懂 ~
  •  但是作者说了,它后面是转到 L3Protocol::NotifyNewAggregate(),而在这里会调用L3Protocol的初始化函数,即 L3Protocol::initialize()

 

2. 下面我们深入分析看  L3Protocol::initialize() 做了什么 ?

我太懒了。

请看注释。

L3Protocol::initialize() {     // 节点的 NDN 协议栈初始化

    // 初始化管理器,实际上是将该节点的Forwarde和各种管理器绑定上,包括CS、FIB
    initializeManagement() {   

        // 默认构造函数,设置默认缓存容量10,设置默认缓存策略 LRU
        Cs::Cs()     
         
        // Forwarder构造(上面的的 cs 其实是作为Forwarder的对象成员调用默认构造)
        Forwarder::Forwarder() 

        // 将tables相关的设置绑定一个handler处理,即processConfig, 见下面
        TablesConfigSection::setConfigFile()  
 
        // 步骤 1 中的操作会生成一个配置文件 ndnSIM.conf,这里就是把它所有配置读出来、并逐个处理
        ConfigFile::parse()    

        // 通过前面绑定的 ConfigSectionHandler 来处理每个设置,缓存Cs和tables相关的配置绑定到下面来处理
        ConfigFile::process()  

        // 最后是在这里实现具体的设置!
        TablesConfigSection::processConfig() {
            do read CS config
            do set CS config
        }
    }

    // ...
}

3. 总结上面的过程

StackHelper::setCsSize()
StackHelper::doInstall() {
    // ...
    node->AggregateObject(ndn)
}

L3Protocol::NotifyNewAggregate()

L3Protocol::initialize() {     // 节点的 NDN 协议栈初始化

    // 初始化管理器,实际上是将该节点的Forwarde和各种管理器绑定上,包括CS、FIB
    initializeManagement() {   

        // 默认构造函数,设置默认缓存容量10,设置默认缓存策略 LRU
        Cs::Cs()     
         
        // Forwarder构造(上面的的 cs 其实是作为Forwarder的对象成员调用默认构造)
        Forwarder::Forwarder() 

        // 将tables相关的设置绑定一个handler处理,即processConfig, 见下面
        TablesConfigSection::setConfigFile()  
 
        // 步骤 1 中的操作会生成一个配置文件 ndnSIM.conf,这里就是把它所有配置读出来、并逐个处理
        ConfigFile::parse()    

        // 通过前面绑定的 ConfigSectionHandler 来处理每个设置,缓存Cs和tables相关的配置绑定到下面来处理
        ConfigFile::process()  

        // 最后是在这里实现具体的设置!
        TablesConfigSection::processConfig() {
            do read CS config
            do set CS config
        }
    }

    // ...
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值