<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: theojulienne</title><link>https://news.ycombinator.com/user?id=theojulienne</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 29 Apr 2026 16:19:38 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=theojulienne" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by theojulienne in "An update on GitHub availability"]]></title><description><![CDATA[
<p>I can't speak to the last few years since I left, but over the many years I was there the git storage layer was almost never the core issue - it was well designed by infrastructure-minded nerds that leveraged and improved git and replicated it really well across multiple nodes.<p>What always struggled was the richness of the Rails monolith itself and its backing MySQL databases - the expectation that everything links to everything throughout the product (think: issue cross references across orgs that only appear if you're able to access the remote repo, and other things like that).<p>Those details appear richly everywhere you look, and the combination of that with a general lack of understanding and/or focus on performance (shipping big features is hard, shipping them with performance at scale is MUCH harder), compounded by Ruby being an easy language to get performance wrong in (object count really hurts, and it makes it very easy to create many) leaves every feature adding to the performance problem, and makes it daunting/impossible to make fast once it's slow.<p>There was a full on year or more of making GitHub fast while I was there that just couldn't gain enough momentum to make enough of a dent to make it better. I remember finding and fixing a N^3 (or maybe it was N^4? something bad) in the home page activity feed - the worst thing I found but gives an idea. IMO it would need a fresh view of how to keep interfaces simple and how to design the data layers performantly - not adding every bell and whistle to every screen.<p>I hope someone at GitHub realises they are about to lose everything that was hard earned by early GitHub - it once was a site people (myself included) looked up to for ideal availability, responsible releases, data driven improvement - but no more it seems :(</p>
]]></description><pubDate>Wed, 29 Apr 2026 10:17:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=47946309</link><dc:creator>theojulienne</dc:creator><comments>https://news.ycombinator.com/item?id=47946309</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47946309</guid></item><item><title><![CDATA[Ethernet MTU and TCP MSS: Why Connections Stall]]></title><description><![CDATA[
<p>Article URL: <a href="https://theojulienne.io/2020/08/21/mtu-mss-why-connections-stall.html">https://theojulienne.io/2020/08/21/mtu-mss-why-connections-stall.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=24240030">https://news.ycombinator.com/item?id=24240030</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 21 Aug 2020 23:37:24 +0000</pubDate><link>https://theojulienne.io/2020/08/21/mtu-mss-why-connections-stall.html</link><dc:creator>theojulienne</dc:creator><comments>https://news.ycombinator.com/item?id=24240030</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=24240030</guid></item><item><title><![CDATA[New comment by theojulienne in "Scaling Linux Services: Before accepting connections"]]></title><description><![CDATA[
<p>Thanks for the suggestion! I did come across the `tcpsynbl.bt` script as I was writing up this post, but wanted to add the additional information around namespaces and report additional information, which didn't seem as trivial in `bpftrace` as it was in Python, but that might be my lack of familiarity with the DSL :)</p>
]]></description><pubDate>Sat, 04 Jul 2020 05:19:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=23730318</link><dc:creator>theojulienne</dc:creator><comments>https://news.ycombinator.com/item?id=23730318</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=23730318</guid></item><item><title><![CDATA[Scaling Linux Services: Before accepting connections]]></title><description><![CDATA[
<p>Article URL: <a href="https://theojulienne.io/2020/07/03/scaling-linux-services-before-accepting-connections.html">https://theojulienne.io/2020/07/03/scaling-linux-services-before-accepting-connections.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=23729072">https://news.ycombinator.com/item?id=23729072</a></p>
<p>Points: 175</p>
<p># Comments: 29</p>
]]></description><pubDate>Sat, 04 Jul 2020 00:58:29 +0000</pubDate><link>https://theojulienne.io/2020/07/03/scaling-linux-services-before-accepting-connections.html</link><dc:creator>theojulienne</dc:creator><comments>https://news.ycombinator.com/item?id=23729072</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=23729072</guid></item><item><title><![CDATA[Covid-19 in graphs: an open source site]]></title><description><![CDATA[
<p>Article URL: <a href="https://covid.graphics/">https://covid.graphics/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=22669244">https://news.ycombinator.com/item?id=22669244</a></p>
<p>Points: 10</p>
<p># Comments: 4</p>
]]></description><pubDate>Mon, 23 Mar 2020 21:55:59 +0000</pubDate><link>https://covid.graphics/</link><dc:creator>theojulienne</dc:creator><comments>https://news.ycombinator.com/item?id=22669244</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=22669244</guid></item><item><title><![CDATA[New comment by theojulienne in "Debugging Network Stalls on Kubernetes"]]></title><description><![CDATA[
<p>We didn't find any metric that surfaced zombie cgroups, presumably because the kernel mostly tries to hide them from user space since they have been deleted, but haven't been cleaned up. The only way we found at the time to track them was via a BCC script and observing the latency on reading the /sys/fs/cgroup/memory/memory.stat file.</p>
]]></description><pubDate>Sat, 23 Nov 2019 22:01:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=21616898</link><dc:creator>theojulienne</dc:creator><comments>https://news.ycombinator.com/item?id=21616898</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21616898</guid></item><item><title><![CDATA[New comment by theojulienne in "Debugging Network Stalls on Kubernetes"]]></title><description><![CDATA[
<p>This insert_failed issue described in the video was one of the ones we discovered during investigations as well, but it was already well understood because of this excellent Xing blog post which was extremely useful and referenced internally a lot: <a href="https://tech.xing.com/a-reason-for-unexplained-connection-timeouts-on-kubernetes-docker-abd041cf7e02" rel="nofollow">https://tech.xing.com/a-reason-for-unexplained-connection-ti...</a></p>
]]></description><pubDate>Sat, 23 Nov 2019 21:58:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=21616876</link><dc:creator>theojulienne</dc:creator><comments>https://news.ycombinator.com/item?id=21616876</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21616876</guid></item><item><title><![CDATA[New comment by theojulienne in "Debugging Network Stalls on Kubernetes"]]></title><description><![CDATA[
<p>This is actually interesting, we chose to use an overlay network because Kubernetes was a new, complex system that we initially didn't have experience with internally, and so we wanted to isolate problems it could create as much as possible, as well as ensure that teams working on Kubernetes deployment weren't blocked by needing network engineering time.<p>This meant that we felt an overlay network was the most pragmatic (works out of the box) solution, even though IPIP has some drawbacks in adding complexity (within the Kubernetes cluster) and hashes across router ECMP / NIC RX queues poorly (neither look into the inner IP packet as part of hashing). It was definitely a concern of ours, though, considering we'd very intentionally avoided IPIP in our load balancer (<a href="https://github.blog/2018-08-08-glb-director-open-source-load-balancer/" rel="nofollow">https://github.blog/2018-08-08-glb-director-open-source-load...</a> has a write-up of why).<p>We've considered the alternative of announcing a /24 or /25 or similar via BGP on each Kubernetes node, which is supported by systems like Calico, but so far the limitations of IPIP haven't caused an issue because of our Kubernetes clusters being large enough to hash evenly regardless of the addition of an overlay network, so we haven't needed to migrate. It's definitely an interesting trade-off on complexity overall, though - simple routed networks are much easier to understand than another layer of encapsulation.</p>
]]></description><pubDate>Sat, 23 Nov 2019 21:52:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=21616842</link><dc:creator>theojulienne</dc:creator><comments>https://news.ycombinator.com/item?id=21616842</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21616842</guid></item><item><title><![CDATA[New comment by theojulienne in "Debugging Network Stalls on Kubernetes"]]></title><description><![CDATA[
<p>The bcc script was run on the Kubernetes node itself directly over SSH, but it should be possible to run it in a privileged container as well.</p>
]]></description><pubDate>Sat, 23 Nov 2019 21:40:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=21616760</link><dc:creator>theojulienne</dc:creator><comments>https://news.ycombinator.com/item?id=21616760</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21616760</guid></item><item><title><![CDATA[New comment by theojulienne in "Debugging Network Stalls on Kubernetes"]]></title><description><![CDATA[
<p>This is a great question, thank you for asking!<p>Initially a few teams around the org had folks investigating poor performance from different perspectives of the applications that were observing issues. Once it was clear that it wasn’t the applications themselves or their configuration at fault, the team that runs our Kubernetes infrastructure started collating information together (in github issues) and getting to the point of having a clear repro (the Vegeta test) and what to look out for. This was the slowest part of the process because we needed to understand that something non-application-level was going on (and because “random network latency” is a very difficult thing to narrow down) - it probably took on the order of months from the first sign of an issue to fixing all the other issues that were contributing to small amounts of latency and being sure we still had an underlying problem to find.<p>At that point it became clear that something more low level was going on, we put together a focus team from a selection of teams to investigate the underlying cause - that was a group of about 5 engineers actively working on it, with another 5-10 interested engineers following along and helping out. Folks were typically working in pairs or solo to dive in to different potential leads, looping in everyone else in Slack as they go. Most of the work here was finding signal in the noise, we found a lot of other smaller system-level issues along the way that got ruled out and/or low priority to fix. There were other DNS related issues at play, fixing those also improved things, but not the specific underlying issue in the post here. Going down the specific path in the post took just a few days once the first few steps showed something was wrong at the packet level. The remediation from there was also just a few days, because we already had infrastructure in place to detect a known issue and mitigate in a safe/graceful way. The focus team was working on this as a primary task for around a few weeks overall.</p>
]]></description><pubDate>Sat, 23 Nov 2019 00:22:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=21611503</link><dc:creator>theojulienne</dc:creator><comments>https://news.ycombinator.com/item?id=21611503</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21611503</guid></item><item><title><![CDATA[New comment by theojulienne in "GLB: GitHub's open source load balancer"]]></title><description><![CDATA[
<p>Fastly's MAC-based solution to this was actually one of the existing implementations we read about back when designing the original implementation of GLB in 2015/16, along with Facebook's IPVS-based solution. We loved the ideas behind Fastly's model, but didn't want to mess with Layer 2 to do it. GLB Director took some inspiration from both designs in the creation of L4 second chance and the L4/L7 split design.</p>
]]></description><pubDate>Wed, 08 Aug 2018 23:34:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=17720546</link><dc:creator>theojulienne</dc:creator><comments>https://news.ycombinator.com/item?id=17720546</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=17720546</guid></item><item><title><![CDATA[New comment by theojulienne in "GLB: GitHub's open source load balancer"]]></title><description><![CDATA[
<p>We found that we could achieve 10G line rate with just the queues available to the VF, the NIC didn't seem to be a bottleneck providing DPDK was processing packets faster than line rate. It's worth noting that other traffic on the PF was/is minimal in our setup.<p>We tested this using DPDK pktgen on a identically-configured node (GLB Director and pktgen both using DPDK on a VF with flow bifurcation, on 2 separate machines on the same rack/switch), with GLB Director essentially acting as a reflector back to the pktgen node. pktgen was able to generate enough 40 byte TCP packets to saturate 10G with 2 TX cores/queues, and GLB Director was able to process those packets and encapsulate them with a sizeable set of binds/tables with 3 cores doing work (encapsulation) and 1 core doing RX/distribution/TX.</p>
]]></description><pubDate>Wed, 08 Aug 2018 23:27:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=17720516</link><dc:creator>theojulienne</dc:creator><comments>https://news.ycombinator.com/item?id=17720516</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=17720516</guid></item><item><title><![CDATA[New comment by theojulienne in "February 28th DDoS Incident Report"]]></title><description><![CDATA[
<p>During some analysis we did notice that at least some cloud providers default to having instances with public IPs (with no network-level ACLs) by default, and some Linux distributions default to having memcached listening for UDP traffic and binding to `0.0.0.0` by default as soon as it's installed. The unfortunate combination of these result in the machine being vulnerable to being used as an amplification vector in these attacks.</p>
]]></description><pubDate>Thu, 01 Mar 2018 17:03:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=16493775</link><dc:creator>theojulienne</dc:creator><comments>https://news.ycombinator.com/item?id=16493775</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=16493775</guid></item><item><title><![CDATA[New comment by theojulienne in "SYN Flood Mitigation with synsanity"]]></title><description><![CDATA[
<p>Since SYN packets only contain a limited set of information, if the SYN packets have spoofed source addresses then it is very difficult for a device in the destination network to filter/mitigate a SYN flood, since they look like legitimate SYN packets from many different clients. That said, if it's a non-spoofed attack, then you can definitely filter them at the edge. For spoofed attacks, if you filter from multiple global POPs (as do many DDoS scrubbing services), you may be able to guess that a packet is arriving at an inappropriate POP given the source address, but even that will only let you filter a certain amount of the traffic. Because of that, you still need some level of protection at the destination server.</p>
]]></description><pubDate>Thu, 14 Jul 2016 00:04:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=12090752</link><dc:creator>theojulienne</dc:creator><comments>https://news.ycombinator.com/item?id=12090752</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=12090752</guid></item><item><title><![CDATA[New comment by theojulienne in "SYN Flood Mitigation with synsanity"]]></title><description><![CDATA[
<p>For the most part, since synsanity is a subset of SYNPROXY, the performance benchmarks from this SYNPROXY slide deck (and other documentations) are still relevant: <a href="http://people.netfilter.org/hawk/presentations/devconf2014/iptables-ddos-mitigation_JesperBrouer.pdf" rel="nofollow">http://people.netfilter.org/hawk/presentations/devconf2014/i...</a><p>In general in the order of a hundred thousand PPS per core is easily possible, but it really depends how busy the server is, since it primarily comes down to how much CPU is being used to generate the syncookies instead of being allocated to the application.</p>
]]></description><pubDate>Wed, 13 Jul 2016 23:56:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=12090709</link><dc:creator>theojulienne</dc:creator><comments>https://news.ycombinator.com/item?id=12090709</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=12090709</guid></item><item><title><![CDATA[New comment by theojulienne in "SYN Flood Mitigation with synsanity"]]></title><description><![CDATA[
<p>Great question! A large portion of our infrastructure still runs on Ubuntu Precise, and so the default "supported" options for the kernel on those machines are 3.2 or 3.13. Once you're on newer releases you get 4.x support, at the very least in backports, and at that point I would definitely agree the upgrade is worthwhile.</p>
]]></description><pubDate>Wed, 13 Jul 2016 23:46:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=12090643</link><dc:creator>theojulienne</dc:creator><comments>https://news.ycombinator.com/item?id=12090643</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=12090643</guid></item></channel></rss>