diff options
author | Michael Brown | 2017-09-05 23:55:05 +0200 |
---|---|---|
committer | Michael Brown | 2017-09-06 00:23:22 +0200 |
commit | 7e673a6b67be1594e16a8cc5ab4a0d6c17799547 (patch) | |
tree | 863552df11d5bd2800203e7dd94a20e53177b096 /src/net/peerblk.c | |
parent | [monojob] Display job status message, if present (diff) | |
download | ipxe-7e673a6b67be1594e16a8cc5ab4a0d6c17799547.tar.gz ipxe-7e673a6b67be1594e16a8cc5ab4a0d6c17799547.tar.xz ipxe-7e673a6b67be1594e16a8cc5ab4a0d6c17799547.zip |
[peerdist] Gather and report peer statistics during download
Record and report the number of peers (calculated as the maximum
number of peers discovered for a block's segment at the time that the
block download is complete), and the percentage of blocks retrieved
from peers rather than from the origin server.
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/net/peerblk.c')
-rw-r--r-- | src/net/peerblk.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/net/peerblk.c b/src/net/peerblk.c index 9fd52b73..78888d2d 100644 --- a/src/net/peerblk.c +++ b/src/net/peerblk.c @@ -270,6 +270,9 @@ static int peerblk_deliver ( struct peerdist_block *peerblk, */ static void peerblk_done ( struct peerdist_block *peerblk, int rc ) { struct digest_algorithm *digest = peerblk->digest; + struct peerdisc_segment *segment = peerblk->discovery.segment; + struct peerdisc_peer *head; + struct peerdisc_peer *peer; uint8_t hash[digest->digestsize]; unsigned long now = peerblk_timestamp(); @@ -296,6 +299,11 @@ static void peerblk_done ( struct peerdist_block *peerblk, int rc ) { profile_custom ( &peerblk_attempt_success_profiler, ( now - peerblk->attempted ) ); + /* Report peer statistics */ + head = list_entry ( &segment->peers, struct peerdisc_peer, list ); + peer = ( ( peerblk->peer == head ) ? NULL : peerblk->peer ); + peerdisc_stat ( &peerblk->xfer, peer, &segment->peers ); + /* Close download */ peerblk_close ( peerblk, 0 ); return; |