我正在使用可以在http://bccd.net/下载的 BCCD(可启动集群 CD)将其设置为集群的 24 台计算机上试验我的分布式集群算法(使用 MPI 实现)。
我编写了一个批处理程序来运行我的实验,其中包括多次运行我的算法,改变节点的数量和输入数据的大小。
我想知道每次运行我的算法时在 MPI 通信中使用的数据量,这样我就可以看到在改变前面提到的参数时数据量是如何变化的。我想使用批处理程序自动完成所有这些。
有人告诉我使用 tcpdump,但我发现这种方法有些困难。
首先,在每次运行我的算法之前,我不知道如何在我的批处理程序中调用 tcpdump(它是用 C++ 编写的,使用命令系统进行调用),因为 tcpdump 需要另一个终端与我的应用程序并行运行。由于网络使用交换机,我无法在另一台计算机上运行 tcpdump。所以我需要在主节点上运行它。
其次,我在进行实验时看到了 tcpdump 的流量,但我无法弄清楚 MPI 使用的端口是什么。它似乎使用了许多端口。我想知道用于过滤包。
第三,我尝试捕获整个包并使用 tcpdump 将其保存到一个文件中,几秒钟后该文件为 3.5MB。但我的整个实验需要 2 天。因此,如果我遵循这种方法,最终的日志文件将会很大。
理想的方法是仅捕获包标头中的大小字段并将其相加以获得传输的数据总量。这样,日志文件将比我捕获整个包时小得多。但我不知道该怎么做。
另一个限制是我无法访问计算机光盘。所以我只有内存和我的 4GB USB 闪存驱动器。所以我不能有巨大的日志文件。
我已经考虑过使用一些 MPI 跟踪或分析工具,例如http://www.open-mpi.org/faq/?category=perftools中提到的那些。到目前为止,我只测试了 Sun Performance Analyzer。问题是我想在 BCCD 上安装这些工具会很困难,甚至可能是不可能的。除此之外,这个工具将使我的实验需要更长的时间才能结束,因为它会增加开销。但如果有人熟悉 BCCD 并认为使用其中一种工具是一个不错的选择,请告诉我。
希望有人有解决方案。