Программа измерения полосы пропускания очереди System V

Программа измерения полосы пропускания очереди System V

В листинге А.7 приведен текст функции main, измеряющей полосу пропускания очередей сообщений System V, а в листинге А.8 текст функций reader и writer.

Листинг А.7. Функция main для измерения полосы пропускания очереди сообщений System V

//bench/bw_svmsg.c

1  #include "unpipc.h"

2  void reader(int, int, int);

3  void writer(int, int);

4  struct msgbuf *buf;

5  int totalnbytes, xfersize;

6  int

7  main(int argc, char **argv)

8  {

9   int i, nloop, contpipe[2], msqid;

10  pid_t childpid;

11  if (argc != 4)

12   err_quit("usage: bw_svmsg <#loops> <#mbytes> <#bytes/write>");

13  nloop = atoi(argv[1]);

14  totalnbytes = atoi(argv[2]) * 1024 * 1024;

15  xfersize = atoi(argv[3]);

16  buf = Valloc(xfersize);

17  Touch(buf, xfersize);

18  buf->mtype = 1;

19  Pipe(contpipe);

20  msqid = Msgget(IPC_PRIVATE, IPC_CREAT | SVMSG_MODE);

21  if ((childpid = Fork()) == 0) {

22   writer(contpipe[0], msqid); /* дочерний процесс */

23   exit(0);

24  }

25  Start_time();

26  for (i = 0; i < nloop; i++)

27   reader(contpipe[1], msqid, totalnbytes);

28  printf("bandwidth: %.3f MB/sec ",

29  totalnbytes / Stop_time() * nloop);

30  kill(childpid, SIGTERM);

31  Msgctl(msqid, IPC_RMID, NULL);

32  exit(0);

33 }

Листинг А.8. Функции reader и writer

//bench/bw_svmsg.c

34 void

35 writer(int contfd, int msqid)

36 {

37  int ntowrite;

38  for (;;) {

39   Read(contfd, &ntowrite, sizeof(ntowrite));

40   while (ntowrite > 0) {

41    Msgsnd(msqid, buf, xfersize – sizeof(long), 0);

42    ntowrite –= xfersize;

43   }

44  }

45 }

46 void

47 reader(int contfd, int msqid, int nbytes)

48 {

49  ssize_t n;

50  Write(contfd, &nbytes, sizeof(nbytes));

51  while ((nbytes > 0) &&

52   ((n = Msgrcv(msqid, buf, xfersize – sizeof(long), 0, 0)) > 0)) {

53   nbytes –= n + sizeof(long);

54  }

55 }

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

System.DateTime и System.TimeSpan

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

System.DateTime и System.TimeSpan В завершение нашего обзора базовых типов данных позволите обратить ваше внимание на то, что пространство имен System определяет несколько полезных типов данных, для которых в C# не предусмотрено ключевых слов. Это, в частности, типы DateTime и TimeSpan (задачу


Базовые классы System.MulticastDelegate и System.Delegate

Из книги UNIX: взаимодействие процессов автора Стивенс Уильям Ричард

Базовые классы System.MulticastDelegate и System.Delegate Таким образом, при создании типов c помощью) ключевого слова delegate в C# вы неявно объявляете тип класса, являющегося производным от System.MulticastDelegate. Этот класс обеспечивает своим потомкам доступ к списку с адресами тех методов, которые


ГЛАВА 6 Очереди сообщений System V

Из книги TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) автора Фейт Сидни М

ГЛАВА 6 Очереди сообщений System V 6.1. Введениеы Каждой очереди сообщений System V сопоставляется свой идентификатор очереди сообщений. Любой процесс с соответствующими привилегиями (раздел 3.5) может поместить сообщение в очередь, и любой процесс с другими соответствующими


Результаты измерения полосы пропускания сообщений

Из книги Визуальное моделирование электронных схем в PSPICE автора Хайнеманн Роберт

Результаты измерения полосы пропускания сообщений В табл. А.2 приведены результаты измерений на компьютере Sparc под управлением Solaris 2.6, а на рис. А.1 — график этих результатов.Как мы и предполагали, полоса пропускания увеличивается с размером сообщения. Поскольку во многих


А.З. Измерение полосы пропускания: программы

