Может ли быстродействие программы зависеть от ОС?

Любые разговоры которые хоть как-то связаны с тематикой форума

Модератор: Модераторы разделов

MiK13
Сообщения: 1245
ОС: Linux Debian

Может ли быстродействие программы зависеть от ОС?

Сообщение MiK13 »

Понадобилось сделать имитатор одного устройства. Выдаёт пары UDP пакетов.
Надо задавать скорость, с которой выдаются эти пары. Сделал это через задержки. Примерно так:

Код: Выделить всё

  sendto(fd,&buf1,len1...
  usleep(delay1);
  sendto(fd,&buf2,len2...
  usleep(delay2);
Значения delay1 и delay2 задаются через опцию.
И ещё надо добавлять шум в эти сигналы. Он задаётся через опцию -N:

Код: Выделить всё

case 'N': nois2=(nois=atoi(optarg))/2; break;
И реализован примерно так:

Код: Выделить всё

    if(nois) {
      for(i=0;i<n;i++)
        buf[i]+=(random()%nois-nois2);
    }
Шум добавляется перед отправкой пакета в сеть.
Программа, принимающая эти пакеты, считает их число за секунду и таким образом можно контролировать скорость передачи.

Сначала я запускал программу имитации на ноутбуке (Debian 11, процессор Ryzen 5 3500U)
Потом перенесли эту программу на стационарный компьютер (Ubuntu Jammy Jellyfish, процессор i5 13400)
Странность.
Если запускаю программу на ноутбуке, скорость получается (в парах пакетов в секунду) примерно 2450 без шума и 2150 с шумом)
А если запускаю на стационарном (который, по идее, мощнее), то получается примерно 2750 без шума и 1750 с шумом,
Кто "виноват" в том, что добавление шума на более мощном компьютере снижает быстродействие программы гораздо больше?
Начальник предположил, что Ubuntu. Но мне это кажется странным.
Спасибо сказали:
Аватара пользователя
devilr
Сообщения: 3692
ОС: Mandriva => Gentoo (~amd64)

Re: Может ли быстродействие программы зависеть от ОС?

Сообщение devilr »

Ну, реализация сетевых штук на оффтопике весьма своеобразна. Они как выбрали свой "особый" путь, так и идут по нему. Так что начальник может и прав.
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Эхо разума
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21235
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Может ли быстродействие программы зависеть от ОС?

Сообщение Bizdelnick »

Параметры планировщика ядра могут влиять вполне. usleep() ведь вернётся не ровно через указанное время, а чуть позже, когда планировщик соизволит передать управление процессу. Чем меньше задержка, тем больше относительная погрешность. А в Ubuntu и Debian не то что параметры, а вообще реализации планировщика могут разные использоваться.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
MiK13
Сообщения: 1245
ОС: Linux Debian

Re: Может ли быстродействие программы зависеть от ОС?

Сообщение MiK13 »

То, что usleep() вернёт не ровно через указанное время, а чуть позже, это понятно.
Меня смущает другое.
Десктопный 13400 от Intel побыстрее, чем ноутбучный 3500U от AMD. Что видно по более быстрому формированию и передаче пакетов.
Но когда я добавляю в значению сигнала шум через random(), то почему-то на ноутбуке скорость падает меньше и он начинает обгонять.
Может быть в Debian и в Ubuntu эта функция реализована по-разному?
Кстати, а как она вообще реализована?
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21235
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Может ли быстродействие программы зависеть от ОС?

Сообщение Bizdelnick »

MiK13 писал:
04.10.2024 22:26
Но когда я добавляю в значению сигнала шум через random(), то почему-то на ноутбуке скорость падает меньше и он начинает обгонять.
Может быть в Debian и в Ubuntu эта функция реализована по-разному?
Напишите бенчмарк и проверьте, чего гадать. Разные версии glibc, разные опции её сборки, оптимизированные версии под конкретное железо, конечно, могут сказываться.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
MiK13
Сообщения: 1245
ОС: Linux Debian

Re: Может ли быстродействие программы зависеть от ОС?

Сообщение MiK13 »

Сейчас подумал, что надо написать простейшую программу, которая будет вызывать функцию random очень много раз.
И запустить её на разных компьютерах и под разными системами.
Сделаю это в понедельник.
Спасибо сказали:
Аватара пользователя
44616e
Сообщения: 210
ОС: Debian testing

Re: Может ли быстродействие программы зависеть от ОС?

Сообщение 44616e »

MiK13 писал:
04.10.2024 22:55
Сделаю это в понедельник.
Как успехи?
Спасибо сказали:
MiK13
Сообщения: 1245
ОС: Linux Debian

Re: Может ли быстродействие программы зависеть от ОС?

Сообщение MiK13 »

44616e писал:
21.10.2024 16:10
Как успехи?
Написал простую программу:

Код: Выделить всё

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

struct timespec t0,t1;
long *v,dt,i;
size_t n=1000000;
double tr;

int main(int argc, char **argv) {
  if(argc>1) n=atoi(argv[1]);
  v=malloc(n*sizeof(v[0]));
  clock_gettime(0,&t0);
  for(i=0;i<n;i++) v[i]=random();
  clock_gettime(0,&t1);
  dt=(t1.tv_sec-t0.tv_sec)*1000000000+(t1.tv_nsec-t0.tv_nsec);
  printf("for %ld dt = %ld\n",n,dt);
  tr=(double)dt/n;
  printf(" tr = %f\n",tr);
}
В цикле вызывается функция random() заданное число раз (по умолчанию миллион)
Фиксируется время до и после цикла. И потом делится разность на число циклов.
На моём рабочем компьютере (AMD Ryzen 5 5600G) время выполнения цикла около 4.9 нс (если задать миллиард) При миллионе от 5.3 до 5.9
На ноутбуке (AMD Ryzen 5 3500U, Debian 11) при миллионе обычно 16-18. Но иногда бывает 9.
При миллиарде выдало сейчас 9.19 и 9.996 нс.
Проверил на другом компьютере (i5-13400, Ubuntu) примерно 12.6-12.7 нс и при миллиарде, и при 100 миллионах.
Впечатление, что на ноутбучном 3500U random() считается чуть быстрее, чем на i5-13400.

На компьютере Zynq с процессором Cortex A9 эта функция выполняется примерно 445 нс (миллион циклов)
Спасибо сказали: