Skip to content

Commit 8ed7591

Browse files
committed
Add Perf packet counters
1 parent b09f198 commit 8ed7591

5 files changed

Lines changed: 165 additions & 0 deletions

File tree

include/Homa/Perf.h

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,54 @@ struct Stats {
4040

4141
/// Number of bytes received by the transport.
4242
uint64_t rx_bytes;
43+
44+
/// Number of data packets sent.
45+
uint64_t tx_data_pkts;
46+
47+
/// Number of data packets received.
48+
uint64_t rx_data_pkts;
49+
50+
/// Number of grant packets sent.
51+
uint64_t tx_grant_pkts;
52+
53+
/// Number of grant packets received.
54+
uint64_t rx_grant_pkts;
55+
56+
/// Number of done packets sent.
57+
uint64_t tx_done_pkts;
58+
59+
/// Number of done packets received.
60+
uint64_t rx_done_pkts;
61+
62+
/// Number of resend packets sent.
63+
uint64_t tx_resend_pkts;
64+
65+
/// Number of resend packets received.
66+
uint64_t rx_resend_pkts;
67+
68+
/// Number of busy packets sent.
69+
uint64_t tx_busy_pkts;
70+
71+
/// Number of busy packets received.
72+
uint64_t rx_busy_pkts;
73+
74+
/// Number of ping packets sent.
75+
uint64_t tx_ping_pkts;
76+
77+
/// Number of ping packets received.
78+
uint64_t rx_ping_pkts;
79+
80+
/// Number of unknown packets sent.
81+
uint64_t tx_unknown_pkts;
82+
83+
/// Number of unknown packets received.
84+
uint64_t rx_unknown_pkts;
85+
86+
/// Number of error packets sent.
87+
uint64_t tx_error_pkts;
88+
89+
/// Number of error packets received.
90+
uint64_t rx_error_pkts;
4391
};
4492

