`
Iam42
  • 浏览: 272954 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Bcube拓扑生成方法研究

阅读更多

紧接上一篇,本周的试验中,如何为Bcube拓扑结构生成一个邻接矩阵,收工输入显然是不现实的,虽然Bcube拓扑的节点规模不是很大,但是怎么说也有好几千个。然后我就想利用Bcube递归定义的特点来生成一个拓扑关系,但是没想出来。哪位大神有过类似的工作请联系我...再然后,我发现Bcube是一个规整的结构。可以推导出一个纯数学的公式,来算出节点间的拓扑关系,下面的代码以Bcube(4,3)为例。

Bcube中,server有1024个,switch分为4层,每层256个,一共也是1024个,每个switch都连接4个server。具体见下面的代码

public class BcubeBuilder {
	/**
	 * @param args
	 * @throws FileNotFoundException 
	 */
	public static void main(String[] args) throws Exception {
		Server[] Allser = new Server[1024];
		for(int i = 0 ; i < 1024 ; i++){
			Server ser = new Server();
			ser.name = i+"";			
			Allser[i] = ser;
		}
		
		Switches[] Allsw = new Switches[1024];
		for(int i = 0 ; i < 1024 ; i++){
			Switches sw = new Switches();
			sw.name = i+"";
			Allsw[i] = sw;
		}
		
		//第一层交换机
		for(int i=0 ; i<1024 ; i++){
			Allser[i].relate.add(i/4+"");
			Allsw[i/4].related.add(i+"");
		}
		
		//第二层交换机(b1)
		int ser = 0 , swit = 0;
		while(ser<=1008){
			for(int i = 0 ; i<16 ; i++){
					Allser[ser+i].relate.add(256+swit+i%4+"");
					Allsw[256+swit+i%4].related.add(ser+i+"");
				}
				ser = ser+16;
				swit = swit+4;
			}
		
		
		//第三层交换机(b2)
		ser = 0;
		swit = 0;
		while(ser<=1008){
			for(int i=0 ; i<64 ; i++){
				Allser[ser+i].relate.add(512+swit+i%16+"");
				Allsw[512+swit+i%16].related.add(ser+i+"");
			}
			ser = ser+64;
			swit = swit+16;
		}
		
		//第三层交换机(b3)
		ser = 0;
		swit = 0;
		while(ser<=1008)
		{
			for(int i=0 ; i<256 ; i++){
				Allser[ser+i].relate.add(512+256+swit+i%64+"");
				Allsw[512+256+swit+i%64].related.add(ser+i+"");
			}
			ser = ser+256;
			swit = swit+64;
		}
	
		
		OutputStream iwrite = new FileOutputStream("Bcube44.properties"); 
		Properties pwrite = new Properties();
		String key = "";
		String value = "";
		for(int i=0 ; i<1024 ; i++){
			key = "r-"+Allser[i].name;
			value = "";
			//System.out.println(Allser[i].relate.size());
			for(int j=0 ; j<Allser[i].relate.size() ; j++){
				value+="h-"+Allser[i].relate.get(j)+","; 
			}
			pwrite.put(key,value.substring(0, value.length()-1));
		}
		
		key = "";
		for(int i=0 ; i<1024 ; i++){
			key = "h-"+Allsw[i].name;
			value = "";
			for(int j=0 ; j<Allsw[i].related.size() ; j++){
				value+="r-"+Allsw[i].related.get(j)+",";
			}
			pwrite.put(key, value.substring(0, value.length()-1));
		}
		
		
		pwrite.store(iwrite, "set");
	}

}

 

生成的邻接矩阵,我是用一个properties文件存储的,如有需要,请留下邮箱

分享到:
评论
1 楼 WeaponLin 2017-05-08  
您好,weaponlin.com@gmail.com是我的邮箱,麻烦发一下properties文件,谢谢了

相关推荐

Global site tag (gtag.js) - Google Analytics