b remoteDomainBlockStats
remoteDomainBlockStats ->call-> callWithFD -> virNetClientProgramCall
-> virNetClientSendWithReply ->virNetClientIO
virNetServerProgramDispatch ->virNetServerProgramDispatchCall
-> virNetServerProgramGetProc
该目录里有磁盘吞吐量信息。
/sys/devices/xen-backend/vbd-14-51712/statistics
#0 xenHypervisorDomainBlockStats (dom=0x7ff564048a30, path=0x7ff5640a43e0 "xvda", stats=0x7ff56ffc29b0)
at libxl/libxl_hypervisor.c:71
#1 0x00000000004d627f in libxlDomainBlockStats (dom=0x7ff564048a30, path=0x7ff5640a43e0 "xvda",
stats=0x7ff56ffc29b0) at libxl/libxl_driver.c:3947
#2 0x00007ff574677aab in virDomainBlockStats (dom=0x7ff564048a30, disk=0x7ff5640a43e0 "xvda", stats=0x7ff56ffc2a80,
size=40) at libvirt.c:7533
#3 0x000000000044762a in remoteDispatchDomainBlockStats (server=0x7b3710, client=0x7be630, msg=0x7fe9f0,
rerr=0x7ff56ffc2ba0, args=0x7ff564048a70, ret=0x7ff564038b60) at remote_dispatch.h:721
#4 0x0000000000447762 in remoteDispatchDomainBlockStatsHelper (server=0x7b3710, client=0x7be630, msg=0x7fe9f0,
rerr=0x7ff56ffc2ba0, args=0x7ff564048a70, ret=0x7ff564038b60) at remote_dispatch.h:697
#5 0x00007ff5746c4aa2 in virNetServerProgramDispatchCall (prog=0x7be7a0, server=0x7b3710, client=0x7be630,
msg=0x7fe9f0) at rpc/virnetserverprogram.c:416
#6 0x00007ff5746c4ed8 in virNetServerProgramDispatch (prog=0x7be7a0, server=0x7b3710, client=0x7be630, msg=0x7fe9f0)
at rpc/virnetserverprogram.c:289
#7 0x00007ff5746c1899 in virNetServerHandleJob (jobOpaque=0x77be10, opaque=0x7b3710) at rpc/virnetserver.c:164
#8 0x00007ff5745d368d in virThreadPoolWorker (opaque=0x7782f0) at util/threadpool.c:144
#9 0x00007ff5745d2bcf in virThreadHelper (data=0x778270) at util/threads-pthread.c:161
#10 0x00007ff5721a05f0 in start_thread () from /lib64/libpthread.so.0
#11 0x00007ff571b0884d in clone () from /lib64/libc.so.6
#12 0x0000000000000000 in ?? ()
daemon/remote_dispatch.h中注册remote动作
virNetServerProgramProc remoteProcs[] = {
{ /* Method DomainBlockStats => 64 */
remoteDispatchDomainBlockStatsHelper,
sizeof(remote_domain_block_stats_args),
(xdrproc_t)xdr_remote_domain_block_stats_args,
sizeof(remote_domain_block_stats_ret),
(xdrproc_t)xdr_remote_domain_block_stats_ret,
true,
0
},
libxl的驱动注册在daemon/libvirtd.c中
static void daemonInitialize(void)
{
# ifdef WITH_LIBXL
libxlRegister();
# endif
src/libvirt.c中注册了remote驱动
int
virInitialize(void)
{
# ifdef WITH_REMOTE
virDriverLoadModule("remote");
# endif