这是我参与更文挑战的第16天,活动详情查看: 更文挑战
远距离点对点通信
如引言中所述,在ns-3中划分用于分布式目的的模拟目前只能跨点对点链接进行;因此,远程点对点链路的思想对于ns-3分布式仿真是非常重要的。当安装了连接两个节点的点对点链接时,点对点助手检查两个节点的系统id或级别。等级应该在分布式模拟的节点创建过程中分配,目的是表示节点属于哪个LP。如果这两个节点的级别相同,则会创建一条规则的点对点链路。但是,如果这两个节点在不同的级别上,则这些节点用于不同的LPs,并使用远程点对点链接。如果一个包要通过远程点对点链路发送,则使用MPI将消息发送到远程LP。
分布式拓扑
目前,完整的拓扑是在每个级别上创建的,与单个节点系统id无关。只有应用程序是特定于一个等级的。例如,考虑LP 1上的节点1和LP 2上的节点2,在节点1上有一个流量生成器。节点1和节点2都将在LP1和LP2上创建;但是,流量生成器只会安装在LP1上。虽然这对内存效率来说不是最优的,但它确实简化了路由,因为ns-3中所有当前的路由实现都将与分布式模拟一起工作。
Setting synchronization algorithm to use
全局值SimulatorImplementationType用于设置要使用的同步算法。该值必须在未使用默认DistributedSimulatorImpl时调用MpiInterface::Enable方法之前设置。下面是一个示例代码片段,展示了如何添加一个命令行参数来控制同步算法的选择:
cmd.AddValue ("nullmsg", "Enable the use of null-message synchronization", nullmsg);
if(nullmsg)
{
GlobalValue::Bind ("SimulatorImplementationType",
StringValue ("ns3::NullMessageSimulatorImpl"));
}
else
{
GlobalValue::Bind ("SimulatorImplementationType",
StringValue ("ns3::DistributedSimulatorImpl"));
}
// Enable parallel simulator with the command line arguments
MpiInterface::Enable (&argc, &argv);