Программа измерения задержки канала
Программа измерения задержки канала
Программа для измерения задержки канала приведена в листинге А.14.
Листинг А.14. Программа измерения задержки канала
//bench/lat_pipe.c
1 #include "unpipc.h"
2 void
3 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 }
10 int
11 main(int argc, char **argv)
12 {
13 int i, nloop, pipe1[2], pipe2[2];
14 char c;
15 pid_t childpid;
16 if (argc != 2)
17 err_quit("usage: lat_pipe <#loops>");
18 nloop = atoi(argv[1]);
19 Pipe(pipe1);
20 Pipe(pipe2);
21 if ((childpid = Fork()) == 0) {
22 for(;;) { /* дочерний процесс */
23 if (Read(pipe1[0], &c, 1) != 1)
24 err_quit("read error");
25 Write(pipe2[1], &c, 1);
26 }
27 ехit(0);
28 }
29 /* родительский процесс */
30 doit(pipe2[0], pipe1[1]);
31 Start_time();
32 for (i = 0; i < nloop; i++)
33 doit(pipe2[0], pipe1[1]);
34 printf("latency: %.3f usec ", Stop_time() / nloop);
35 Kill(childpid, SIGTERM);
36 exit(0);
37 }
Функция doit
2-9 Эта функция запускается родительским процессом. Мы измеряем время ее работы. Она помещает 1 байт в канал, из которого читает дочерний процесс, и считывает 1 байт из другого канала, в который сообщение помещается дочерним процессом. При этом измеряется именно то, что мы назвали задержкой, — время передачи небольшого сообщения туда и обратно.
Создание каналов
19-20 Создаются два канала, после чего вызов fork порождает дочерний процесс. При этом образуется схема, изображенная на рис. 4.6 (но без закрытия неиспользуемых дескрипторов каналов). Для этого теста требуются два канала, поскольку каналы являются односторонними, а мы хотим передавать сообщение в обе стороны.
Дочерний процесс отсылает обратно сообщение
22-27 Дочерний процесс представляет собой бесконечный цикл, в котором однобайтовое сообщение считывается и отсылается обратно.
Измерение времени работы родительского процесса
29-34 Родительский процесс вызывает функцию doit для отправки однобайтового сообщения дочернему процессу и получения ответа. После этого мы имеем гарантию, что оба процесса выполняются. Затем функция doit вызывается в цикле с измерением времени задержки.
На компьютере Sparc под управлением Solaris 2.6 при запуске программы пять раз подряд мы получим вот что:
solaris % lat_pipe 10000
latency: 278.633 usec
solaris % lat_pipe 10000
latency: 397.810 usec
solaris % lat_pipe 10000
latency: 392.567 usec
solaris % lat_pipe 10000
latency: 266.572 usec
solaris % lat_pipe 10000
latency: 284.559 usec
Среднее для пяти попыток составляет 324 микросекунды, и именно это значение приведено в табл. А.1. Это время учитывает два переключения контекста (от родительского процесса к дочернему и обратно), четыре системных вызова (write, read, write, read) и затраты на передачу 1 байта данных по каналу.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Короткие задержки
Короткие задержки Иногда коду ядра (и снопа обычно драйверам) необходимы задержки на очень короткие интервалы времени (короче, чем период системного таймера), причем интервал должен отслеживаться с достаточно высокой точностью. Это часто необходимо для синхронизации с
Флаги канала
Флаги канала Когда мы вначале книги изучали сервер (в параграфе «Сервер»), мы упомянули, что функция ChannelCreate() принимает параметр flags (флаги); правда, тогда мы вместо этого параметра передавали нуль.Теперь пришло время более подробно изучить назначение параметра flags.
9.5.8. Ограничение канала
9.5.8. Ограничение канала При организации доступа в Интернет очень часто требуется отдельным пользователям обеспечить большую скорость подключения. Как это сделать, когда по умолчанию все равноправны и могут работать на максимально доступной на данный момент скорости?
15.7. Разделение канала
15.7. Разделение канала Допустим, вам нужно настроить прокси-сервер таким образом, чтобы одна группа компьютеров могла работать с одной скоростью, а другая — с другой. Это может потребоваться, например, для разграничения пользователей, которые используют канал для работы,
Настройка канала RSS
Настройка канала RSS Ранее в этой главе рассказывалось о том, как управлять оповещениями, которые являются отправляемыми по электронной почте уведомлениями о том, что содержимое списка или библиотеки SharePoint изменилось. Новая функция Outlook 2007 – поддержка каналов RSS (Really Simple
Результаты измерения задержки
Результаты измерения задержки В табл. А.1 приведены значения задержки в Solaris 2.6 и Digital Unix 4.0B.Таблица А.1. Задержка при передаче сообщения размером 1 байт (в микросекундах) Канал Очередь сообщений Posix Очередь сообщений System V Двери Sun RPC TCP Sun RPC UDP Сокет TCP Сокет UDP Доменный
Программа измерения полосы пропускания очереди System V
Программа измерения полосы пропускания очереди System V В листинге А.7 приведен текст функции main, измеряющей полосу пропускания очередей сообщений System V, а в листинге А.8 —текст функций reader и writer.Листинг А.7. Функция main для измерения полосы пропускания очереди сообщений System
Программа измерения полосы пропускания дверей
Программа измерения полосы пропускания дверей Программа измерения полосы пропускания интерфейса дверей сложнее, чем предыдущие, поскольку нам нужно вызвать fork перед созданием двери. Родительский процесс создает дверь и с помощью канала оповещает дочерний процесс о
А.4. Измерение задержки передачи сообщений: программы
А.4. Измерение задержки передачи сообщений: программы Приведем текст трех программ, измеряющих задержку при передаче сообщений по каналам, очередям Posix и очередям System V. Данные о производительности, полученные с их помощью, приведены в табл.
Программа измерения задержки очередей сообщений 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 /*
Измерение задержки очередей сообщений System V
Измерение задержки очередей сообщений System V В листинге А.16 приведен текст программы измерения времени задержки для очередей сообщений System V.Листинг А.16. Программа измерения времени задержки для очередей сообщений System V//bench/lat_svmsg.c1 #include "unpipc.h"2 struct msgbuf p2child = { 1, { 0 } }; /* type = 1
Программа измерения задержки интерфейса дверей
Программа измерения задержки интерфейса дверей Пpoгрaммa измерения задержки для интерфейса дверей дана в листинге А.17. Дочерний процесс создает дверь и связывает с ней функцию server. Родительский процесс открывает дверь и вызывает door_call в цикле. В качестве аргумента
Программа измерения времени задержки Sun RPC
Программа измерения времени задержки Sun RPC Для измерения времени задержки Sun RPC мы напишем две программы: клиент и сервер, аналогично измерению полосы пропускания. Мы используем старый файл спецификации RPC, но на этот раз клиент вызывает нулевую процедуру сервера.
7.7. Выполнение задач после задержки с помощью GCD
7.7. Выполнение задач после задержки с помощью GCD Постановка задачи Требуется выполнить код, но после определенной задержки. Задержку планируется указывать с помощью
Стивенс Уильям Ричард
Просмотр ограничен
Смотрите доступные для ознакомления главы 👉