<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <meta name="generator" content="pandoc" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
  <style>
html {
  line-height: 1.2;
  font-family: serif;
  font-size: 0.9em;
  color: black; 
  background-color: white;
}
body {
  margin: 0;
  margin-right: auto;
  max-width: 36em;
  padding: 1em;
  hyphens: auto;
  overflow-wrap: break-word;
  text-rendering: optimizeLegibility;
  font-kerning: normal;
}
@media print {
  body {
    background-color: transparent;
    color: black;
    font-size: 11pt;
  }
  p, h2, h3 {
    orphans: 3;
    widows: 3;
  }
  h2, h3, h4 {
    page-break-after: avoid;
  }
}
p {
  margin: 1em 0;
}
a {
  color: black;
}
a:visited {
  color: black;
}
img {
  max-width: 100%;
}
h1, h2, h3, h4, h5, h6 {
  margin-top: 1.4em;
}
h5, h6 {
  font-size: 1em;
  font-style: italic;
}
h6 {
  font-weight: normal;
}
ol, ul {
  padding-left: 1.7em;
  margin-top: 1em;
}
li > ol, li > ul {
  margin-top: 0;
}
blockquote {
  margin: 0.5em;
  padding-left: 0.5em;
  border-left: 2px solid #e6e6e6;
  color: #444;
}
code {
  font-family: 'Lucida Console', monospace;
  font-size: 95%;
  margin: 0;
}
pre {
  margin: 1em 0;
  overflow: auto;
  max-width: unset;
  width: fit-content;
}
pre code {
  padding: 0;
  overflow: visible;
  overflow-wrap: normal;
  max-width: unset;
  white-space: pre-wrap;
}
pre code span {
  white-space: pre;
}
.sourceCode {
 background-color: transparent;
 overflow: visible;
}

code.diff span.kw,
code.diff span.dt {
  font-weight: bold;
}

code.diff span.va {
  background-color: rgba(192, 255, 192, 64);
  color: rgb(0, 64, 0);
}

code.diff span.st {
  background-color: rgba(255, 192, 192, 64);
  color: rgb(64, 0, 0);
}

pre.diff {
  background-color: rgb(240, 240, 240);
  padding: 0.4em;
  border: 1pt solid grey;
}

hr {
  background-color: black;
  border: none;
  height: 1px;
  margin: 1em 0;
}
table {
  margin: 1em 0;
  border-collapse: collapse;
  width: 100%;
  overflow-x: auto;
  display: block;
  font-variant-numeric: lining-nums tabular-nums;
}
table caption {
  margin-bottom: 0.75em;
}
tbody {
  margin-top: 0.5em;
  border-top: 1px solid black;
  border-bottom: 1px solid black;
}
th {
  border-top: 1px solid black;
  padding: 0.25em 0.5em 0.25em 0.5em;
}
td {
  padding: 0.125em 0.5em 0.25em 0.5em;
}
header {
  margin-bottom: 4em;
  text-align: center;
}
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
span.underline{text-decoration: underline;}
div.column{display: inline-block; vertical-align: top; width: 50%;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
q { quotes: "„" "”" "»" "«"; }
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
  </style>
</head>
<body>
<p>Hello!</p>
<p>On Mon, Apr 27, 2026 at 02:17:10PM +0530, Kiran Katabathena
wrote:</p>
<blockquote>
<p>When doing a churn test we see bird speaker logs overwhelmed with
below messages and we hit high CPU.</p>
<p>2026-04-20 08:19:06.304 [0001] <WARN> I/O loop cycle took 61075.339
ms for 1 events 2026-04-20 08:19:47.863 [0001] <ERR> KIF: Received
address message for unknown interface 513817</p>
</blockquote>
<p>This is a known limitation which has no easy solution because of old
spaghetti. If you have half a million interfaces, even over time, it’s
gonna be slow. That’s the reality of a linked list.</p>
<blockquote>
<p>Version used: v3.0.2</p>
</blockquote>
<p>Version 3.0.2 is out of support. Please upgrade because of stability,
even though the speed doesn’t improve in later versions.</p>
<blockquote>
<p>We see similar issues in calico bird being fixed Remove interfaces
that are flagged as shutdown. by axel7born · Pull Request #111 ·
projectcalico/bird <a
href="https://github.com/projectcalico/bird/pull/111/changes/b32135cb60855b8a73cfcc43343df215f4631bcf"
class="uri">https://github.com/projectcalico/bird/pull/111/changes/b32135cb60855b8a73cfcc43343df215f4631bcf</a></p>
<p>Could someone one check and let me know if we have fix or work around
this issue?</p>
</blockquote>
<p>What is proposed in that PR is not a good fix for the long-term. It’s
leaking memory and old pointers may keep pointing there. While we have a
memory leak inside another function like this anyway, it may lead to
various weird problems when interfaces are referenced from config by
name, or when referenced from route next hops.</p>
<p>It is not easy to fix though. The original architecture expected the
interfaces to be pretty stable, thus we never remove any interface
structure because it’s a non-problem for regular deployments. There is
no refcounting of interfaces, they simply get created and they live
forever.</p>
<p>A thorough rework of the interface subsystem is in our long-term plan
but it’s, to put it mildly, a can of worms. We expect to tackle this
task in the core BIRD team with all the senior knowledge of BIRD
insides, probably in 2027 or 2028.</p>
<p>Our current priorities are stability, EVPN and API. There is a
possibility to pull the interface subsystem rework earlier, maybe
Q1/2027, but that would definitely need sending some money our way,
preferably in the form of a long-term support contract[0], so that we
may even consider growing the core team.</p>
<p>Please note that even if somebody wanted to contribute this rework
from outside the core BIRD team, we’d have to dedicate a significant
amount of people-time anyway to coordinate and review it properly, but
technically, that may also speed things up. Yet, there are still several
pieces of code which we should have merged long time ago, and we haven’t
merged them yet simply because we need to dedicate an uninterrupted
stretch of time long enough to do the job.</p>
<p>Maybe that’s too blunt of me but it is what it is.</p>
<p>Happy routing!<br />
Maria</p>
<p>[0] BIRD Support:
https://bird.nic.cz/commercial-services/#deployments-dc</p>
<p>–<br />
Maria Matejka (she/her) | BIRD Team Leader | CZ.NIC, z.s.p.o.</p>
</body>
</html>