Проблема с отправкой пакетов UDP на устройство под управлением Debian - PullRequest
0 голосов
/ 27 мая 2019

Я создаю простой отправитель и получатель UDP с использованием C ++, чтобы эмпирически проверить ограничения обмена дейтаграммами UDP между устройствами в локальной сети.
Ранее перечисленные простые приложения соответственно построены на следующих кодовых блоках:

sender.cpp

[...]
HiResTime start = std::chrono::high_resolution_clock::now();
for (int i = 0; i < 690 * clients; i++) {
  int bytes = sendto(sockFD, (const char*) buffer.data(), UDP_BUFFER_SIZE, 0, (const struct sockaddr*) &servAddrss, servAddrssLen);  // buffer is a std::vector...
}
HiResTime end = std::chrono::high_resolution_clock::now();
[...]

receiver.cpp

[...]
HiResTime start = std::chrono::high_resolution_clock::now();
HiResTime first;
while (n < N) {
  int descr = select(sockFD + 1, &s, NULL, NULL, &t);
  if (descr > 0) {
    if (n == 0) {
      first = std::chrono::high_resolution_clock::now();
    }
    assert(FD_ISSET(sockFD, &s));
    assert(descr == 1);
    int bytes = recvfrom(sockFD, (char*) buffer.data(), UDP_BUFFER_SIZE, 0, (struct sockaddr*) &addrss, &addrssLen);
    assert(bytes > 0);
    n++;
  } else {
    std::cout << "Timeout reached!" << '\n';
  }
  s = S;  // Reset fd_set...
  t = T;  // Reset struct timeval...
}
[...]

Для этого теста я использую ноутбук под управлением Debian и MacBook под управлением macOS Sierra.

Работая соответственно с получателем на MacBook и отправителем на ноутбуке Debian, все выглядит хорошо: кажется, что таким образом можно управлять ~ 22080 пакетами UDP в секунду.
С другой стороны, при запуске получателя на записной книжке Debian и отправителя на MacBook, кажется, что записная книжка Debian не может правильно принимать все пакеты (мне приходится многократно запускать отправителя, чтобы достичь порогового значения на сторона получателя).

Почему это происходит? Это связано с разным размером буфера, который система выделяет для отправки / получения пакетов? Если да, как я могу изменить размер системного буфера, чтобы улучшить производительность и избежать вышеупомянутой потери данных?

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