d981a844e64c196b4c96be1a52ddc42e23337138vboxsync/** $Id$ */
d981a844e64c196b4c96be1a52ddc42e23337138vboxsync/** @file
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsync * Counters macro invocation template.
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsync *
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsync * This is included with different PROFILE_COUNTER and COUNTING_COUNTER
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsync * implementations to instantiate data members, create function prototypes and
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsync * implement these prototypes.
d981a844e64c196b4c96be1a52ddc42e23337138vboxsync */
d981a844e64c196b4c96be1a52ddc42e23337138vboxsync
d981a844e64c196b4c96be1a52ddc42e23337138vboxsync/*
e64031e20c39650a7bc902a3e1aba613b9415deevboxsync * Copyright (C) 2007-2010 Oracle Corporation
d981a844e64c196b4c96be1a52ddc42e23337138vboxsync *
d981a844e64c196b4c96be1a52ddc42e23337138vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
d981a844e64c196b4c96be1a52ddc42e23337138vboxsync * available from http://www.virtualbox.org. This file is free software;
d981a844e64c196b4c96be1a52ddc42e23337138vboxsync * you can redistribute it and/or modify it under the terms of the GNU
d981a844e64c196b4c96be1a52ddc42e23337138vboxsync * General Public License (GPL) as published by the Free Software
d981a844e64c196b4c96be1a52ddc42e23337138vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
d981a844e64c196b4c96be1a52ddc42e23337138vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
d981a844e64c196b4c96be1a52ddc42e23337138vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
d981a844e64c196b4c96be1a52ddc42e23337138vboxsync */
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsync
aee9566869f4ef64fd4c1bf0b6b0472118c4e3dcvboxsync/*
38a68d8a301a7af92ecdfdcbf695048702b8fbeavboxsync * COUNTERS_INIT is used before using counters.h to declare helping macro
aee9566869f4ef64fd4c1bf0b6b0472118c4e3dcvboxsync * definitions for (de-)registering counters
aee9566869f4ef64fd4c1bf0b6b0472118c4e3dcvboxsync */
aee9566869f4ef64fd4c1bf0b6b0472118c4e3dcvboxsync#ifndef COUNTERS_H
aee9566869f4ef64fd4c1bf0b6b0472118c4e3dcvboxsync# define COUNTERS_H
38a68d8a301a7af92ecdfdcbf695048702b8fbeavboxsync# if defined(VBOX_WITH_STATISTICS)
e08356d402098ee50eee9000cd385530ac46e7dcvboxsync# define REGISTER_COUNTER(name, storage, type, units, dsc) \
aee9566869f4ef64fd4c1bf0b6b0472118c4e3dcvboxsync do { \
aee9566869f4ef64fd4c1bf0b6b0472118c4e3dcvboxsync PDMDrvHlpSTAMRegisterF(pDrvIns, \
6de922ee8158732706074aacb20c2a5dc6d4d7a3vboxsync &(storage)->Stat ## name, \
aee9566869f4ef64fd4c1bf0b6b0472118c4e3dcvboxsync type, \
aee9566869f4ef64fd4c1bf0b6b0472118c4e3dcvboxsync STAMVISIBILITY_ALWAYS, \
aee9566869f4ef64fd4c1bf0b6b0472118c4e3dcvboxsync units, \
aee9566869f4ef64fd4c1bf0b6b0472118c4e3dcvboxsync dsc, \
aee9566869f4ef64fd4c1bf0b6b0472118c4e3dcvboxsync "/Drivers/NAT%u/" #name, \
aee9566869f4ef64fd4c1bf0b6b0472118c4e3dcvboxsync pDrvIns->iInstance); \
aee9566869f4ef64fd4c1bf0b6b0472118c4e3dcvboxsync } while (0)
e08356d402098ee50eee9000cd385530ac46e7dcvboxsync# define DEREGISTER_COUNTER(name, storage) PDMDrvHlpSTAMDeregister(pDrvIns, &(storage)->Stat ## name)
aee9566869f4ef64fd4c1bf0b6b0472118c4e3dcvboxsync# else
e08356d402098ee50eee9000cd385530ac46e7dcvboxsync# define REGISTER_COUNTER(name, storage, type, units, dsc) do {} while (0)
e08356d402098ee50eee9000cd385530ac46e7dcvboxsync# define DEREGISTER_COUNTER(name, storage) do {} while (0)
aee9566869f4ef64fd4c1bf0b6b0472118c4e3dcvboxsync# endif
bca329d964c68b6cc29604b2fc773ba4646c2bc8vboxsync#else
3fa88ed5980bc097e9f97063a9965d2cf771c5f3vboxsync# undef COUNTERS_INIT
73998d8c011a8daa516284396927355bef407656vboxsync#endif
73998d8c011a8daa516284396927355bef407656vboxsync
aee9566869f4ef64fd4c1bf0b6b0472118c4e3dcvboxsync#ifndef COUNTERS_INIT
aee9566869f4ef64fd4c1bf0b6b0472118c4e3dcvboxsync# if !defined(PROFILE_COUNTER) && !defined(DRV_PROFILE_COUNTER)
aee9566869f4ef64fd4c1bf0b6b0472118c4e3dcvboxsync# error (DRV_)PROFILE_COUNTER is not defied
aee9566869f4ef64fd4c1bf0b6b0472118c4e3dcvboxsync# endif
aee9566869f4ef64fd4c1bf0b6b0472118c4e3dcvboxsync# if !defined(COUNTING_COUNTER) && !defined(DRV_COUNTING_COUNTER)
aee9566869f4ef64fd4c1bf0b6b0472118c4e3dcvboxsync# error (DRV_)COUNTING_COUNTER is not defined
aee9566869f4ef64fd4c1bf0b6b0472118c4e3dcvboxsync# endif
aee9566869f4ef64fd4c1bf0b6b0472118c4e3dcvboxsync
73998d8c011a8daa516284396927355bef407656vboxsync/*
73998d8c011a8daa516284396927355bef407656vboxsync * DRV_ prefixed are counters used in DrvNAT the rest are used in Slirp
73998d8c011a8daa516284396927355bef407656vboxsync */
d981a844e64c196b4c96be1a52ddc42e23337138vboxsync
e08356d402098ee50eee9000cd385530ac46e7dcvboxsync# if defined(PROFILE_COUNTER) || defined(COUNTING_COUNTER)
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncPROFILE_COUNTER(Fill, "Profiling slirp fills");
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncPROFILE_COUNTER(Poll, "Profiling slirp polls");
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncPROFILE_COUNTER(FastTimer, "Profiling slirp fast timer");
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncPROFILE_COUNTER(SlowTimer, "Profiling slirp slow timer");
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncPROFILE_COUNTER(IOwrite, "Profiling IO sowrite");
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncPROFILE_COUNTER(IOread, "Profiling IO soread");
d981a844e64c196b4c96be1a52ddc42e23337138vboxsync
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncCOUNTING_COUNTER(TCP, "TCP sockets");
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncCOUNTING_COUNTER(TCPHot, "TCP sockets active");
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncCOUNTING_COUNTER(UDP, "UDP sockets");
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncCOUNTING_COUNTER(UDPHot, "UDP sockets active");
169154fcc4bae3ca771f32a6c11cc0a06f04d505vboxsync
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncCOUNTING_COUNTER(IORead_in_1, "SB IORead_in_1");
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncCOUNTING_COUNTER(IORead_in_1_bytes, "SB IORead_in_1_bytes");
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncCOUNTING_COUNTER(IORead_in_2, "SB IORead_in_2");
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncCOUNTING_COUNTER(IORead_in_2_1st_bytes, "SB IORead_in_2_1st_bytes");
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncCOUNTING_COUNTER(IORead_in_2_2nd_bytes, "SB IORead_in_2_2nd_bytes");
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncCOUNTING_COUNTER(IOWrite_in_1, "SB IOWrite_in_1");
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncCOUNTING_COUNTER(IOWrite_in_1_bytes, "SB IOWrite_in_1_bytes");
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncCOUNTING_COUNTER(IOWrite_in_2, "SB IOWrite_in_2");
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncCOUNTING_COUNTER(IOWrite_in_2_1st_bytes, "SB IOWrite_in_2_1st_bytes");
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncCOUNTING_COUNTER(IOWrite_in_2_2nd_bytes, "SB IOWrite_in_2_2nd_bytes");
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncCOUNTING_COUNTER(IOWrite_no_w, "SB IOWrite_no_w");
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncCOUNTING_COUNTER(IOWrite_rest, "SB IOWrite_rest");
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncCOUNTING_COUNTER(IOWrite_rest_bytes, "SB IOWrite_rest_bytes");
169154fcc4bae3ca771f32a6c11cc0a06f04d505vboxsync
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncPROFILE_COUNTER(IOSBAppend_pf, "Profiling sbuf::append common");
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncPROFILE_COUNTER(IOSBAppend_pf_wa, "Profiling sbuf::append all writen in network");
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncPROFILE_COUNTER(IOSBAppend_pf_wf, "Profiling sbuf::append writen fault");
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncPROFILE_COUNTER(IOSBAppend_pf_wp, "Profiling sbuf::append writen partly");
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncCOUNTING_COUNTER(IOSBAppend, "SB: Append total");
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncCOUNTING_COUNTER(IOSBAppend_wa, "SB: Append all is written to network ");
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncCOUNTING_COUNTER(IOSBAppend_wf, "SB: Append nothing is written");
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncCOUNTING_COUNTER(IOSBAppend_wp, "SB: Append is written partly");
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncCOUNTING_COUNTER(IOSBAppend_zm, "SB: Append mbuf is zerro or less");
e94d561018bd5f9e7a92dea86468500774b2d8ffvboxsync
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncCOUNTING_COUNTER(IOSBAppendSB, "SB: AppendSB total");
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncCOUNTING_COUNTER(IOSBAppendSB_w_l_r, "SB: AppendSB (sb_wptr < sb_rptr)");
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncCOUNTING_COUNTER(IOSBAppendSB_w_ge_r, "SB: AppendSB (sb_wptr >= sb_rptr)");
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncCOUNTING_COUNTER(IOSBAppendSB_w_alter, "SB: AppendSB (altering of sb_wptr)");
50bce6f90329f810ed7b9ea1a758f76adba98f61vboxsyncCOUNTING_COUNTER(MBufAllocation,"MBUF::shows number of mbufs in used list");
e94d561018bd5f9e7a92dea86468500774b2d8ffvboxsync
95ff7c92406f8e3cc892ec0ed9be7d06c49e302cvboxsyncCOUNTING_COUNTER(TCP_retransmit, "TCP::retransmit");
95ff7c92406f8e3cc892ec0ed9be7d06c49e302cvboxsync
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncPROFILE_COUNTER(TCP_reassamble, "TCP::reasamble");
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsyncPROFILE_COUNTER(TCP_input, "TCP::input");
caff8bc1842e1ba69d4115103177264909cbb97bvboxsyncPROFILE_COUNTER(IP_input, "IP::input");
caff8bc1842e1ba69d4115103177264909cbb97bvboxsyncPROFILE_COUNTER(IP_output, "IP::output");
eeea67e86500e2fe13ace42b86653498e3d656aavboxsyncPROFILE_COUNTER(IF_encap, "IF::encap");
caff8bc1842e1ba69d4115103177264909cbb97bvboxsyncPROFILE_COUNTER(ALIAS_input, "ALIAS::input");
caff8bc1842e1ba69d4115103177264909cbb97bvboxsyncPROFILE_COUNTER(ALIAS_output, "ALIAS::output");
e08356d402098ee50eee9000cd385530ac46e7dcvboxsync
e08356d402098ee50eee9000cd385530ac46e7dcvboxsync# else
e08356d402098ee50eee9000cd385530ac46e7dcvboxsync/*DrvNAT.cpp*/
e08356d402098ee50eee9000cd385530ac46e7dcvboxsyncDRV_COUNTING_COUNTER(NATRecvWakeups, "counting wakeups of NAT RX thread");
bca329d964c68b6cc29604b2fc773ba4646c2bc8vboxsyncDRV_PROFILE_COUNTER(NATRecv,"Time spent in NATRecv worker");
bca329d964c68b6cc29604b2fc773ba4646c2bc8vboxsyncDRV_PROFILE_COUNTER(NATRecvWait,"Time spent in NATRecv worker in waiting of free RX buffers");
38a68d8a301a7af92ecdfdcbf695048702b8fbeavboxsyncDRV_COUNTING_COUNTER(QueuePktSent, "counting packet sent via PDM Queue");
38a68d8a301a7af92ecdfdcbf695048702b8fbeavboxsyncDRV_COUNTING_COUNTER(QueuePktDropped, "counting packet drops by PDM Queue");
38a68d8a301a7af92ecdfdcbf695048702b8fbeavboxsyncDRV_COUNTING_COUNTER(ConsumerFalse, "counting consumer's reject number to process the queue's item");
e08356d402098ee50eee9000cd385530ac46e7dcvboxsync# endif
3fa88ed5980bc097e9f97063a9965d2cf771c5f3vboxsync#endif /*!COUNTERS_INIT*/
4003a16c61cdf61979273c73fc02805967e57683vboxsync
3fa88ed5980bc097e9f97063a9965d2cf771c5f3vboxsync#ifdef DRV_COUNTING_COUNTER
aee9566869f4ef64fd4c1bf0b6b0472118c4e3dcvboxsync# undef DRV_COUNTING_COUNTER
3fa88ed5980bc097e9f97063a9965d2cf771c5f3vboxsync#endif
3fa88ed5980bc097e9f97063a9965d2cf771c5f3vboxsync
3fa88ed5980bc097e9f97063a9965d2cf771c5f3vboxsync#ifdef DRV_PROFILE_COUNTER
aee9566869f4ef64fd4c1bf0b6b0472118c4e3dcvboxsync# undef DRV_PROFILE_COUNTER
3fa88ed5980bc097e9f97063a9965d2cf771c5f3vboxsync#endif
4adca41ab708846c9a69a97eebf81f7da1c0e602vboxsync
3fa88ed5980bc097e9f97063a9965d2cf771c5f3vboxsync#ifdef COUNTING_COUNTER
aee9566869f4ef64fd4c1bf0b6b0472118c4e3dcvboxsync# undef COUNTING_COUNTER
3fa88ed5980bc097e9f97063a9965d2cf771c5f3vboxsync#endif
3fa88ed5980bc097e9f97063a9965d2cf771c5f3vboxsync
3fa88ed5980bc097e9f97063a9965d2cf771c5f3vboxsync#ifdef PROFILE_COUNTER
aee9566869f4ef64fd4c1bf0b6b0472118c4e3dcvboxsync# undef PROFILE_COUNTER
3fa88ed5980bc097e9f97063a9965d2cf771c5f3vboxsync#endif