Skip to content

Commit

Permalink
log sampled invalid server ids
Browse files Browse the repository at this point in the history
Summary: when analyzing a quic_cid_real0_pkts increase issue, I found it is useful if we know what are invalid server ids. I am sampling it in bpf program via quic_stats and log it in katranlb.

Reviewed By: lima1756

Differential Revision: D48018555

fbshipit-source-id: 3bb120a1f823a9f91069e7a4d3fa598763f088ed
  • Loading branch information
Fei Chen authored and facebook-github-bot committed Aug 4, 2023
1 parent 292ba73 commit 8a51fb6
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 0 deletions.
1 change: 1 addition & 0 deletions katran/lib/BalancerStructs.h
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ struct lb_quic_packets_stats {
uint64_t ch_routed;
uint64_t cid_initial;
uint64_t cid_invalid_server_id;
uint64_t cid_invalid_server_id_sample;
uint64_t cid_routed;
uint64_t cid_unknown_real_dropped;
uint64_t cid_v0;
Expand Down
12 changes: 12 additions & 0 deletions katran/lib/KatranLb.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ namespace katran {

namespace {
using EventId = monitoring::EventId;
constexpr int kMaxInvalidServerIds = 10000;
} // namespace

KatranLb::KatranLb(
Expand Down Expand Up @@ -2058,6 +2059,17 @@ lb_quic_packets_stats KatranLb::getLbQuicPacketsStats() {
sum_stat.ch_routed += stat.ch_routed;
sum_stat.cid_initial += stat.cid_initial;
sum_stat.cid_invalid_server_id += stat.cid_invalid_server_id;
if (stat.cid_invalid_server_id_sample &&
(invalidServerIds_.find(stat.cid_invalid_server_id_sample) ==
invalidServerIds_.end()) &&
invalidServerIds_.size() < kMaxInvalidServerIds) {
LOG(ERROR) << "Invalid server id "
<< stat.cid_invalid_server_id_sample << " in quic packet";
invalidServerIds_.insert(stat.cid_invalid_server_id_sample);
if (invalidServerIds_.size() == kMaxInvalidServerIds) {
LOG(ERROR) << "Too many invalid server ids, will skip logging";
}
}
sum_stat.cid_routed += stat.cid_routed;
sum_stat.cid_unknown_real_dropped += stat.cid_unknown_real_dropped;
sum_stat.cid_v0 += stat.cid_v0;
Expand Down
6 changes: 6 additions & 0 deletions katran/lib/KatranLb.h
Original file line number Diff line number Diff line change
Expand Up @@ -1156,6 +1156,12 @@ class KatranLb {
* Callback to be notified when a real is added or deleted
*/
RealsIdCallback* realsIdCallback_{nullptr};

/**
* set of invalid server ids sampled from katran
*/

std::unordered_set<uint64_t> invalidServerIds_;
};

} // namespace katran
1 change: 1 addition & 0 deletions katran/lib/bpf/balancer_kern.c
Original file line number Diff line number Diff line change
Expand Up @@ -776,6 +776,7 @@ process_packet(struct xdp_md* xdp, __u64 off, bool is_ipv6) {
// pos 0 means the entry for the server id is not initialized.
// fallback to ch
quic_packets_stats->cid_invalid_server_id += 1;
quic_packets_stats->cid_invalid_server_id_sample = qpr.server_id;
quic_packets_stats->ch_routed += 1;
} else {
pckt.real_index = key;
Expand Down
1 change: 1 addition & 0 deletions katran/lib/bpf/balancer_structs.h
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,7 @@ struct lb_quic_packets_stats {
__u64 ch_routed;
__u64 cid_initial;
__u64 cid_invalid_server_id;
__u64 cid_invalid_server_id_sample;
__u64 cid_routed;
__u64 cid_unknown_real_dropped;
__u64 cid_v0;
Expand Down

0 comments on commit 8a51fb6

Please sign in to comment.