Книга: UNIX: взаимодействие процессов

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

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

Для измерения времени задержки Sun RPC мы напишем две программы: клиент и сервер, аналогично измерению полосы пропускания. Мы используем старый файл спецификации RPC, но на этот раз клиент вызывает нулевую процедуру сервера. Вспомните упражнение 16.11: эта процедура не принимает никаких аргументов и ничего не возвращает. Это именно то, что нам нужно, чтобы определить задержку. В листинге А.18 приведен текст клиента. Как и в решении упражнения 16.11, нам нужно воспользоваться clnt_call для вызова нулевой процедуры; в заглушке клиента отсутствует необходимая заглушка для этой процедуры.

Листинг А.18. Клиент Sun RPC для измерения задержки

//bench/lat_sunrpc_client.с
1  #include "unpipc.h"
2  #include "lat_sunrpc.h"
3  int
4  main(int argc, char **argv)
5  {
6   int i, nloop;
7   CLIENT *cl;
8   struct timeval tv;
9   if (argc != 4)
10   err_quit("usage: lat_sunrpc_client <hostname> <#loops> <protocol>");
11  nloop = atoi(argv[2]);
12  cl = Clnt_create(argv[1], BW_SUNRPC_PROG, BW_SUNRPC_VERS, argv[3]);
13  tv.tv_sec = 10;
14  tv.tv_usec = 0;
15  Start_time();
16  for (i = 0; i < nloop; i++) {
17   if (clnt_call(cl, NULLPROC, xdr_void, NULL,
18    xdr_void, NULL, tv) != RPC_SUCCESS)
19    err_quit("%s", clnt_sperror(cl, argv[1]));
20  }
21  printf("latency: %.3f usecn", Stop_time() / nloop);
22  exit(0);
23 }

Мы компилируем сервер с функцией, приведенной в листинге А.13, но она все равно не вызывается. Поскольку мы используем rpcgen для построения клиента и сервера, нам нужно определить хотя бы одну процедуру сервера, но мы не обязаны ее вызывать. Причина, по которой мы используем rpcgen, заключается в том, что она автоматически создает функцию main сервера с нулевой процедурой, которая нам нужна.

Оглавление книги


Генерация: 1.153. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз