Поскольку вызовы процедур в Sun RPC являются синхронными, для них действует то же ограничение, что и для дверей (см. выше). В данном случае проще создать две программы (клиент и сервер), поскольку они создаются автоматически программой rpcgen. В листинге А.11 приведен файл спецификации RPC. Мы объявляем единственную процедуру, принимающую скрытые данные переменной длины в качестве входного аргумента и ничего не возвращающую.
В листинге А.12 приведен текст программы-клиента, а в листинге А.13 — процедура сервера. Мы указываем протокол в качестве аргумента командной строки при вызове клиента, что позволяет нам измерить скорость работы обоих протоколов.
Листинг А.11. Спецификация RPC для измерения полосы пропускания RPC
//bench/bw_sunrpc.х
1 %#define DEBUG /* сервер выполняется в приоритетном режиме */
2 struct data_in {
3 opaque data<>; /* скрытые данные переменной длины */
4 };
5 program BW_SUNRPC_PROG {
6 version BW_SUNRPC_VERS {
7 void BW_SUNRPC(data_in) = 1;
8 } = 1;
9 } = 0x31230001;
Листинг A.12. Клиент RPC для измерения полосы пропускания
11 return(&nbytes); /* должен быть ненулевым, но xdr_void игнорирует */
12 }
А.4. Измерение задержки передачи сообщений: программы
Приведем текст трех программ, измеряющих задержку при передаче сообщений по каналам, очередям Posix и очередям System V. Данные о производительности, полученные с их помощью, приведены в табл. А.1.
Программа измерения задержки канала
Программа для измерения задержки канала приведена в листинге А.14.