crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> фактическое время отправки и приема сокета
borune
  опции профиля:
сообщение 9.12.2013, 11:06
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 152
Регистрация: 1.1.2011
Пользователь №: 2314

Спасибо сказали: 0 раз(а)




Репутация:   0  


Ребят, вопрос такой: можно ли как-либо программно определить фактическое время отправки и приема сокета?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
gormih
  опции профиля:
сообщение 9.12.2013, 11:20
Сообщение #2


Студент
*

Группа: Новичок
Сообщений: 15
Регистрация: 22.9.2011
Пользователь №: 2901

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(borune @ 9.12.2013, 12:06) *
Ребят, вопрос такой: можно ли как-либо программно определить фактическое время отправки и приема сокета?

Для начала определимся с терминологией: Что Вы понимаете под отправкой и приемом сокета? Имеется в виду отдельно взятого пакета?

Вообще есть такие события как bytesWritten и readyRead

и функции waitForBytesWritten()
bytesAvailable(), которые можно использовать при пересылке/ приему пакета, с использованием QTimer как вариант.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
borune
  опции профиля:
сообщение 9.12.2013, 13:53
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 152
Регистрация: 1.1.2011
Пользователь №: 2314

Спасибо сказали: 0 раз(а)




Репутация:   0  


Время отправки и приема это моменты времени, в которые данные поступили непосредственно в передатчик и приемник сетевой карты. Варианты типа
socket->write(data);
socket->waitForBytesWritten();
QTime time = QTime::currentTime();

очевидны, и я бы не стал из-за этого беспокоить многоуважаемых господ. Я имел ввиду средства самого сокета. Как, например, те, которые применяются при реализации протокола PTP.

Немного поясню, почему варианты, подобные приведенному, мне не подходят. Дело в том, что мне требуется провести исследование сети. Под этим подразумевается вычисление скоростей передачи, пропускной способности и других характеристик. Сами понимаете, что тут нужна как можно бОльшая точность. Если не найду других вариантов, придется писать конструкции, подобные приведенной. Но хотелось бы, конечно, чего-то поточнее.

Сообщение отредактировал borune - 9.12.2013, 15:23
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Majestio
  опции профиля:
сообщение 9.12.2013, 16:40
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 67
Регистрация: 13.2.2013
Пользователь №: 3710

Спасибо сказали: 1 раз(а)




Репутация:   1  


Цитата(borune @ 9.12.2013, 13:53) *
Немного поясню, почему варианты, подобные приведенному, мне не подходят. Дело в том, что мне требуется провести исследование сети. Под этим подразумевается вычисление скоростей передачи, пропускной способности и других характеристик. Сами понимаете, что тут нужна как можно бОльшая точность. Если не найду других вариантов, придется писать конструкции, подобные приведенной. Но хотелось бы, конечно, чего-то поточнее.


Учитывая что сетевая инфраструктура определяется моделью ISO/OSI, следует выбирать, что же вы хотите тестировать. Если хотите на приикладном уровне (т.е. с учетом работы прикладных протоколов), это ниша TCP/UDP, возможно ICMP. Если хотите на более низком уровне, нужно смотреть в сторону написания и использования пакетных или NDIS драйверов. В случае использования последних, естественно точность будет выше. Но, имхо, именно реальную картину вы не получите, т.к. не будут так значимо влияние самой операционной системы.


Поглядите повнимательнее в сторону "сырых сокетов" - возможно это то, что подойдет.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 9.12.2013, 22:22
Сообщение #5


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


даже если написать драйвер,точного времени отправки не получишь. у карты есть свои буферы сообщений и система, вообще говоря, не моментально передаёт данные из драйвера в девайс.
я не очень понимаю смысл такой точности. для юзера всегда важна прикладная часть: скорость обмена, которую он реально может получить. а не какие-то теоретические микросекунды. теоретические указаны в параметрах самой карты - 100Мбит, 1000Мбит и тд. сеть пропускает с максимальной пропускной способностью самого слабого звена. так что в теории тут и измерять ничего не нужно. но по факту таких скоростей никто не достигает, всё зависит от размера пакетов, от загруженности системы, от многих факторов.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
gormih
  опции профиля:
сообщение 9.12.2013, 23:41
Сообщение #6


Студент
*

Группа: Новичок
Сообщений: 15
Регистрация: 22.9.2011
Пользователь №: 2901

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Iron Bug @ 9.12.2013, 23:22) *
даже если написать драйвер,точного времени отправки не получишь. у карты есть свои буферы сообщений и система, вообще говоря, не моментально передаёт данные из драйвера в девайс.
я не очень понимаю смысл такой точности. для юзера всегда важна прикладная часть: скорость обмена, которую он реально может получить. а не какие-то теоретические микросекунды. теоретические указаны в параметрах самой карты - 100Мбит, 1000Мбит и тд. сеть пропускает с максимальной пропускной способностью самого слабого звена. так что в теории тут и измерять ничего не нужно. но по факту таких скоростей никто не достигает, всё зависит от размера пакетов, от загруженности системы, от многих факторов.

До некоторой степени точные данные можно было бы получить используя например низкоуровневые функции в Linux (работая по сути на уровне ядра системы) - но это уже далеко не QT и его сокеты :-)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
borune
  опции профиля:
сообщение 10.12.2013, 9:00
Сообщение #7


Участник
**

Группа: Участник
Сообщений: 152
Регистрация: 1.1.2011
Пользователь №: 2314

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Iron Bug @ 9.12.2013, 22:22) *
я не очень понимаю смысл такой точности. для юзера всегда важна прикладная часть: скорость обмена, которую он реально может получить. а не какие-то теоретические микросекунды.

Программа будет использоваться для тестирования не какой-то домашней, а специализированной вычислительной сети, где частоты обмена сообщениями достигают нескольких кГц. А это значит, что задержки должны быть меньше миллисекунды. Именно поэтому нужна такая точность.
Цитата(gormih)
До некоторой степени точные данные можно было бы получить используя например низкоуровневые функции в Linux (работая по сути на уровне ядра системы)

То есть кроссплатформенности тут достигнуть, по всей видимости, не удастся? А что за функции?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 10.12.2013, 9:04
Сообщение #8


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


Цитата(gormih @ 10.12.2013, 2:41) *
До некоторой степени точные данные можно было бы получить используя например низкоуровневые функции в Linux (работая по сути на уровне ядра системы) - но это уже далеко не QT и его сокеты :-)

это выше уровня драйвера. и всё равно не даст точности. сеть работает с хардварными протоколами и там свои буферы и свои методы распределения нагрузки. плюс у системы TCP стек.
под линюксом это работает, безусловно, быстрее. но всё равно никто не гарантирует моментальную доставку пакета. более того, пакет внутри сети может гонять кругами, пока его не примет нужный адресат. так что в целом загрузка сети - понятие довольно размытое.
если кому интересно, детально почитать можно здесь, например:
http://www.soslan.ru/tcp/tcp20.html

Сообщение отредактировал Iron Bug - 10.12.2013, 9:07
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 10.12.2013, 13:57
Сообщение #9


Активный участник
***

Группа: Участник
Сообщений: 393
Регистрация: 29.6.2009
Пользователь №: 862

Спасибо сказали: 36 раз(а)




Репутация:   7  


Дело в том, что PTP протокол работает обычно в системах с реалтайм ОС (или вообще без ОС), где можно получить точность до микросекунд и выше (например внутри самих коммутаторов и пр.). Т.е., это как-бы хардварная вещь.

Я бы порекомендовал делать "тестилку" сети на базе какой нить Embedded платы, которая будет сама все делать, накапливать статистику и пр. А твое приложение на PC просто бы запрашивало инфу или управляло этой Embedded платкой. Но это все кустарщина.. :)

По-хорошему для этих целей используют промышленные коммутаторы и пр. оборудование с аппаратной поддержкой PTP. Т.е. если твоя сеть (ЦОД или что-там) оборудована такими коммутаторами - то ты можешь запрашивать эту статистику из них напрямую через WEB или как-нить еще.


Но если очень надо писать программулину - то ты можешь посмотреть как PTP реализован например в ptpd проекте: http://ptpd.sourceforge.net/

ИМХО, самые мелкие издержки будет давать UDP и может тебе удастся обеспечить точность порядка десятков миллисекунд...

Сообщение отредактировал kuzulis - 10.12.2013, 14:00
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
borune
  опции профиля:
сообщение 10.12.2013, 16:33
Сообщение #10


Участник
**

Группа: Участник
Сообщений: 152
Регистрация: 1.1.2011
Пользователь №: 2314

Спасибо сказали: 0 раз(а)




Репутация:   0  


Ну PTP я привел просто в пример. Там используется поле сокета, с названием могу обмануть, но что-то типа O_TIMESTAMP. В это поле хардварно прописывается время приема сокета самим сетевым контроллером. Если контроллер не поддерживает такую запись, то PTP никак не реализуешь. У меня будут какие-то железки, параметров которых я в данный момент не знаю, если будут такие контроллеры - соберу ptpd и дело с концом. Сейчас отлаживаю под виндами, на них таких карт нету, соответственно, PTP заюзать не могу.

Собсна, вопрос главный был таков, можно ли как-то реализовать что-то существенно лучшее, чем в примере из трех строчек, который я привел.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.1.2025, 5:01