Из книги Бесплатные разговоры через Интернет автора Фрузоров Сергей

А.З. Измерение полосы пропускания: программы В этом разделе приведены тексты трех программ, измеряющих полосу пропускания каналов, очередей сообщений Posix и System V. Результаты работы этих программ приведены в табл. А.2 и


Измерение полосы пропускания канала

Из книги автора

Измерение полосы пропускания канала На рис. А.7 приведена схема описываемой программы. Рис. А.7. Схема программы измерения полосы пропускания каналаВ листинге А.1 приведен текст первой половины программы bw_pipe, измеряющей полосу пропускания канала.Листинг А.1. Функция main,


Измерение полосы пропускания очереди сообщений Posix

Из книги автора

Измерение полосы пропускания очереди сообщений Posix В листинге А.5 приведена функция main программы, измеряющей полосу пропускания очереди сообщений Posix. Листинг А.6 содержит функции reader и writer. Эта программа устроена аналогично предыдущей, измерявшей полосу пропускания


Программа измерения полосы пропускания дверей

Из книги автора

Программа измерения полосы пропускания дверей Программа измерения полосы пропускания интерфейса дверей сложнее, чем предыдущие, поскольку нам нужно вызвать fork перед созданием двери. Родительский процесс создает дверь и с помощью канала оповещает дочерний процесс о


Программа определения полосы пропускания Sun RPC

Из книги автора

Программа определения полосы пропускания Sun RPC Поскольку вызовы процедур в Sun RPC являются синхронными, для них действует то же ограничение, что и для дверей (см. выше). В данном случае проще создать две программы (клиент и сервер), поскольку они создаются автоматически


Программа измерения задержки канала

Из книги автора

Программа измерения задержки канала Программа для измерения задержки канала приведена в листинге А.14.Листинг А.14. Программа измерения задержки канала//bench/lat_pipe.c1  #include "unpipc.h"2  void3  doit(int readfd, int writefd)4  {5   char c;6   Write(writefd, &c, 1);7   if (Read(readfd, &c, 1) != 1)8    err_quit("read error");9 


Программа измерения задержки очередей сообщений Posix

Из книги автора

Программа измерения задержки очередей сообщений Posix Пpoгрaммa измерения задержки для очередей сообщений Posix приведена в листинге А.15.Листинг А. 15. Программа измерения задержки для очереди сообщений Posix//bench/lat_pxmsg.с1  #include "unpipc.h"2  #define NAME1 "lat_pxmsg1"3  #define NAME2 "lat_pxmsg2"4  #define MAXMSG 4 /*


Программа измерения задержки интерфейса дверей

Из книги автора

Программа измерения задержки интерфейса дверей Пpoгрaммa измерения задержки для интерфейса дверей дана в листинге А.17. Дочерний процесс создает дверь и связывает с ней функцию server. Родительский процесс открывает дверь и вызывает door_call в цикле. В качестве аргумента


Программа измерения времени задержки Sun RPC

Из книги автора

Программа измерения времени задержки Sun RPC Для измерения времени задержки Sun RPC мы напишем две программы: клиент и сервер, аналогично измерению полосы пропускания. Мы используем старый файл спецификации RPC, но на этот раз клиент вызывает нулевую процедуру сервера.


6.20.1 Полоса пропускания

Из книги автора

6.20.1 Полоса пропускания IP эффективно использует полосу пропускания. Датаграммы помещаются в очередь для пересылки в точку следующего попадания, как только станет доступна полоса пропускания (bandwidth; по традиции мы будем использовать термин "полоса пропускания", хотя


12.1. Эффективная полоса пропускания

Из книги автора

12.1. Эффективная полоса пропускания Прежде всего, используя указанные в журнале Elektor значения, определим путем моделирования эффективную 3-dB-полосу пропускания при выходной мощности 35 Вт и сопротивлении нагрузки RH равном 8 Ом.Возможно, некоторым незнакомо понятие


Полоса пропускания канала

Из книги автора

Полоса пропускания канала Следующая вкладка диалогового окна настроек (рис. 4.20) называется Bandwidth (Ширина звукового канала). Если у вас низкоскоростной Интернет, то настройка этого параметра для вас особенно важна. Например, когда вы используете IP-телефонию и одновременно