4593
/**

src/Perf.h

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,22 @@ struct Counters {
7373
: active_cycles(0)
7474
, tx_bytes(0)
7575
, rx_bytes(0)
76+
, tx_data_pkts(0)
77+
, rx_data_pkts(0)
78+
, tx_grant_pkts(0)
79+
, rx_grant_pkts(0)
80+
, tx_done_pkts(0)
81+
, rx_done_pkts(0)
82+
, tx_resend_pkts(0)
83+
, rx_resend_pkts(0)
84+
, tx_busy_pkts(0)
85+
, rx_busy_pkts(0)
86+
, tx_ping_pkts(0)
87+
, rx_ping_pkts(0)
88+
, tx_unknown_pkts(0)
89+
, rx_unknown_pkts(0)
90+
, tx_error_pkts(0)
91+
, rx_error_pkts(0)
7692
{}
7793

7894
/**
@@ -88,6 +104,22 @@ struct Counters {
88104
active_cycles.add(other->active_cycles);
89105
tx_bytes.add(other->tx_bytes);
90106
rx_bytes.add(other->rx_bytes);
107+
tx_data_pkts.add(other->tx_data_pkts);
108+
rx_data_pkts.add(other->rx_data_pkts);
109+
tx_grant_pkts.add(other->tx_grant_pkts);
110+
rx_grant_pkts.add(other->rx_grant_pkts);
111+
tx_done_pkts.add(other->tx_done_pkts);
112+
rx_done_pkts.add(other->rx_done_pkts);
113+
tx_resend_pkts.add(other->tx_resend_pkts);
114+
rx_resend_pkts.add(other->rx_resend_pkts);
115+
tx_busy_pkts.add(other->tx_busy_pkts);
116+
rx_busy_pkts.add(other->rx_busy_pkts);
117+
tx_ping_pkts.add(other->tx_ping_pkts);
118+
rx_ping_pkts.add(other->rx_ping_pkts);
119+
tx_unknown_pkts.add(other->tx_unknown_pkts);
120+
rx_unknown_pkts.add(other->rx_unknown_pkts);
121+
tx_error_pkts.add(other->tx_error_pkts);
122+
rx_error_pkts.add(other->rx_error_pkts);
91123
}
92124

93125
/**
@@ -98,6 +130,22 @@ struct Counters {
98130
stats->active_cycles = active_cycles.get();
99131
stats->tx_bytes = tx_bytes.get();
100132
stats->rx_bytes = rx_bytes.get();
133+
stats->tx_data_pkts = tx_data_pkts.get();
134+
stats->rx_data_pkts = rx_data_pkts.get();
135+
stats->tx_grant_pkts = tx_grant_pkts.get();
136+
stats->rx_grant_pkts = rx_grant_pkts.get();
137+
stats->tx_done_pkts = tx_done_pkts.get();
138+
stats->rx_done_pkts = rx_done_pkts.get();
139+
stats->tx_resend_pkts = tx_resend_pkts.get();
140+
stats->rx_resend_pkts = rx_resend_pkts.get();
141+
stats->tx_busy_pkts = tx_busy_pkts.get();
142+
stats->rx_busy_pkts = rx_busy_pkts.get();
143+
stats->tx_ping_pkts = tx_ping_pkts.get();
144+
stats->rx_ping_pkts = rx_ping_pkts.get();
145+
stats->tx_unknown_pkts = tx_unknown_pkts.get();
146+
stats->rx_unknown_pkts = rx_unknown_pkts.get();
147+
stats->tx_error_pkts = tx_error_pkts.get();
148+
stats->rx_error_pkts = rx_error_pkts.get();
101149
}
102150

103151
/// CPU time spent actively processing Homa messages in cycles.
@@ -108,6 +156,54 @@ struct Counters {
108156

109157
/// Number of bytes received by the transport.
110158
Stat<uint64_t> rx_bytes;
159+
160+
/// Number of data packets sent.
161+
Stat<uint64_t> tx_data_pkts;
162+
163+
/// Number of data packets received.
164+
Stat<uint64_t> rx_data_pkts;
165+
166+
/// Number of grant packets sent.
167+
Stat<uint64_t> tx_grant_pkts;
168+
169+
/// Number of grant packets received.
170+
Stat<uint64_t> rx_grant_pkts;
171+
172+
/// Number of done packets sent.
173+
Stat<uint64_t> tx_done_pkts;
174+
175+
/// Number of done packets received.
176+
Stat<uint64_t> rx_done_pkts;
177+
178+
/// Number of resend packets sent.
179+
Stat<uint64_t> tx_resend_pkts;
180+
181+
/// Number of resend packets received.
182+
Stat<uint64_t> rx_resend_pkts;
183+
184+
/// Number of busy packets sent.
185+
Stat<uint64_t> tx_busy_pkts;
186+
187+
/// Number of busy packets received.
188+
Stat<uint64_t> rx_busy_pkts;
189+
190+
/// Number of ping packets sent.
191+
Stat<uint64_t> tx_ping_pkts;
192+
193+
/// Number of ping packets received.
194+
Stat<uint64_t> rx_ping_pkts;
195+
196+
/// Number of unknown packets sent.
197+
Stat<uint64_t> tx_unknown_pkts;
198+
199+
/// Number of unknown packets received.
200+
Stat<uint64_t> rx_unknown_pkts;
201+
202+
/// Number of error packets sent.
203+
Stat<uint64_t> tx_error_pkts;
204+
205+
/// Number of error packets received.
206+
Stat<uint64_t> rx_error_pkts;
111207
};
112208

113209
/**

src/Receiver.cc

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,11 +234,13 @@ Receiver::handlePingPacket(Driver::Packet* packet, Driver* driver)
234234
priority = info->priority;
235235
}
236236

237+
Perf::counters.tx_grant_pkts.add(1);
237238
ControlPacket::send<Protocol::Packet::GrantHeader>(
238239
driver, message->source, message->id, bytesGranted, priority);
239240
} else {
240241
// We are here because we have no knowledge of the message the Sender is
241242
// asking about. Reply UNKNOWN so the Sender can react accordingly.
243+
Perf::counters.tx_unknown_pkts.add(1);
242244
ControlPacket::send<Protocol::Packet::UnknownHeader>(
243245
driver, packet->address, id);
244246
}
@@ -343,6 +345,7 @@ Receiver::Message::acknowledge() const
343345
{
344346
MessageBucket* bucket = receiver->messageBuckets.getBucket(id);
345347
SpinLock::Lock lock(bucket->mutex);
348+
Perf::counters.tx_done_pkts.add(1);
346349
ControlPacket::send<Protocol::Packet::DoneHeader>(driver, source, id);
347350
}
348351

@@ -363,6 +366,7 @@ Receiver::Message::fail() const
363366
{
364367
MessageBucket* bucket = receiver->messageBuckets.getBucket(id);
365368
SpinLock::Lock lock(bucket->mutex);
369+
Perf::counters.tx_error_pkts.add(1);
366370
ControlPacket::send<Protocol::Packet::ErrorHeader>(driver, source, id);
367371
}
368372

@@ -672,6 +676,7 @@ Receiver::checkResendTimeouts()
672676
// unscheduled packets (see
673677
// Sender::handleResendPacket()).
674678
SpinLock::Lock lock_scheduler(schedulerMutex);
679+
Perf::counters.tx_resend_pkts.add(1);
675680
ControlPacket::send<Protocol::Packet::ResendHeader>(
676681
message->driver, message->source, message->id,
677682
Util::downCast<uint16_t>(index),
@@ -684,6 +689,7 @@ Receiver::checkResendTimeouts()
684689
if (num != 0) {
685690
// Send out the last range of packets found.
686691
SpinLock::Lock lock_scheduler(schedulerMutex);
692+
Perf::counters.tx_resend_pkts.add(1);
687693
ControlPacket::send<Protocol::Packet::ResendHeader>(
688694
message->driver, message->source, message->id,
689695
Util::downCast<uint16_t>(index),
@@ -757,6 +763,7 @@ Receiver::trySendGrants()
757763
receivedBytes + policy.maxScheduledBytes, info->messageLength);
758764
assert(newGrantLimit >= info->bytesGranted);
759765
info->bytesGranted = newGrantLimit;
766+
Perf::counters.tx_grant_pkts.add(1);
760767
ControlPacket::send<Protocol::Packet::GrantHeader>(
761768
driver, source, id,
762769
Util::downCast<uint32_t>(info->bytesGranted), info->priority);

src/Sender.cc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@ Sender::handleResendPacket(Driver::Packet* packet, Driver* driver)
220220
// this Sender has been busy and the Receiver is trying to ensure there
221221
// are no lost packets. Reply BUSY and allow this Sender to send DATA
222222
// when it's ready.
223+
Perf::counters.tx_busy_pkts.add(1);
223224
ControlPacket::send<Protocol::Packet::BusyHeader>(
224225
driver, info->destination, info->id);
225226
} else {
@@ -231,6 +232,7 @@ Sender::handleResendPacket(Driver::Packet* packet, Driver* driver)
231232
Driver::Packet* packet = info->packets->getPacket(i);
232233
packet->priority = resendPriority;
233234
// Packets will be sent at the priority their original priority.
235+
Perf::counters.tx_data_pkts.add(1);
234236
Perf::counters.tx_bytes.add(packet->length);
235237
driver->sendPacket(packet);
236238
}
@@ -376,6 +378,7 @@ Sender::handleUnknownPacket(Driver::Packet* packet, Driver* driver)
376378
Driver::Packet* dataPacket = message->getPacket(0);
377379
assert(dataPacket != nullptr);
378380
dataPacket->priority = policy.priority;
381+
Perf::counters.tx_data_pkts.add(1);
379382
Perf::counters.tx_bytes.add(dataPacket->length);
380383
driver->sendPacket(dataPacket);
381384
message->state.store(OutMessage::Status::SENT);
@@ -779,6 +782,7 @@ Sender::sendMessage(Sender::Message* message, Driver::Address destination)
779782
Driver::Packet* packet = message->getPacket(0);
780783
assert(packet != nullptr);
781784
packet->priority = policy.priority;
785+
Perf::counters.tx_data_pkts.add(1);
782786
Perf::counters.tx_bytes.add(packet->length);
783787
driver->sendPacket(packet);
784788
message->state.store(OutMessage::Status::SENT);
@@ -932,6 +936,7 @@ Sender::checkPingTimeouts()
932936

933937
// Have not heard from the Receiver in the last timeout period. Ping
934938
// the receiver to ensure it still knows about this Message.
939+
Perf::counters.tx_ping_pkts.add(1);
935940
ControlPacket::send<Protocol::Packet::PingHeader>(
936941
message->driver, message->destination, message->id);
937942
}
@@ -988,6 +993,7 @@ Sender::trySend()
988993
}
989994
// ... if not, send away!
990995
packet->priority = info->priority;
996+
Perf::counters.tx_data_pkts.add(1);
991997
Perf::counters.tx_bytes.add(packet->length);
992998
driver->sendPacket(packet);
993999
int packetDataBytes =

src/TransportImpl.cc

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,27 +108,35 @@ TransportImpl::processPackets()
108108
static_cast<Protocol::Packet::CommonHeader*>(packet->payload);
109109
switch (header->opcode) {
110110
case Protocol::Packet::DATA:
111+
Perf::counters.rx_data_pkts.add(1);
111112
receiver->handleDataPacket(packet, driver);
112113
break;
113114
case Protocol::Packet::GRANT:
115+
Perf::counters.rx_grant_pkts.add(1);
114116
sender->handleGrantPacket(packet, driver);
115117
break;
116118
case Protocol::Packet::DONE:
119+
Perf::counters.rx_done_pkts.add(1);
117120
sender->handleDonePacket(packet, driver);
118121
break;
119122
case Protocol::Packet::RESEND:
123+
Perf::counters.rx_resend_pkts.add(1);
120124
sender->handleResendPacket(packet, driver);
121125
break;
122126
case Protocol::Packet::BUSY:
127+
Perf::counters.rx_busy_pkts.add(1);
123128
receiver->handleBusyPacket(packet, driver);
124129
break;
125130
case Protocol::Packet::PING:
131+
Perf::counters.rx_ping_pkts.add(1);
126132
receiver->handlePingPacket(packet, driver);
127133
break;
128134
case Protocol::Packet::UNKNOWN:
135+
Perf::counters.rx_unknown_pkts.add(1);
129136
sender->handleUnknownPacket(packet, driver);
130137
break;
131138
case Protocol::Packet::ERROR:
139+
Perf::counters.rx_error_pkts.add(1);
132140
sender->handleErrorPacket(packet, driver);
133141
break;
134142
}

0 commit comments

Comments
 (0)