Unison
一,总结:
【提出了一个名为"Unison"的网络仿真内核,旨在解决网络仿真中的一个重大挑战:如何提供一个既能高效并行计算又对用户透明的仿真内核。作者们通过提出一个细粒度的分区方案和负载自适应调度策略,使得"Unison"在多种网络场景下都能实现快速、透明、准确、确定性的仿真。这篇论文的主要贡献包括深入分析现有并行离散事件仿真(PDES)算法的限制,并通过创新的设计和实现,显著提高了仿真的效率和用户友好性。"Unison"还通过一系列评估,展示了其在各种场景下的广泛适用性和优越性能。】
二,核心组件和策略实现:
1,自动细粒度分区:
(1)目标:自动将网络拓扑细致地划分成多个逻辑处理单元(LPs),优化缓存效率和调度灵活性。
(2)方法:基于网络连接的延迟特性,自动识别并划分出更小的处理单元,而不需要用户手动配置。这种细粒度的分区有助于提高缓存命中率,因为相关的事件更有可能在相同的或邻近的处理单元中处理,从而减少缓存未命中的情况。
(3)关键步骤:
3.1)自动化的空间划分:
①输入网络拓扑:细粒度分区首先需要网络拓扑的输入,包括节点(如交换机、路由器或终端设备)和连接这些节点的链路(包括链路的延迟和带宽信息)。
②确定划分细粒度:通过分析网络链路的延迟特性,"Unison"确定了一个划分的粒度,即哪些链路应该在逻辑上被“切割”,以便于将拓扑分割成更小的LPs。通常,拥有较高延迟的链路更有可能被选中进行逻辑切割。
③逻辑切割过程:基于链路延迟的分析结果,"Unison"自动执行拓扑的逻辑切割,每个独立的分区成为一个LP。这一过程涉及到对网络图的遍历和切割,以确保每个LP都包含一组紧密相关的节点,这些节点之间的直接链路延迟低于某个阈值。
3.2)优化缓存效率:
缓存的友好设计:细粒度分区策略有助于优化仿真过程中的缓存使用。由于相关事件更有可能在相同的或者邻近的LP中处理,这有助于提高CPU缓存的命中率,减少仿真时间。
3.3)实现考虑:
①自动化和用户透明性:Unison的分区过程完全自动化,无需手动配置LPs的划分,使得整个仿真过程对用户来说是透明的。
②考虑动态拓扑变化:Unison考虑了网络拓扑可能发生动态变化,例如链路的添加或者移除。Unison能在仿真运行时动态调整LPs的划分,来适应这些变化,保证仿真的准确性和效率。
2,负载自适应调度:
(1)目标:动态地将处理单元分配给处理线程,以实现负载之间的平衡,减少线程间同步的等待时间,提高并行效率。
(2)方法:通过一个基于启发式的调度算法,动态监控各处理单元的负载并调整它们在处理线程之间的分配。算法会优先处理负载重的单元,确保所有线程尽可能平等地参与计算,减少某些线程空闲而其他线程过载的情况。
(3)实现步骤:
①负载估计:利用历史数据(如前一轮仿真中LP的处理时间)来预测每个LP在未来的负载情况。计算每个LP中待处理事件的数量,作为负载估计的另一个指标。
②优先级队列:根据负载估计值,将LPs放入一个优先级队列中,负载重的LP拥有更高的优先级。处理线程从优先级队列中取出LP进行处理,优先处理负载较重的LP,以尽快减少总体的负载不平衡。
③动态分配:在仿真的每一轮中,根据LP的实际执行情况和优先级队列重新分配LP到线程,以响应负载的动态变化。采用多线程锁自由(Lock-Free)的数据结构来管理LPs和事件,确保在多线程环境下的高效执行。
④调度周期:"Unison"采用了基于LP数量的动态调度周期,调度操作不是在每个仿真步骤中都执行,而是根据一定的周期来触发。
3,锁自由执行:
(1)目标:在多线程环境中安全高效地执行仿真,避免阻塞,提高并行度。
(2)方法:通过设计一个无锁的数据结构和执行流程,使得多线程可以并发访问和修改数据而不会相互干扰,从而提高执行效率。
(3)实现的关键:
①使用原子操作管理共享数据:在对共享数据结构(如事件队列)进行操作时,"Unison"使用原子操作来保证操作的原子性和一致性,避免了传统互斥锁带来的性能开销。
②分阶段执行:将仿真过程分为多个阶段(如事件处理、全局事件处理、事件接收、窗口更新等),每个阶段都通过原子操作或独立的数据区域来避免数据竞争,实现无锁并发。
③邮箱机制:为了处理来自不同LP的事件,每个LP维护一个邮件箱,用于临时存储其他LP发送过来的事件。这些事件在特定的阶段(如事件接收阶段)被统一处理,这样可以避免在事件处理过程中的直接数据竞争。
④原子性事件调度:在将事件分配给不同LP进行处理时,"Unison"采用原子性的操作来保证事件调度的正确性,避免了因竞争调度资源而导致的性能损失。
4,用户透明性:
(1)目标:使得用户在使用"Unison"进行仿真时,不需要关心并行化的复杂配置和细节。
(2)方法:通过自动化的分区和调度策略,用户只需定义仿真模型和参数,无需手动配置并行执行的具体细节。
(3)兼容性设计:在设计时充分考虑与现有的仿真模型和工具的兼容性,尽可能减少或避免对现有仿真模型的修改需求。这意味着用户可以将现有的单线程仿真模型直接迁移到"Unison"上运行,而无需进行复杂的改造。
5,实现细节:
Unison基于NS-3进行开发的,适用与3.36.1、3.37等版本…