紧接上一篇,本周的试验中,如何为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文件存储的,如有需要,请留下邮箱