VirtualBox

Changeset 20378 in vbox


Ignore:
Timestamp:
Jun 8, 2009 4:50:33 AM (16 years ago)
Author:
vboxsync
Message:

NAT: socket perfmance counters

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Network/slirp/socket.c

    r20297 r20378  
    1313#include <sys/filio.h>
    1414#endif
     15#include <VBox/pdmdrv.h>
    1516#if defined (RT_OS_WINDOWS)
    1617#include <iphlpapi.h>
     
    123124    struct iovec iov[2];
    124125    int mss = so->so_tcpcb->t_maxseg;
     126
     127    SLIRP_PROFILE_START(IOread, a);
     128    SLIRP_COUNTER_RESET(IORead_in_1);
     129    SLIRP_COUNTER_RESET(IORead_in_2);
     130
    125131    QSOCKET_LOCK(tcb);
    126132    SOCKET_LOCK(so);
     
    214220        {
    215221            SOCKET_UNLOCK(so);
     222            SLIRP_PROFILE_STOP(IOread, a);
    216223            return 0;
    217224        }
     
    220227        {
    221228            SOCKET_UNLOCK(so);
     229            STAM_PROFILE_STOP(&pData->StatIOread, a);
    222230            return 0;
    223231        }
     
    230238            tcp_sockclosed(pData, sototcpcb(so));
    231239            SOCKET_UNLOCK(so);
     240            STAM_PROFILE_STOP(&pData->StatIOread, a);
    232241            return -1;
    233242        }
    234243    }
     244    STAM_STATS(
     245        if (n == 1)
     246        {
     247            STAM_COUNTER_INC(&pData->StatIORead_in_1);
     248            STAM_COUNTER_ADD(&pData->StatIORead_in_1_bytes, nn);
     249        }
     250        else
     251        {
     252            STAM_COUNTER_INC(&pData->StatIORead_in_2);
     253            STAM_COUNTER_ADD(&pData->StatIORead_in_2_1st_bytes, nn);
     254        }
     255    );
    235256
    236257#ifndef HAVE_READV
     
    250271        if (ret > 0)
    251272            nn += ret;
     273        STAM_STATS(
     274            if(ret > 0)
     275            {
     276                SLIRP_COUNTER_INC(IORead_in_2);
     277                SLIRP_COUNTER_ADD(IORead_in_2_2nd_bytes, ret);
     278            }
     279        );
    252280    }
    253281
     
    260288    if (sb->sb_wptr >= (sb->sb_data + sb->sb_datalen))
    261289        sb->sb_wptr -= sb->sb_datalen;
     290    STAM_PROFILE_STOP(&pData->StatIOread, a);
    262291    SOCKET_UNLOCK(so);
    263292    return nn;
     
    372401    struct iovec iov[2];
    373402
     403    SLIRP_PROFILE_START(IOwrite, a);
     404    SLIRP_COUNTER_RESET(IOWrite_in_1);
     405    SLIRP_COUNTER_RESET(IOWrite_in_1_bytes);
     406    SLIRP_COUNTER_RESET(IOWrite_in_2);
     407    SLIRP_COUNTER_RESET(IOWrite_in_2_1st_bytes);
     408    SLIRP_COUNTER_RESET(IOWrite_in_2_2nd_bytes);
     409    SLIRP_COUNTER_RESET(IOWrite_no_w);
     410    SLIRP_COUNTER_RESET(IOWrite_rest);
     411    SLIRP_COUNTER_RESET(IOWrite_rest_bytes);
    374412    DEBUG_CALL("sowrite");
    375413    DEBUG_ARG("so = %lx", (long)so);
     
    383421        {
    384422            SOCKET_UNLOCK(so);
     423            STAM_PROFILE_STOP(&pData->StatIOwrite, a);
    385424            return 0;
    386425        }
     
    422461            n = 1;
    423462    }
     463    STAM_STATS({
     464        if (n == 1)
     465        {
     466            SLIRP_COUNTER_INC(IOWrite_in_1);
     467            SLIRP_COUNTER_ADD(IOWrite_in_1_bytes, iov[0].iov_len);
     468        }
     469        else
     470        {
     471            SLIRP_COUNTER_INC(IOWrite_in_2);
     472            SLIRP_COUNTER_ADD(IOWrite_in_2_1st_bytes, iov[0].iov_len);
     473            SLIRP_COUNTER_ADD(IOWrite_in_2_2nd_bytes, iov[1].iov_len);
     474        }
     475    });
    424476    /* Check if there's urgent data to send, and if so, send it */
    425477#ifdef HAVE_READV
     
    433485    {
    434486        SOCKET_UNLOCK(so);
     487        STAM_PROFILE_STOP(&pData->StatIOwrite, a);
    435488        return 0;
    436489    }
     
    443496        tcp_sockclosed(pData, sototcpcb(so));
    444497        SOCKET_UNLOCK(so);
     498        STAM_PROFILE_STOP(&pData->StatIOwrite, a);
    445499        return -1;
    446500    }
     
    453507        if (ret > 0)
    454508            nn += ret;
     509        STAM_STATS({
     510            if (ret > 0 && ret != iov[1].iov_len)
     511            {
     512                SLIRP_COUNTER_INC(IOWrite_rest);
     513                SLIRP_COUNTER_ADD(IOWrite_rest_bytes, (ret - iov[1].iov_len));
     514            }
     515        });
    455516    }
    456517    DEBUG_MISC((dfd, "  ... wrote nn = %d bytes\n", nn));
     
    471532
    472533    SOCKET_UNLOCK(so);
     534    SLIRP_PROFILE_STOP(IOwrite, a);
    473535    return nn;
    474536}
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette