2

我有一种方法可以在 SDN 中接收从交换机到泛光灯控制器的数据包,这意味着每个新的数据包都会触发此方法。我想用这种方法计算每秒的数据包。

这是我的尝试;它是正确的?

int CLoad,avergeLoad =0;
final String switchId = sw.getStringId();
        CLoad = CLoad + 1;
        avergeLoad = CLoad;
        loadTable.put(switchId, avergeLoad);
        ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(1);
        exec.scheduleAtFixedRate(new Runnable() 
               {
                public void run() 
                  {
                    avergeLoad =(avergeLoad + CLoad)/2;
                loadTable.put(switchId, avergeLoad);
                   CLoad=0;
                  }
               }, 40, 1000, TimeUnit.SECONDS); 
4

2 回答 2

2

您可以使用Metrics 仪表

仪表以几种不同的方式测量事件的发生率。平均速率是事件的平均速率。它通常对琐事有用,但由于它代表了应用程序整个生命周期的总速率(例如,处理的请求总数除以进程运行的秒数),它不提供新近感. 幸运的是,仪表还记录了三种不同的指数加权移动平均速率:1 分钟、5 分钟和 15 分钟移动平均线。

马文:

<dependency>
    <groupId>io.dropwizard.metrics</groupId>
    <artifactId>metrics-core</artifactId>
    <version>3.1.2</version>
</dependency>

示例代码:

//Setup the reporter
ConsoleReporter reporter = ConsoleReporter.forRegistry(metrics)
       .convertRatesTo(TimeUnit.SECONDS)
       .convertDurationsTo(TimeUnit.MILLISECONDS)
       .build();
   reporter.start(1, TimeUnit.SECONDS);

//Initialize Metrics Metter
final Meter getRequests = registry.meter(name(WebProxy.class, "get-requests", "requests"));

// Mark when event occurs
getRequests.mark();

参考:

  1. 入门
  2. 指标仪表
于 2015-11-24T05:37:00.613 回答
0

您可以使用 Openflowplugin 项目实施并根据您的需要进行调整。它包含一个统计管理器模块,可以获取有关流、端口、仪表、队列等的大量有用信息。

参考:https ://wiki.opendaylight.org/view/OpenDaylight_OpenFlow_Plugin:Statistics

于 2015-11-24T05:01:46.260 回答