在 Linux 中,如果我有两个使用可以相互通信的 C 程序(通过 shm、socket、管道等)的进程,我如何测量进程在 C 中通信所花费的时间?
即给定进程 A 和 B,A 发送消息,B 读取消息,MB 是某种用于通信的消息框,我希望测量 A 将消息放入 MB 和 B 检索消息所需的时间来自 MB 的消息。
对于消息队列,每个消息队列都有一个唯一的 msg 队列 ID。并具有类型为 struct msquid_ds 的关联数据结构,定义在 中,包含以下成员:
结构 ipc_perm msg_perm;
ushort msg_qnum; /* no of messages on queue */
ushort msg_qbytes; /* bytes max on a queue */
ushort msg_lspid; /* pid of last msgsnd call */
ushort msg_lrpid; /* pid of last msgrcv call */
time_t msg_stime; /* last msgsnd time */
time_t msg_rtime; /* last msgrcv time */
time_t msg_ctime; /* last change time */
您可以访问msg_stime获取最后一条消息发送时间,访问msg_rtime获取最后一条消息接收时间。
将时间,例如gettimeofday的结果放入消息前导码中,用接收端的时间来衡量差异。