Вам нужно принять два решения:
- Сколько времени вы хотите взять среднюю скорость передачи?
- Как часто вы хотите обновить / сообщить результат?
Напомним, что не существует такой вещи, как текущая мгновенная скорость передачи. Или, точнее, текущая мгновенная скорость передачи всегда равна либо полной физической скорости вашего сетевого интерфейса (например, 100 Мбит / с), либо нулю, в соответствии с ситуациями «есть пакет, отправляемый / получаемый в эту микросекунду» и «линия простаивает ". Так что вы должны в среднем.
В приведенном выше коде вы выбрали одну секунду в качестве значения для (1) и (2). (1) и (2) равенство является простейшим случаем для кода.
Я рекомендую вам выбрать более длительный период для (1). Усреднение всего за одну секунду обеспечит довольно резкую скорость передачи на всех передачах, кроме самых плавных. Например, учтите, что по умолчанию Cisco IOS занимает более 5 минут и не позволяет настраивать менее 30 секунд.
Для (2) вы можете продолжать использовать 1 секунду или, если хотите, даже менее одной секунды.
Выберите значение для (1), кратное значению, выбранному вами для (2). Пусть n
будет (1) делится на (2). Например, (1) составляет 10 секунд, (2) составляет 500 мс и n=20
.
Создать кольцевой буфер с n
записями. Каждый раз по истечении (2) замените самую старую запись в кольцевом буфере количеством байтов, переданных с момента истечения предыдущего времени (2), а затем пересчитайте скорость передачи в виде суммы всех записей в буфере, деленной на (1) .