Как рассчитать скорость сети: пропускная способность "goodput" или реальная пропускная способность? - PullRequest
0 голосов
/ 07 августа 2010

Я пытаюсь определить задержку и пропускную способность между сервером и различными клиентами в многоуровневой системе.Я полагаю, что самый простой элемент - это «хорошая производительность» или эффективная скорость на уровне приложений, но с задержкой немного сложнее разобраться, но все же сложнее истинная пропускная способность, которая включает «размер окна» и другие технические факторы.

Я ищу описание того, как наиболее точно рассчитать это с точки зрения клиента или сервера ... при условии, что я могу запустить сервер в Azure.

IЯ открыт (но не ограничиваюсь) использованием IIS для потоковой передачи серии байтов, службой WCF на основе TCP, но решение должно быть на основе .NET.

UPDATE

Я добавил награду к этому вопросу, поскольку там так много информации ... и, тем не менее, многое противоречит друг другу или имеет недостающие данные, особенно в реализации .NET.Меня больше всего интересует наличие двух реализаций C # или Silverlight.

Некоторые сетевые гуру сказали, что мне нужно учитывать «медленный старт» размера окна TCP.

Ответы [ 3 ]

0 голосов
/ 14 августа 2010

Я не хочу видеть, как хорошая награда тратится впустую, поэтому я попытаюсь ответить на свой вопрос, используя имеющуюся у меня информацию.

[ Задержка ]

Измерение фактической (на проводе) задержки и скорости с помощью Silverlight невозможно, поскольку у нас нет доступа к сокетам TCP и мы не можем получить доступ к таким низкоуровневым интерфейсам из песочницы.Это также убивает «TCP SlowStart». При этом можно определить задержку WCF и пропускную способность Goodput.

Служба WCF

2    using System;
3    using System.Net.NetworkInformation;
4    using System.Text;
5    
6    public class Service : IService
7    {
8        public bool PingNetwork()
9        {
10           return true;
11       }
12   }

А на стороне клиента:

   using System;
   using System.Windows;
   using System.Windows.Controls;
   using PingDemo.PingServiceReference;

   namespace PingDemo
   {
       public partial class MainPage : UserControl
       {
           private ServiceClient client = new ServiceClient();
           private DateTime PingStart = new DateTime();


       public MainPage()
       {
           InitializeComponent();

           client.PingNetworkCompleted += new EventHandler(client_PingNetworkCompleted);
       }

       void client_PingNetworkCompleted(object sender, PingNetworkCompletedEventArgs e)
       {
           if (e.Error == null && e.Cancelled == false)
           {
               MessageBox.Show("Ping Status: " + e.Result);
           }
       }

       private void btnPing_Click(object sender, RoutedEventArgs e)
       {
           if (client == null)
           {
               client = new ServiceClient();
           }

           PingStart = DateTime.UtcNow();
           client.PingNetworkAsync(txtHostIP.Text.Trim());
           TimeSpan Est_RoundTripTime = DateTime - PingStart;  //may need to look up exact syntax

       }
   }

}

[Загрузить загрузку]

Аналогично тому, как латентность определяется с помощью хоста службы WCF, скорость загрузки и загрузки может бытьоценивается путем загрузки известного (несжимаемого) набора данных клиенту и обратно.

В следующем блоге обсуждается подход для отправки больших данных через WCF.Это можно использовать для вычисления скорости, с которой данные отправляются / передаются, используя метод, аналогичный описанному выше.

http://kjellsj.blogspot.com/2007/02/wcf-streaming-upload-files-over-http.html

0 голосов
/ 14 августа 2010

Я некоторое время рассматривал методику, которая могла бы дать приличные результаты в отношении определения задержки.

Если клиент и сервер имеют синхронизированные часы с очень высокой точностью (по сравнению с обычным,источник задержки (то есть: time.nist.gov), просто отправка текущей метки времени на сервер клиенту позволила бы клиенту сравнить его местное время с временем сервера.Разница во временных метках может привести к задержке.

Это можно использовать в сочетании с большими «фиктивными» передачами файлов для определения задержки при длительной передаче и при разных нагрузках на сеть.

0 голосов
/ 08 августа 2010

Вы пробовали трассировку WCF и ведение журнала сообщений? Если вы включите трассировку и ведение журнала сообщений на службе, а также на клиентах, вы можете открыть все журналы в Просмотр трассировки службы и проверить всю сквозную информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...