- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * * * * * * * * * * * * * * * * * * * 物理模型着重子网管理的外部特性。 逻辑模型则是子网管理的实质。 * * 从子网管理的逻辑模型也可以看出,子网管理涉及3个重要实体:子网管理器,子网管理代理,子网管理数据包。子网管理数据包是通信的基础。 * * * * 在子网的初始化,配置过程中,直接路由SMP起了很大的作用。 * 理解了SMA的对象模型,就很容易理解后面的OpenSM的对象模型。 * * * * 状态机最终要的是确保在一个稳定运行的子网中有且只有一个主SM。主SM的选择由SM的优先级和SM所在端口的GUID确定。 * SM的主要功能也就是子网管理中的几个关键问题。 * 子网探测包括初始化时子网拓扑的发现以及子网运行是检测拓扑改变。 * * 增加设备的过程和子网发现的过程有很多相似的地方。 * * * * * 这些特性是OpenSM项目网站上列出的,具体对应的版本可能与我分析的源代码版本不同。 * * * * * * * * * * * * Subnet类是OpenSM中保存子网信息的一个类,最重要的就是子网的拓扑信息。在Subnet类中保存了子网中所有CA,交换机,路由器的信息,以及这些节点的端口的连接信息(拓扑)。 子网的初始化和运行一个重要部分就是构造和维护Subnet类:子网启动以后,SM每发现一个设备,就构造一个对应的类,并将这个类加入到Subnet类中;子网运行过程中,SM也会根据子网的变化同步Subnet类,使得Subnet类中的拓扑和实际拓扑保持一致。 子网的配置也是根据Subnet类中保存的信息综合以后进行的,例如每个交换机的转发表就是根据Subnet中的拓扑信息生成的。 从外界获取程序运行所需的配置参数 创建各种数据结构,如日志对象,Opensm对象,sm对象,子网对象,以及用于保存程序运行信息的图表,如节点表,交换机表等。 初始化各对象,如根据参数设置对象属性,初始化相关的定时器,线程,信号等。 创建发送线程,接收线程,扫描线程,分配器工作线程等。 循环等待,直到程序遇到结束标志。 发现子网 分配LID 构造每个交换机的LID矩阵 构造每个交换机的转发表 将转发表分发到对应的交换机 将端口置为准备状态 将端口置为活动状态 发送一个直接路径长度为0的SMP,获取本地的节点信息。 发送直接路径长度为1的SMP,如果SM所在节点为CA或路由器,则只需要发送一个,如果节点为交换机,则需要构造多个SMP,每个SMP的直接路径为交换机的一个活动端口。 当收到响应时,判断响应节点是否是新设备,如果是新设备,则继续向外探测,直到没有新的设备发现为止(子网发现完成)。 向每个交换机发送包含Get方法的SMP,更新每个交换机的信息。 对于每个交换机的每个端口:如果端口的状态不是down,但是这个端口不指向一个端口,说明子网中新加入了设备,构造一个直接路由SMP(包含一段LID路由)获取这个端口连接的节点信息。 如果发现有交换机的端口状态发生改变(拓扑改变),程序会重新扫描整个网络。 扫描完成后,还会删除一些丢失的节点。 所有已分配的LID保存在PORT_LID_TBL表中,端口的GUID和LID的映射表保存在GUID_TO_LID_TBL表中。 若端口的GUID在GUID_TO_LID_TBL表中已经存在,则表明已经分配过LID,不需要再分配LID。 在PORT_LID_TBL中寻找一个足够大小的区间(如果LMC0,每一个端口需要分配多于一个LID),分配这一段LID,更新PORT_LID_TBL和GUID_TO_LID_TBL,然后设置端口的PORTINFO中的LID字段。 Minhop最小跳数算法(默认路由算法) Updn Up/down 算法 Ftree胖树算法 Lash算法 从文件中加载路由表 Dor算法 每个交换机对象中都存有一个LID MATRIX 对象,LID MATRIX中保存交换机从它的某个端口到达某个LID的最小距离 LID MATRIX中只表示交换机和交换机之间的连接,先忽略CA和路由器。 在OpenSM中LID MATRIX使用一个二维的hops[][]矩阵表示 路由算法分两步执行: 构造LID矩阵 build_lid_matrices 构造转发表 ucast_build_fwd_tables LID矩阵的内容在最初都是NO_PATH,即通过交换机的任何一个端口不能到达任何一个LID 交换机到达自身的端口0(管理端口)的LID的距离是0,交换机到达和自己相连的交换机的端口0的LID的距离是1. 交换机通过邻居交换机学习到更远的邻居的信息 类似于路由协议中的距离矢量算法,LID矩阵的构造需要经过若干次迭代才能达到稳定状态(收敛)。 Sw1的LID
文档评论(0)