
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/">
    <channel>
        <title><![CDATA[ The Cloudflare Blog ]]></title>
        <description><![CDATA[ Get the latest news on how products at Cloudflare are built, technologies used, and join the teams helping to build a better Internet. ]]></description>
        <link>https://blog.cloudflare.com</link>
        <atom:link href="https://blog.cloudflare.com/" rel="self" type="application/rss+xml"/>
        <language>en-us</language>
        <image>
            <url>https://blog.cloudflare.com/favicon.png</url>
            <title>The Cloudflare Blog</title>
            <link>https://blog.cloudflare.com</link>
        </image>
        <lastBuildDate>Sat, 04 Apr 2026 06:31:14 GMT</lastBuildDate>
        <item>
            <title><![CDATA[Removing uncertainty through "what-if" capacity planning]]></title>
            <link>https://blog.cloudflare.com/scenario-planner/</link>
            <pubDate>Fri, 20 Sep 2024 14:01:00 GMT</pubDate>
            <description><![CDATA[ Cloudflare’s Capacity Planning team discusses planning for “what-if” type scenarios, and how they’ve introduced a new “Scenario Planner” system to quickly model hypothetical future changes ]]></description>
            <content:encoded><![CDATA[ <p>Infrastructure planning for a network serving more than 81 million requests at peak and which is globally distributed across <a href="https://www.cloudflare.com/network/"><u>more than 330 cities in 120+ countries</u></a> is complex. The capacity planning team at Cloudflare ensures there is enough capacity in place all over the world so that our customers have one less thing to worry about - our infrastructure, which should just work. Through our processes, the team puts careful consideration into “what-ifs”. What if something unexpected happens and <a href="https://blog.cloudflare.com/post-mortem-on-cloudflare-control-plane-and-analytics-outage/"><u>one of our data centers fails</u></a>? What if one of our largest customers triples, or quadruples their request count?  Across a gamut of scenarios like these, the team works to understand where traffic will be served from and how the Cloudflare customer experience may change.</p><p>This blog post gives a look behind the curtain of how these scenarios are modeled at Cloudflare, and why it's so critical for our customers.</p>
    <div>
      <h2>Scenario planning and our customers</h2>
      <a href="#scenario-planning-and-our-customers">
        
      </a>
    </div>
    <p>Cloudflare customers rely on the data centers that Cloudflare has deployed all over the world, placing us within 50 ms of approximately 95% of the Internet-connected population globally. But round-trip time to our end users means little if those data centers don’t have the capacity to serve requests. Cloudflare has invested deeply into systems that are working around the clock to optimize the requests flowing through our network because we know that failures happen all the time: the Internet can be a volatile place. See <a href="https://blog.cloudflare.com/backbone2024"><u>our blog post from August 2024</u></a> on how we handle this volatility in real time on our backbone, and our <a href="https://blog.cloudflare.com/meet-traffic-manager"><u>blog post from late 2023</u></a> about how another system, Traffic Manager, actively works in and between data centers, moving traffic to optimize the customer experience around constraints in our data centers. Both of these systems do a fantastic job in real time, but there is still a gap — what about over the long term?  </p><p>Most of the volatility that the above systems are built to manage is resolved within shorter time scales than which we build plans for. (There are, of course, some failures that are <a href="https://itweb.africa/content/O2rQGMAEyPGMd1ea"><u>exceptions</u></a>.) Most scenarios we model still need to take into account the state of our data centers in the future, as well as what actions systems like Traffic Manager will take during those periods.  But before getting into those constraints, it’s important to note how capacity planning measures things: in units of CPU Time, defined as the time that each request takes in the CPU.  This is done for the same reasons that <a href="https://blog.cloudflare.com/meet-traffic-manager"><u>Traffic Manager</u></a> uses CPU Time, in that it enables the team to 1) use a common unit across different types of customer workloads and 2) speak a common language with other teams and systems (like Traffic Manager). The same reasoning the Traffic Manager team cited <a href="https://blog.cloudflare.com/meet-traffic-manager"><u>in their own blog post</u></a> is equally applicable for capacity planning: </p><blockquote><p><i>…using requests per second as a metric isn’t accurate enough when actually moving traffic. The reason for this is that different customers have different resource costs to our service; a website served mainly from cache with the WAF deactivated is much cheaper CPU wise than a site with all WAF rules enabled and caching disabled. So we record the time that each request takes in the CPU. We can then aggregate the CPU time across each plan to find the CPU time usage per plan. We record the CPU time in ms, and take a per second value, resulting in a unit of milliseconds per second.</i></p></blockquote><p>This is important for customers for the same reason that the Traffic Manager team cited in their blog post as well: we can correlate CPU time to performance, specifically latency.</p><p>Now that we know our unit of measurement is CPU time, we need to set up our models with the new constraints associated with the change that we’re trying to model.  Specifically, there are a subset of constraints that we are particularly interested in because we know that they have the ability to impact our customers by impacting the availability of CPU in a data center.  These are split into two main inputs in our models: Supply and Demand.  We can think of these as “what-if” questions, such as the following examples:</p>
    <div>
      <h3>Demand what-ifs</h3>
      <a href="#demand-what-ifs">
        
      </a>
    </div>
    <ul><li><p>What if a new customer onboards to Cloudflare with a significant volume of requests and/or bytes?  </p></li><li><p>What if an existing customer increased its volume of requests and/or bytes by some multiplier (i.e. 2x, 3x, nx), at peak, for the next three months?</p></li><li><p>What if the growth rate, in number of requests and bytes, of all of our data centers worldwide increased from X to Y two months from now, indefinitely?</p></li><li><p>What if the growth rate, in number of requests and bytes, of data center facility A increased from X to Y one month from now?</p></li><li><p>What if traffic egressing from Cloudflare to a last-mile network shifted from one location (such as Boston) to another (such as New York City) next week?</p></li></ul>
    <div>
      <h3>Supply what-ifs</h3>
      <a href="#supply-what-ifs">
        
      </a>
    </div>
    <ul><li><p>What if data center facility A lost some or all of its available servers two months from now?</p></li><li><p>What if we added X servers to data center facility A today?</p></li><li><p>What if some or all of our connectivity to other ASNs (<a href="https://www.cloudflare.com/network/"><u>12,500 Networks/nearly 300 Tbps</u></a>) failed now?</p></li></ul>
    <div>
      <h3>Output</h3>
      <a href="#output">
        
      </a>
    </div>
    <p>For any one of these, or a combination of them, in our model’s output, we aim to provide answers to the following: </p><ul><li><p>What will the overall capacity picture look like over time? </p></li><li><p>Where will the traffic go? </p></li><li><p>How will this impact our costs?</p></li><li><p>Will we need to deploy additional servers to handle the increased load?</p></li></ul><p>Given these sets of questions and outputs, manually creating a model to answer each of these questions, or a combination of these questions, quickly becomes an operational burden for any team.  This is what led us to launch “Scenario Planner”.</p>
    <div>
      <h2>Scenario Planner</h2>
      <a href="#scenario-planner">
        
      </a>
    </div>
    <p>In August 2024, the infrastructure team finished building “Scenario Planner”, a system that enables anyone at Cloudflare to simulate “what-ifs”. This provides our team the opportunity to quickly model hypothetical changes to our demand and supply metrics across time and in any of Cloudflare’s data centers. The core functionality of the system has to do with the same questions we need to answer in the manual models discussed above.  After we enter the changes we want to model, Scenario Planner converts from units that are commonly associated with each question to our common unit of measurement: CPU Time. These inputs are then used to model the updated capacity across all of our data centers, including how demand may be distributed in cases where capacity constraints may start impacting performance in a particular location.  As we know, if that happens then it triggers Traffic Manager to serve some portion of those requests from a nearby location to minimize impact on customers and user experience.</p>
    <div>
      <h3>Updated demand questions with inputs</h3>
      <a href="#updated-demand-questions-with-inputs">
        
      </a>
    </div>
    <ul><li><p><b>Question:</b> What if a new customer onboards to Cloudflare with a significant volume of requests?  </p></li><li><p><b>Input:</b> The new customer’s expected volume, geographic distribution, and timeframe of requests, converted to a count of virtual CPUs</p></li><li><p><b>Calculation(s)</b>: Scenario Planner converts from server count to CPU Time, and distributes the new demand across the regions selected according to the aggregate distribution of all customer usage.  </p></li></ul><p>
<br />
</p><ul><li><p><b>Question:</b> What if an existing customer increased its volume of requests and/or bytes by some multiplier (i.e. 2x, 3x, nx), at peak, for the next three months?</p></li><li><p><b>Input</b>: Select the customer name, the multiplier, and the timeframe</p></li><li><p><b>Calculation(s)</b>: Scenario Planner already has how the selected customer’s traffic is distributed across all data centers globally, so this involves simply multiplying that value by the multiplier selected by the user</p></li></ul><p>
<br />
</p><ul><li><p><b>Question:</b> What if the growth rate, in number of requests and bytes, of all of our data centers worldwide increased from X to Y two months from now, indefinitely?</p></li><li><p><b>Input:</b> Enter a new global growth rate and timeframe</p></li><li><p><b>Calculation(s)</b>: Scenario Planner distributes this growth across all data centers globally according to their current growth rate.  In other words, the global growth is an aggregation of all individual data center’s growth rates, and to apply a new “Global” growth rate, the system scales up each of the individual data center’s growth rates commensurate with the current distribution of growth.</p></li></ul><p>
<br />
</p><ul><li><p><b>Question:</b> What if the growth rate, in number of requests and bytes, of data center facility A increased from X to Y one month from now?</p></li><li><p><b>Input:</b> Select a data center facility, enter a new growth rate for that data center and the timeframe to apply that change across.</p></li><li><p><b>Calculation(s)</b>: Scenario Planner passes the new growth rate for the data center to the backend simulator, across the timeline specified by the user</p></li></ul><p>
<br />
</p>
    <div>
      <h3>Updated supply questions with inputs</h3>
      <a href="#updated-supply-questions-with-inputs">
        
      </a>
    </div>
    <ul><li><p><b>Question:</b> What if data center facility A lost some or all of its available servers two months from now?</p></li><li><p><b>Input</b>: Select a data center, and enter the number of servers to remove, or select to remove all servers in that location, as well as the timeframe for when those servers will not be available</p></li><li><p><b>Calculation(s)</b>: Scenario Planner converts the server count entered (including all servers in a given location) to CPU Time before passing to the backend</p></li></ul><p>
<br />
</p><ul><li><p><b>Question:</b> What if we added X servers to data center facility A today?</p></li><li><p><b>Input</b>: Select a data center, and enter the number of servers to add, as well as the timeline for when those servers will first go live</p></li><li><p><b>Calculation(s)</b>: Scenario Planner converts the server count entered (including all servers in a given location) to CPU Time before passing to the backend</p></li></ul><p>
<br />
</p><p>We made it simple for internal users to understand the impact of those changes because Scenario Planner outputs the same views that everyone who has seen our heatmaps and visual representations of our capacity status is familiar with. There are two main outputs the system provides: a heatmap and an “Expected Failovers” view. Below, we explore what these are, with some examples.</p>
    <div>
      <h3>Heatmap</h3>
      <a href="#heatmap">
        
      </a>
    </div>
    <p>Capacity planning evaluates its success on its ability to predict demand: we generally produce a weekly, monthly, and quarterly forecast of 12 months to three years worth of demand, and nearly all of our infrastructure decisions are based on the output of this forecast.  Scenario Planner provides a view of the results of those forecasts that are implemented via a heatmap: it shows our current state, as well as future planned server additions that are scheduled based on the forecast.  </p><p>Here is an example of our heatmap, showing some of our largest data centers in Eastern North America (ENAM). Ashburn is showing as yellow, briefly, because our capacity planning threshold for adding more server capacity to our data centers is 65% utilization (based on CPU time supply and demand): this gives the Cloudflare teams time to procure additional servers, ship them, install them, and bring them live <i>before</i> customers will be impacted and systems like Traffic Manager would begin triggering.  The little cloud icons indicate planned upgrades of varying sizes to get ahead of forecasted future demand well ahead of time to avoid customer performance degradation.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/PXIr1mpsrWPLmWpP9RCPg/5062269f1432a41c8177a7850243ab8c/BLOG-2554_2.png" />
          </figure><p><b></b></p><p>The question Scenario Planner answers then is how this view changes with a hypothetical scenario: What if our Ashburn, Miami, and Atlanta facilities shut down completely?  This is unlikely to happen, but we would expect to see enormous impact on the remaining largest facilities in ENAM. We’ll simulate all three of these failing at the same time, taking them offline indefinitely:</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3apNpQAHPs9uY1QTAxOQ6d/6230e0950d3f70b50e17bfb10bca999c/BLOG-2554_3.png" />
          </figure>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6vfWrww4uT8VWtLa0vcDAM/dacf2bf102c8c38672ff08c48bc42542/BLOG-2554_4.png" />
          </figure>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7amWSND6PZ95oVJA5oO0Qc/588c7d7efcccfedca7cec240f830fa01/BLOG-2554_5.png" />
          </figure><p><b></b></p><p>This results in a view of our capacity through the rest of the year in the remaining large data centers in ENAM — capacity is clearly constrained: Traffic Manager will be working hard to mitigate any impact to customer performance if this were to happen. Our capacity view in the heatmap is capped at 75%: this is because Traffic Manager typically engages around this level of CPU utilization. Beyond 75%, Cloudflare customers may begin to experience increased latency, though this is dependent on the product and workload, and is in reality much more dynamic. </p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5Tse9FexuemDHzExPYnY0i/0cdba516c0b33888b7079d435ec02fd6/BLOG-2554_6.png" />
          </figure><p><b></b></p><p>This outcome in the heatmap is not unexpected.  But now we typically get a follow-up question: clearly this traffic won’t fit in just Newark, Chicago, and Toronto, so where do all these requests get served from?  Enter the failover simulator: Capacity Planning has been simulating how Traffic Manager may work in the long term for quite a while, and for Scenario Planner, it was simple to extend this functionality to answer exactly this question.</p><p>There is currently no traffic being moved by Traffic Manager from these data centers, but our simulation shows a significant portion of the Atlanta CPU time being served from our DFW/Dallas data center as well as Newark (bottom pink), and Chicago (orange) through the rest of the year, during this hypothetical failure. With Scenario Planner, Capacity Planning can take this information and simulate multiple failures all over the world to understand the impact to customers, taking action to ensure that customers trusting Cloudflare with their web properties can expect high performance even in instances of major data center failures. </p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1iv8nxYdIXOJ626UHpUadI/8581d88d740b6369ba5fc8500d9c7d97/Screenshot_2024-09-18_at_10.27.50_PM.png" />
          </figure><p><b></b></p>
    <div>
      <h2>Planning with uncertainty</h2>
      <a href="#planning-with-uncertainty">
        
      </a>
    </div>
    <p>Capacity planning a large global network comes with plenty of uncertainties. Scenario Planner is one example of the work the Capacity Planning team is doing to ensure that the millions of web properties our customers entrust to Cloudflare can expect consistent, top tier performance all over the world.</p><p>The Capacity Planning team is hiring — check out the <a href="https://www.cloudflare.com/careers/"><u>Cloudflare careers page</u></a> and <a href="https://www.cloudflare.com/careers/jobs/?title=capacity"><u>search for open roles on the Capacity Planning team</u></a>.</p> ]]></content:encoded>
            <category><![CDATA[Data Center]]></category>
            <category><![CDATA[Edge]]></category>
            <category><![CDATA[Cloudflare Network]]></category>
            <category><![CDATA[Network Services]]></category>
            <guid isPermaLink="false">13ueCTf2YFQfu3c1KeOlWj</guid>
            <dc:creator>Curt Robords</dc:creator>
        </item>
        <item>
            <title><![CDATA[Cloudflare deployment in Guam]]></title>
            <link>https://blog.cloudflare.com/cloudflare-deployment-in-guam/</link>
            <pubDate>Mon, 25 Jul 2022 13:00:00 GMT</pubDate>
            <description><![CDATA[ Cloudflare Deployment in Guam - Delivering a Better Internet for Faraway Pacific Ocean Archipelagos Residents ]]></description>
            <content:encoded><![CDATA[ 
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6oXc7IRzLqEUfS9I7xGdrG/dbf3056ab6a7b9d38013629de9f593ff/image7-9.png" />
            
            </figure><p>Having fast Internet properties means being as few milliseconds as possible away from our customers and their users, no matter where they are on Earth. And because of the design of Cloudflare's network we don't just make Internet properties faster by being closer, we bring our <a href="https://www.cloudflare.com/products/zero-trust/">Zero Trust</a> services closer too. So whether you're connecting to a public API, a website, a SaaS application, or your company's internal applications, we're close by.</p><p>This is possible by adding new cities, partners, capacity, and cables. And we have seen over and over again how making the Internet faster in a region also can have a clear impact on traffic: if the experience is quicker, people usually do more online.</p><p>Cloudflare’s network keeps increasing, and its global footprint does so accordingly. In April 2022 we announced that <a href="/new-cities-april-2022-edition/">the Cloudflare network now spans 275 cities</a> and the number keeps growing.</p><p>In this blog post we highlight the deployment of our data center in <a href="https://en.wikipedia.org/wiki/Hag%C3%A5t%C3%B1a,_Guam">Hagatna, Guam</a>.</p>
    <div>
      <h3>Why a blog about Guam?</h3>
      <a href="#why-a-blog-about-guam">
        
      </a>
    </div>
    <p>Guam is about 2,400 km from both Tokyo in the north and Manila in the west, and about 6,100 km from Honolulu in the east. Honolulu itself is the most remote major city in the US and one of the most remote in the world, the closest major city from it being San Francisco, California at 3,700 km. From here one can derive how far Guam is from the US to the west and from Asia to the east.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3WhLFmnmj0yt4ZUnvhU1tb/e66197c0fd0356046d065026a8c65a07/image3-9.png" />
            
            </figure><p>Figure 1: Guam Geographical Location.</p><p>Why is this relevant? As explained <a href="https://www.cloudflare.com/learning/performance/glossary/what-is-latency/">here</a>, latency is the time it takes for data to pass from one point on a network to another. And one of the main reasons behind network latency is the distance between client devices — like a browser on a mobile phone — making requests and the servers responding to those requests. So, if we consider where Guam is geographically, we get a good picture about how Guam’s residents can be affected by the long distances their Internet requests, and responses, have to travel.</p><p>This is why every time Cloudflare adds a new location, we help make the Internet a bit faster. The reason is that every new location brings Cloudflare’s services closer to the users. As part of Cloudflare’s mission, the Guam deployment is a perfect example of how we are going from being the most global network on Earth to the most local one as well.</p>
    <div>
      <h3>Submarine cables</h3>
      <a href="#submarine-cables">
        
      </a>
    </div>
    <p><a href="https://submarine-cable-map-2022.telegeography.com/">There are 486 active submarine cables and 1,306 landings that are currently active or under construction</a>, running to an estimated 1.3 million km around the globe.</p><p><a href="https://www.submarinecablemap.com/country/guam">A closer look at specific submarine cables landing in Guam</a> show us that the region is actually well served in terms of submarine cables, with several connections to the mainland such as Japan, Taiwan, Philippines, Australia, Indonesia and Hawaii, therefore making Guam more resilient to matters such as the one that affected Tonga in January 2022 due to the impact of a volcanic eruption on submarine cables - we wrote about it <a href="/tonga-internet-outage/">here</a>.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/42ARhRWKJc7Q01c28WM846/1239c2930cd6096bb37b18e26d1a7d01/image2-16.png" />
            
            </figure><p>Figure 2: Submarine Cables Landing in Guam (source: <a href="https://www.submarinecablemap.com/country/guam">submarinecablemap.com</a>)</p><p>The picture above also shows the relevance of Guam for other even more remote locations, such as the <a href="https://en.wikipedia.org/wiki/Federated_States_of_Micronesia">Federated States of Micronesia (FSM)</a> or the <a href="https://en.wikipedia.org/wiki/Marshall_Islands">Marshall Islands</a>, which have an ‘extra-hop’ to cover when trying to reach the rest of the Internet. <a href="https://en.wikipedia.org/wiki/Palau">Palau</a> also relies on Guam but, from a resilience point of view, has alternatives to locations such as the Philippines or to Australia.</p>
    <div>
      <h3>Presence at Mariana Islands Internet Exchange</h3>
      <a href="#presence-at-mariana-islands-internet-exchange">
        
      </a>
    </div>
    <p>Cloudflare’s presence in Guam is through Mariana Islands <a href="https://www.cloudflare.com/learning/cdn/glossary/internet-exchange-point-ixp/">Internet Exchange</a>, or <a href="https://mariix.net/">MARIIX</a>, allowing Cloudflare to <a href="https://mariix.net/peering">peer with participants</a> such as:</p><ul><li><p>AS 395400 - University of Guam</p></li><li><p>AS 9246 - GTA Teleguam</p></li><li><p>AS 3605 - DoCoMo Pacific</p></li><li><p>AS 7131 - IT&amp;E</p></li><li><p>AS 17456 - PDS</p></li></ul><p>As there are multiple participants, these are being added gradually. The first was AS 7131,  being served from April 2022, and the latest addition is AS 9246, from July 2022.</p><p>As some of these ASNs or ASs (<a href="https://www.cloudflare.com/learning/network-layer/what-is-an-autonomous-system/">autonomous systems</a> — large networks or group of networks) have their own downstream customers, further ASs can leverage Cloudflare’s deployment at Guam, examples being AS 17893 - Palau National Communications Corp - or AS 21996 - Guam Cell.</p><p>Therefore, the Cloudflare deployment brings not only a better (and generally faster) Internet to Guam’s residents, but also to residents in nearby archipelagos that are anchored on Guam. <a href="https://www.worldometers.info/world-population/">In May 2022, according to UN’s forecasts</a>, the covered resident population in the main areas in the region stands around 171k in Guam, 105k in FSM and 60k in the Marshall Islands.</p><p>For this deployment, Cloudflare worked with the skilled MARIIX personnel for the physical installations, provisioning and services turn-up. Despite the geographical distance and time zone differences (Hagatna is 9 hours ahead of GMT but only two hours ahead of the Cloudflare office in Singapore, so the time difference wasn’t a big challenge), all the logistics involved and communications went smoothly. A <a href="https://blog.apnic.net/2022/07/06/mariix-improves-local-internet-for-growing-pacific-hub/">recent blog posted by APNIC</a>, where we can see some personnel with whom Cloudflare worked, reiterates the valuable work being done locally and the increasing importance of Guam in the region.</p>
    <div>
      <h3>Performance impact for local/regional habitants</h3>
      <a href="#performance-impact-for-local-regional-habitants">
        
      </a>
    </div>
    <p>Before Cloudflare’s deployment in Guam, customers of local ASs trying to reach Internet properties via Cloudflare’s network were redirected mainly to Cloudflare’s deployments in <a href="https://www.cloudflare.com/network/">Tokyo and Seattle</a>. This is due to the anycast routing used by Cloudflare — as described <a href="https://www.cloudflare.com/learning/cdn/glossary/anycast-network/">here</a>; anycast typically routes incoming traffic to the nearest data center. In the case of Guam, and as previously described, these large distances to the nearest locations represents a distance of thousands of kilometers or, in other words, high latency thus affecting user experience badly.</p><p>With Cloudflare’s deployment in Guam, Guam’s and nearby archipelagos’ residents are no longer redirected to those faraway locations, instead they are served locally by the new Cloudflare servers. Although a decrease of a few milliseconds may not seem a lot, it actually represents a significant boost in user experience as latency is dramatically reduced. As the total distance between users and servers is reduced, load time is reduced as well. And as users very often quit waiting for a site to load when the load time is high, the opposite occurs as well, i.e., users are more willing to stay within a site if loading times are good. This improvement represents both a better user experience and higher use of the Internet.</p><p>In the case of Guam, we use AS 9246 as an example as it was previously served by Seattle but since around 23h00 UTC 14/July/2022 is served by Guam, as illustrated below:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5fWbSHuuVlhYnjuxpumovQ/e14ee81f5b64a52861a2f403048ab79e/1-1.png" />
            
            </figure><p>Figure 3: Requests per Colo for AS 9246 Before vs After Cloudflare Deployment at Guam.</p><p>The following chart displays the median and the 90th percentile of the eyeball TCP RTT for AS 9246 immediately before and after AS 9246 users started to use the Guam deployment:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/30b6AqRcEICiRdXdVqXZny/686d02c528ef5eeb37d4cab7079ecb6f/2-1.png" />
            
            </figure><p>Figure 4: Eyeball TCP RTT for AS 9246 Before vs After Cloudflare Deployment at Guam.</p><p>From the chart above we can derive that the overall reduction for the eyeball TCP <a href="https://www.cloudflare.com/learning/cdn/glossary/round-trip-time-rtt/">RTT</a> immediately before and after Guam’s deployment was:</p><ul><li><p>Median decreased from 136.3ms to 9.3ms, a 93.2% reduction;</p></li><li><p>P90 decreased from 188.7ms to 97.0ms, a 48.5% reduction.</p></li></ul><p>When comparing the [12h00 ; 13h00] UTC period of the 14/July/2022 (therefore, AS 9246 still served by Seattle) vs the same hour but for the 15th/July/2022 (thus AS9246 already served by Guam), the differences are also clear. We pick this period as this is a busy hour period locally since local time equals UTC plus 10 hours:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3bGuMIPCrGjL7JXzbPpesO/b82ece1afba89ef9900e73dca85bc5ed/3-1.png" />
            
            </figure><p>Figure 5 - Median Eyeball TCP RTT for AS 9246 from Seattle vs Guam.</p><p>The median eyeball TCP RTT decreased from 146ms to 12ms, i.e., a massive 91.8% reduction and perhaps, due to already mentioned geographical specificities, one of Cloudflare's deployments representing a larger reduction in latency for the local end users.</p>
    <div>
      <h3>Impact on Internet traffic</h3>
      <a href="#impact-on-internet-traffic">
        
      </a>
    </div>
    <p>We can actually see an increase in HTTP requests in Guam since early April, right when we were setting up our Guam data center. The impact of the deployment was more clear after mid-April, with a further step up in mid-June. Comparing March 8 with July 17, there was an 11.5% increase in requests, as illustrated below:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1JxzkZSSoKkogNbs4YwTMY/b4c748335e83bfcacb4c2d142e6cf0e5/4-1.png" />
            
            </figure><p>Figure 6: Trend in HTTP Requests per Second in Guam.</p>
    <div>
      <h3>Edge Partnership Program</h3>
      <a href="#edge-partnership-program">
        
      </a>
    </div>
    <p>If you’re an ISP that is interested in hosting a Cloudflare cache to improve performance and reduce backhaul, get in touch on our <a href="https://www.cloudflare.com/partners/peering-portal/?cf_target_id=B87954540A24583D38E89307A8ADC63D">Edge Partnership Program</a> page. And if you’re a software, data, or network engineer – or just the type of person who is curious and wants to help make the Internet better – consider <a href="https://www.cloudflare.com/careers/jobs/">joining our team</a>.</p> ]]></content:encoded>
            <category><![CDATA[Cloudflare Network]]></category>
            <category><![CDATA[Data Center]]></category>
            <category><![CDATA[APJC]]></category>
            <guid isPermaLink="false">0I6nSi8jrvACD0QKGgI4F</guid>
            <dc:creator>David Antunes</dc:creator>
        </item>
        <item>
            <title><![CDATA[ARMs Race: Ampere Altra takes on the AWS Graviton2]]></title>
            <link>https://blog.cloudflare.com/arms-race-ampere-altra-takes-on-aws-graviton2/</link>
            <pubDate>Thu, 11 Mar 2021 12:00:00 GMT</pubDate>
            <description><![CDATA[ A comparison between the Ampere Altra and the AWS Graviton2, the two ARM Neoverse N1-based processors. ]]></description>
            <content:encoded><![CDATA[ <p>Over three years ago, we embraced the ARM ecosystem after <a href="/arm-takes-wing/">evaluating the Qualcomm Centriq</a>. The Centriq and its Falkor cores delivered a significant reduction in power consumption while maintaining a comparable performance against the processor that was powering our server fleet at the time. By the time we completed <a href="/porting-our-software-to-arm64/">porting our software stack to be compatible with ARM</a>, Qualcomm decided to <a href="https://www.theregister.com/2018/12/10/qualcomm_layoffs/">exit the server business</a>. Since then, we have been waiting for another server-grade ARM processor with hopes to improve our power efficiencies across our <a href="https://www.cloudflare.com/network/">global network</a>, which now spans more than 200 cities in over 100 countries.</p><p>ARM has introduced the Neoverse N1 platform, the blueprint for creating power-efficient processors licensed to institutions that can customize the original design to meet their specific requirements. Ampere licensed the Neoverse N1 platform to create the Ampere Altra, a processor that allows companies that own and manage their own fleet of servers, like ourselves, to take advantage of the expanding ARM ecosystem. We have been working with Ampere to determine whether Altra is the right processor to power our first generation of ARM edge servers.</p><p>The AWS Graviton2 is the only other Neoverse N1-based processor publicly accessible, but only made available through Amazon’s cloud product portfolio. We wanted to understand the differences between the two, so we compared Ampere’s single-socket server, named Mt. Snow, equipped with the Ampere Altra Q80-30 against an EC2 instance of the AWS Graviton2.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4gIm083qtHDE0lsyNQ9trI/871b344d6f1a3abc480c43ebec66973b/image22.png" />
            
            </figure>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4p4UD5vZMIdLhnicWpFoNn/50f867f2a2841f22a9f0468594417926/image13-1.png" />
            
            </figure><p>The Mt. Snow 1P server equipped with the Ampere Altra Q80-30</p><p>The Ampere Altra and AWS Graviton2 alike are based on the Neoverse N1 platform by ARM, manufactured on the TSMC 7nm process. The N1 reference core features an 11-stage out-of-order execution pipeline along with the <a href="https://www.arm.com/solutions/infrastructure">following specifications</a> in ARM nomenclature.</p>
<table>
<thead>
  <tr>
    <th>Pipeline Stage</th>
    <th>Width</th>
  </tr>
</thead>
<tbody>
  <tr>
    <td>Fetch</td>
    <td>4 instructions/cycle</td>
  </tr>
  <tr>
    <td>Decode</td>
    <td>4 instructions/cycle</td>
  </tr>
  <tr>
    <td>Rename</td>
    <td>4 Mops/cycle</td>
  </tr>
  <tr>
    <td>Dispatch</td>
    <td>8 µops/cycle</td>
  </tr>
  <tr>
    <td>Issue</td>
    <td>8 µops/cycle</td>
  </tr>
  <tr>
    <td>Commit</td>
    <td>8 µops/cycle</td>
  </tr>
</tbody>
</table>
<p>A <a href="https://developer.arm.com/ip-products/processors/neoverse/neoverse-n1">N1 core</a> contains 64KiB of L1 instruction and 64KiB of L1 data caches and a dedicated L2 cache that can be implemented with up to 1MiB per core. The L3 cache or the System Level Cache can be implemented with up to 256MiB (up to 4MiB per slice, up to 64 slices) shared by all cores.</p>

<table>
<thead>
  <tr>
    <th>Cache Hierarchy</th>
    <th>Capacity</th>
  </tr>
</thead>
<tbody>
  <tr>
    <td>L1i Cache</td>
    <td>64 KiB</td>
  </tr>
  <tr>
    <td>L1d Cache</td>
    <td>64 KiB</td>
  </tr>
  <tr>
    <td>L2 Cache</td>
    <td>Up to 1 MiB</td>
  </tr>
  <tr>
    <td>L3 Cache</td>
    <td>Up to 256 MiB</td>
  </tr>
</tbody>
</table>    
<p>A pair of N1 cores can optionally be combined into a dual-core configuration through the Component Aggregation Layer, then placed inside the mesh interconnects named the Coherent Mesh Network or <a href="https://developer.arm.com/ip-products/system-ip/corelink-interconnect/corelink-coherent-mesh-network-family/corelink-cmn-600">CMN-600</a> that supports up to 64 pairs of cores, totaling 128 cores.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/13WYF0ug8Fll9whw3hAYQc/b2120a5ab9238d7fb88a45a9216bc955/image14-2.png" />
            
            </figure><p>Component Aggregation Layer (CAL) supports up to two N1 cores</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/38oEPfzBX5YmBmZPvDfE4q/732ba4ed273fabe97a548dd6604d0ed9/image7-3.png" />
            
            </figure><p>Coherent Hub Interface (CHI) is used to connect components to the Mesh Cross Point (XP)</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2xr86zntLVgCyTRqPOyZt6/a1662c7cb04adddf99c1c754a318783f/image17-1.png" />
            
            </figure><p>Coherent Mesh Network (CMN-600) can be scaled up to 8x8 XPs supporting up to 128 cores</p>
    <div>
      <h2>System Specifications</h2>
      <a href="#system-specifications">
        
      </a>
    </div>
    
<table>
<thead>
  <tr>
    <th></th>
    <th>AWS (Annapurna Labs)</th>
    <th>Ampere</th>
  </tr>
</thead>
<tbody>
  <tr>
    <td>Processor Model</td>
    <td>AWS Graviton2</td>
    <td>Ampere Altra Q80-30</td>
  </tr>
  <tr>
    <td>ISA</td>
    <td>ARMv8.2</td>
    <td>ARMv8.2+</td>
  </tr>
  <tr>
    <td>Core / Thread Count</td>
    <td>64C / 64T</td>
    <td>80C / 80T</td>
  </tr>
  <tr>
    <td>Operating Frequency</td>
    <td>2.5 GHz</td>
    <td>3.0 GHz</td>
  </tr>
  <tr>
    <td>L1 Cache Size</td>
    <td>8 MiB (64 x 128 KiB)</td>
    <td>10 MiB (80 x 128 KiB)</td>
  </tr>
  <tr>
    <td>L2 Cache Size</td>
    <td>64 MiB (64 x 1 MiB)</td>
    <td>80 MiB (80 x 1 MiB)</td>
  </tr>
  <tr>
    <td>L3 Cache Size</td>
    <td>32 MiB</td>
    <td>32 MiB</td>
  </tr>
  <tr>
    <td>System Memory</td>
    <td>256 GB (8 x 32 GB DDR4-3200)</td>
    <td>256 GB (8 x 32 GB DDR4-3200)</td>
  </tr>
</tbody>
</table>
<p>We can verify that the two processors are based on the Neoverse N1 platform by checking <code>CPU part</code> inside <code>cpuinfo</code>, which returns <code>0xd0c</code>, the <a href="https://developer.arm.com/documentation/100616/0301/register-descriptions/aarch64-system-registers/midr-el1--main-id-register--el1">designated part number for the Neoverse N1</a>.</p>
            <pre><code>sung@ampere-altra:~$ cat /proc/cpuinfo | grep 'CPU part' | head -1
CPU part	: 0xd0c</code></pre>
            
            <pre><code>sung@aws-graviton2:~$ cat /proc/cpuinfo | grep 'CPU part' | head -1
CPU part	: 0xd0c</code></pre>
            <p>Ampere backported various features into the Ampere Altra notably, <a href="https://developer.arm.com/support/arm-security-updates/speculative-processor-vulnerability">speculative side-channel attack mitigations</a> that include Meltdown and Spectre (variants 1 and 2) from the ARMv8.5 instruction set architecture, giving Altra the “+” designation in their ISA (ARMv8.2+).</p><p>The Ampere Altra consists of 25% more physical cores and 20% higher operating frequency than the AWS Graviton2. Because of Altra’s higher core-count and frequency, we should expect the Ampere Altra to perform up to 50% better than the AWS Graviton2 in compute-bound workloads.</p><p>Both Ampere and AWS decided to implement 1MiB of L2 cache per core, but only 32MiB of L3 or System Level Cache, although the CMN-600 specification allows up to 256MiB. This leaves the Ampere Altra with a lower L3 cache-per-core ratio than the AWS Graviton2 and places Altra at a potential disadvantage in situations where the <a href="/impact-of-cache-locality/">application’s working set does not fit within the L3 cache</a>.</p>
    <div>
      <h2>Methodology</h2>
      <a href="#methodology">
        
      </a>
    </div>
    <p>We imaged both systems with Debian Buster and downloaded our open-source benchmark suite, <a href="https://github.com/cloudflare/cf_benchmark">cf_benchmark</a>. This benchmark suite executes 49 different workloads over approximately 15 to 30 minutes. Each workload utilizes a library that has either been used in our stack or considered at one point or another. Due to the relatively short duration of the benchmark and the libraries called by the workloads, we run cf_benchmark as our smoke test on any new system brought in for evaluation. We recommend cf_benchmark to our technology partners when we discuss new hardware, primarily processors, to ensure these workloads can compile and run successfully.</p><p>We ran cf_benchmark multiple times and observed no significant run-to-run variations. Similar to industry standard benchmarks, we calculated the overall score using geometric mean to provide a more conservative result than arithmetic mean across all 49 workloads and category scores using their respective subset of workloads.</p><p>In single-core scenarios, cf_benchmark will spawn a single application thread, occupying a single hardware thread. In multi-core scenarios, cf_benchmark will spawn as many application threads as needed until all hardware threads on the processor are occupied. Neither processors implemented <a href="https://en.wikipedia.org/wiki/Simultaneous_multithreading">simultaneous multithreading</a>, so each physical core can only execute one hardware thread at a time.</p>
    <div>
      <h2>Overall Performance Results</h2>
      <a href="#overall-performance-results">
        
      </a>
    </div>
    <p>Given Altra’s advantage in both operating frequency and sheer core-count, the Ampere Altra took the lead across single and multi-core performance.</p><p>In single-core performance, the Ampere Altra outperformed the AWS Graviton2 by 16%. The differences in operating frequencies between the two processors gave the Ampere Altra a proportional advantage of up to 20% in more than half of our single-core workloads.</p><p>In multi-core performance, the Ampere Altra continued to maintain its edge over the AWS Graviton2 by 31%. We expected the Ampere Altra to attain a theoretical advantage between 20% to 50% due to Altra’s higher operating frequency and core count while taking inherent overheads associated with increasing core count into consideration, primarily scaling out the mesh network. We observed that the majority of our multi-core workloads fell within this 20% to 50% range.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7hR6z2vf42BIvNqGDe7Fzo/d5334d860decb6ccc04213ba88016302/image27.png" />
            
            </figure>
    <div>
      <h2>Categorized Results</h2>
      <a href="#categorized-results">
        
      </a>
    </div>
    <p>In OpenSSL and LuaJIT, the Ampere Altra scaled proportionally with its operating frequency in single-core performance and continued to scale out with its core count in multi-core performance. The Ampere Altra maintained its lead in the vast majority of compression and Golang workloads with the exception of Brotli level 9 compression and some Golang multi-core workloads that were not able to keep the two processors busy at 100% CPU utilization.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7rgDArSL0EoMlSPBYXOPX0/5c85608e43ddc417565b18b12ead1fb7/image9-2.png" />
            
            </figure>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4Xk9KE86pFwyLKTumNkXG6/4713fc65624711bea6a0d21fb0ccc8a8/image29.png" />
            
            </figure>
    <div>
      <h2>OpenSSL</h2>
      <a href="#openssl">
        
      </a>
    </div>
    <p>As described <a href="/arm-takes-wing/">previously</a>, we use a fork of OpenSSL, named BoringSSL, in places such as for <a href="https://www.cloudflare.com/learning/ssl/what-happens-in-a-tls-handshake/">TLS handshake</a> handling. The original OpenSSL comes with a built-in benchmark called `speed` that measures single and multi-core performance. The asymmetric and <a href="/it-takes-two-to-chacha-poly/">symmetric</a> crypto workloads found here saturated the processors at 100% CPU utilization. Altra’s performance aligned with our expectations throughout this entire category by maintaining a consistent 20% advantage over the AWS Graviton2 in single-core and continued to scale with its core count and performed, on average, 47% better in multi-core performance.</p>
    <div>
      <h3>Public Key Cryptography</h3>
      <a href="#public-key-cryptography">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6WTE3GQC2F1PJGKCOJlIBn/872241c8d731b3a23ba4fa1a6be58c42/image4-9.png" />
            
            </figure>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/WyA8y24VhaTVc6KSGMwgA/94b04a984a96434c5e27f580eae4781b/image6-4.png" />
            
            </figure>
    <div>
      <h3>Symmetric Key Cryptography</h3>
      <a href="#symmetric-key-cryptography">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/IAWDbmAmeDB398TEqlFz7/ab9e3db71dd253ebb31f86bdc294bd07/image3-10.png" />
            
            </figure>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6Vjjz0U0no96OWEUoPOyrL/43cc9a669378a0acc7b811d05def6848/image28.png" />
            
            </figure>
    <div>
      <h2>LuaJIT</h2>
      <a href="#luajit">
        
      </a>
    </div>
    <p>We commonly describe LuaJIT as the <a href="/an-epyc-trip-to-rome-amd-is-cloudflares-10th-generation-edge-server-cpu/">glue that holds Cloudflare together</a>. LuaJIT has a <a href="/pushing-nginx-to-its-limit-with-lua/">long history</a> here at Cloudflare for the same reason it is widely used in the videogame industry, where performance and responsiveness are non-negotiable requirements.</p><p>Although we have been transitioning from LuaJIT <a href="/building-fast-interpreters-in-rust/">to Rust</a>, we welcomed the <a href="https://developer.arm.com/documentation/100616/0400/functional-description/level-1-memory-system/cache-behavior/instruction-cache-coherency?lang=en">instruction cache coherency</a> implemented into the Ampere Altra. The instruction cache coherency aims to address the <a href="https://community.arm.com/developer/ip-products/processors/b/processors-ip-blog/posts/caches-and-self-modifying-code">drawbacks associated with LuaJIT</a>, such as its self-modifying properties, where the next instruction that needs to be fetched is not in the instruction cache, but rather the data cache. With this feature enabled, the instruction cache becomes coherent or made aware of changes made in the data cache. The L2 cache becomes inclusive of the L1 instruction cache, meaning any cache lines found in the L1 instruction cache should also be present in the L2 cache. Furthermore, L2 cache intercepts any invalidations or stores made to any of the L2’s cache lines and propagates those changes up to the L1 instruction cache.</p><p>The Ampere Altra performed well within single-core performance except for fasta where both processors stalled at the front-end of the pipeline. In the multi-core version of fasta, Altra did not spend as many cycles stalled in the front-end likely due to Ampere's implementation of the instruction cache coherency. All other workloads continued to scale in multi-core workloads with binary trees coming in at 73%. Spectral was omitted since the multi-core variant failed to run on both servers.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1PTr1VFKBOtT3OJa2p1OIL/6c89fe575583d30dc7758ac071853be9/image25.png" />
            
            </figure>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1v8ZAjMln1cgNxC74M6rFH/f64281063db5deafcdb2c0df3d2f12cb/image18-1.png" />
            
            </figure>
    <div>
      <h2>Compression</h2>
      <a href="#compression">
        
      </a>
    </div>
    <p><a href="/results-experimenting-brotli/">Brotli and Gzip</a> are the two primary types of compression we use at Cloudflare. We find value in highly efficient compression algorithms as it helps us find a balance between spending more resources on a faster processor or having a larger storage capacity in addition to being able to transfer contents faster. The Ampere Altra performed well on both compression types with the exception of Brotli level 9 and Gzip level 4 multi-core performance.</p>
    <div>
      <h3>Brotli</h3>
      <a href="#brotli">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3XaMt4Zk04Sci4xEwYbEfZ/452e4a8fdd91eb329f72d5931ebf6fd4/image2-6.png" />
            
            </figure>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/8HNEM6fNB1ZHdJBi9WXwq/0ac8c02525138234f57138f63785ccf7/image30.png" />
            
            </figure><p>Out of the entire benchmark suite, Brotli level 9 caused the largest delta between the Ampere Altra and the AWS Graviton2. Although we do not use <a href="/arm-takes-wing/">Brotli level 7 and above</a> when performing dynamic compression, we decided to investigate further.</p><p>From historical observations, we noticed that most processors tend to experience significant performance degradation at level 9. Compression workloads generally consist of a higher branch instructions mix, and we found approximately 15% to 20% of the dynamic instructions to be branch instructions. Intuitively, we first looked at the misprediction rate since a high miss rate will quickly add up penalty cycles. However, to our surprise, we found the misprediction rate at level 9 very low.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/386axQVNM8iSnFqudd6Ogm/05018c18024e803c3cd0b9119dec2ecc/image15-3.png" />
            
            </figure><p>By analyzing our dataset further, we found the common underlying cause appeared to be the high number of page faults incurred at level 9. Ampere has demonstrated that by increasing the page size from 4K to 64K bytes, we can alleviate the bottleneck and bring the Ampere Altra at parity with the AWS Graviton2. We plan to experiment with large page sizes in the future as we continue to evaluate Altra.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3DKo7g8rI17OWj0EYTaajg/0fd048aa115e975a5596ea6d4484e7c3/image16-1.png" />
            
            </figure>
    <div>
      <h3>Gzip</h3>
      <a href="#gzip">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/Ysrj5aCW6xRAhfvaAU18x/6a4097d080255082d82f4e500b115850/image1-12.png" />
            
            </figure>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6Kq3MvWAn8SU4x6aMtXB70/d8ed96d3a91d806b2169533e3c3d320f/image19-1.png" />
            
            </figure>
    <div>
      <h2>Golang</h2>
      <a href="#golang">
        
      </a>
    </div>
    <p>LuaJIT, Rust, C++, and Go are some of our <a href="/go-at-cloudflare/">primary languages</a>; the Golang workloads found here include <a href="/go-crypto-bridging-the-performance-gap/">cryptography</a>, compression, regular expression, and string manipulation. The Ampere Altra performed proportionally to its operating frequency against the AWS Graviton2 in the vast majority of single-core performance. In multi-core performance, the workloads that could not saturate the processors to 100% CPU utilization did not scale proportionally to the two processor’s respective operating frequencies and core count.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/57IXPa7WCSeZKgL1uxFnwZ/1464a91c07a9d37f2f54a5c2a40cf4e3/image11-1.png" />
            
            </figure>
    <div>
      <h3>Go Cryptography</h3>
      <a href="#go-cryptography">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2sFiAVlYH3Yf7HRMHcs4lD/5d5767056e6bbdfcb1806a9a64837896/image8-3.png" />
            
            </figure>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4MtZ4a8jzSBvuILTK63K5N/bee30dc62c8c19906b025be68093a6c0/image23.png" />
            
            </figure>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5hUMrhpmi50JSnqTFSHCEI/f414af6ea4350c6001d3215414c476d9/image26.png" />
            
            </figure>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/Q4pFSFuq2vIdFqXRZTDuc/a150996a34937b5dc6a6abb03f8e6b81/image21-6.png" />
            
            </figure>
    <div>
      <h3>Go Compression &amp; String</h3>
      <a href="#go-compression-string">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6eO7U4KLBUdakYPkZAMDEm/a9a49d5d059be39825c2492876e612c8/image24.png" />
            
            </figure>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2jfNL4hgXTgikqd1xxKGS/c9bd212d89e2a34f64a71bc076323815/image10-3.png" />
            
            </figure>
    <div>
      <h3>Go Regex</h3>
      <a href="#go-regex">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6hmpFGmyyhgx9cnCkTtbeJ/237481ec63e1f82fbdf42e986b9ed3a1/image12-1.png" />
            
            </figure>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5NNwnydydlXjw9iTomiML6/bc6e5bd6a72555f2db48c56b54b76a74/image20.png" />
            
            </figure>
    <div>
      <h2>Frequency, Power &amp; Thermals</h2>
      <a href="#frequency-power-thermals">
        
      </a>
    </div>
    <p>We were unable to collect any telemetry on the AWS Graviton2. Power would have been an interesting data point on the AWS Graviton2, but the EC2 instance did not expose either frequency or power sensors. The Ampere model we tested was the Altra Q80-30, rated with an operating frequency of 3.0GHz and a thermal design power (TDP) of 210W.</p><p>The Ampere Altra maintained a sustained operating frequency throughout cf_benchmark while Altra’s dynamic voltage and frequency scaling (DVFS) mechanism occasionally lowered its operating frequency in between workloads as needed to reduce power consumption. Package power varied depending on the workload, but Altra never consumed anywhere near its rated TDP while the default fan curve maintained the temperature below 70C. At the system level, by simply querying the baseboard management controller over <a href="https://en.wikipedia.org/wiki/Intelligent_Platform_Management_Interface">IPMI</a>, we observed that the Ampere server consumed no more than 300W. More power-efficient servers directly translates to more <a href="/an-introduction-to-three-phase-power-and-pdus/">flexibility over how we can populate our racks</a> and we hope this trend will continue in production.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/p2T05N3TKr8JDSNhHYs89/192ec5af3153877a60a39acceea1f7f4/image31.png" />
            
            </figure>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/12tiKqNAFC8IK9o76MiJ6F/62186a14aed6c406d84553a7ec14fc55/image5-10.png" />
            
            </figure>
    <div>
      <h2>Conclusion</h2>
      <a href="#conclusion">
        
      </a>
    </div>
    <p>In our top-down evaluation, the Ampere Altra largely performed as we had expected throughout our benchmarking suite. We regularly observed the two Neoverse N1 processors perform to their respective operating frequency and core count, with the Ampere Altra coming on top in these key areas over the AWS Graviton2. The Ampere Altra yielded a better single-core performance due to higher operating frequency and multiplied its impact even further by scaling out with a higher core count in multi-core performance against the AWS Graviton2. We also found our Ampere evaluation server consuming less power than we had anticipated and hope this trend will continue in production.</p><p>Throughout this initial set of testing and learning more about the underlying architecture, there were many parts we found interesting when compared against contemporary x86 counterparts such as the absence of simultaneous multithreading or dynamic frequency boost. We look forward to seeing which design philosophy makes more sense for the cloud. We are currently assessing Altra’s performance against our fleet of servers and collaborating with Ampere to define an ARM edge server based on Altra that could be deployed at scale.</p> ]]></content:encoded>
            <category><![CDATA[Hardware]]></category>
            <category><![CDATA[Data Center]]></category>
            <category><![CDATA[Cloudflare Network]]></category>
            <category><![CDATA[Partners]]></category>
            <guid isPermaLink="false">2687iQec2rCYsiH8d1qEzz</guid>
            <dc:creator>Sung Park</dc:creator>
        </item>
        <item>
            <title><![CDATA[Automating data center expansions with Airflow]]></title>
            <link>https://blog.cloudflare.com/automating-data-center-expansions-with-airflow/</link>
            <pubDate>Wed, 27 Jan 2021 16:46:02 GMT</pubDate>
            <description><![CDATA[ How we automated data center expansions and cut by 90% the amount of time our team spent on tedious operational work. ]]></description>
            <content:encoded><![CDATA[ <p>Cloudflare’s network keeps growing, and that growth doesn’t just come from building new data centers in new cities. We’re also upgrading the capacity of existing data centers by adding newer generations of servers — a process that makes our network safer, faster, and more reliable for our users.</p><p>Connecting new Cloudflare servers to our network has always been complex, in large part because of the amount of manual effort that used to be required. Members of our Data Center and Infrastructure Operations, Network Operations, and Site Reliability Engineering teams had to carefully follow steps in an extremely detailed standard operating procedure (SOP) document, often copying command-line snippets directly from the document and pasting them into terminal windows.</p><p>But such a manual process can only scale so far, and we knew must be a way to automate the installation of new servers.</p><p>Here’s how we tackled that challenge by building our own Provisioning-as-a-Service (PraaS) platform and cut by 90% the amount of time our team spent on mundane operational tasks.</p>
    <div>
      <h3>Choosing and using an automation framework</h3>
      <a href="#choosing-and-using-an-automation-framework">
        
      </a>
    </div>
    <p>When we began our automation efforts, we quickly realized it made sense to replace each of these manual SOP steps with an API-call equivalent and to present them in a self-service web-based portal.</p><p>To organize these new automatic steps, we chose <a href="https://airflow.apache.org/">Apache Airflow</a>, an open-source workflow management platform. Airflow is built around directed acyclic graphs, or DAGs, which are collections of all the tasks you want to run, organized in a way that reflects their relationships and dependencies.</p><p>In this new system, each SOP step is implemented as a task in the DAG. The majority of these tasks are API calls to Salt — software which automates the management and configuration of any infrastructure or application, and which we use to manage our servers, switches, and routers. Other DAG tasks are calls to query Prometheus (systems monitoring and alerting toolkit), Thanos (a highly available Prometheus setup with long-term storage capabilities), Google Chat webhooks, JIRA, and other internal systems.</p><p>Here is an example of one of these tasks. In the original SOP, SREs were given the following instructions to enable anycast:</p><ol><li><p><b><i>Login to a remote system.</i></b></p></li><li><p><b><i>Copy and Paste the command in the terminal.</i></b></p></li><li><p><b><i>Replace the router placeholder in the command snippet with the actual value.</i></b></p></li><li><p><b><i>Execute the command.</i></b></p></li></ol><p>In our new workflow, this step becomes a single task in the DAG named “enable_anycast”:</p>
            <pre><code>enable_anycast = builder.wrap_class(AsyncSaltAPIOperator)(
             task_id='enable_anycast',
             target='{{ params.netops }}',
             function='cmd.run',
             fun_kwargs={'cmd': 'salt {{ get_router(params.colo_name) }} '
                         'anycast.enable --out=json --out-indent=-1'},
             salt_conn_id='salt_api',
             trigger_rule='one_success')</code></pre>
            <p>As you can see, automation eliminates the need for a human operator to login to a remote system, and to figure out the router that will be used to replace the placeholder in the command to be executed.</p><p>In Airflow, a task is an implementation of an Operator. The Operator in the automated step is the “AsyncSaltAPIOperator”, a custom operator built in-house. This extensibility is one of the many reasons that made us decide to use Apache Airflow. It allowed us to extend its functionality by writing custom operators that suit our needs.</p><p>SREs from various teams have written quite a lot of custom Airflow Operators that integrate with Salt, Prometheus, Bitbucket, Google Chat, JIRA, PagerDuty, among others.</p>
    <div>
      <h3>Manual SOP steps transformed into a feature-packed automation</h3>
      <a href="#manual-sop-steps-transformed-into-a-feature-packed-automation">
        
      </a>
    </div>
    <p>The tasks that replaced steps in the SOP are marvelously feature-packed. Here are some highlights of what they are capable of, on top of just executing a command:</p><p><b>Failure Handling</b>When a task fails for whatever reason, it automatically retries until it exhausts its maximum retry limit that we set for the task. We employ various retry strategies, including instructing tasks to not retry at all, especially when it’s impractical to retry, or when we deliberately do not want it to retry at all regardless of whether there are any retry attempts remaining, such as when an exception is encountered or a condition that is unlikely to change for the better.</p><p><b>Logging</b>Each task provides a comprehensive log during executions. We’ve written our tasks to ensure that we log as much information as possible that would help us audit and troubleshoot issues.</p><p><b>Notifications</b>We’ve written our tasks to send a notification with information such as the name of the DAG, the name of the task, its task state, the number of attempts it took to reach a certain state, and a link to view the task logs.</p><p>When a task fails, we definitely want to be notified, so we also set tasks to additionally provide information such as the number of retry attempts and links to view relevant wiki pages or Grafana dashboards.</p><p>Depending on the criticality of the failure, we can also instruct it to page the relevant on-call person on the provisioning shift, should it require immediate attention.</p><p><b>Jinja Templating</b>Jinja templating allows providing dynamic content using code to otherwise static objects such as strings. We use this in combination with macros wherein we provide parameters that can change during the execution, since macros are evaluated while the task gets run.</p><p><b>Macros</b>Macros are used to pass dynamic information into task instances at runtime. Macros are a way to expose objects to templates. In other words, macros are functions that take input, modify that input, and give the modified output.</p>
    <div>
      <h3>Adapting tasks for preconditions and human intervention</h3>
      <a href="#adapting-tasks-for-preconditions-and-human-intervention">
        
      </a>
    </div>
    <p>There are a few steps in the SOP that require certain preconditions to be met. We use sensors to set dependencies between these tasks, and even between different DAGs, so that one does not run until the dependency has been met.</p><p>Below is an example of a sensor that waits until all nodes resolve to their assigned DNS records:</p>
            <pre><code>verify_node_dns = builder.wrap_class(DNSSensor)(
            task_id='verify_node_dns',
            zone=domain,
            nodes_from='{{ to_json(run_ctx.globals.import_nodes_via_mpl) }}',
            timeout=60 * 30,
            poke_interval=60 * 10,
	mode='reschedule')</code></pre>
            <p>In addition, some of our tasks still require input from a  human operator. In these circumstances, we use sensors as blocking tasks that prevent work from starting until certain preconditions are met. We use these to set dependencies between tasks and even DAGs so that one does not run until the dependency has finished successfully.</p><p>The code below is a simple example of a task that will send notifications to get the attention of a human operator, and waits until a Change Request ticket has been provided and verified:</p>
            <pre><code>verify_jira_input = builder.wrap_class(InputSensor)(
            task_id='verify_jira_input',
            var_key='jira',
            prompt='Please provide the Change Request ticket.',
            notify=True,
            require_human=True)</code></pre>
            <p>Another sensor task example is waiting until a zone has been deployed by a Cloudflare engineer as described in <a href="/improving-the-resiliency-of-our-infrastructure-dns-zone/">https://blog.cloudflare.com/improving-the-resiliency-of-our-infrastructure-dns-zone/</a>.</p><p>In order for PraaS to be able to accept human inputs, we’ve written a separate DAG we call our DAG Manager. Whenever we need to submit input back to a running expansion DAG, we simply trigger the DAG Manager and pass in our input as a JSON configuration, which will then be processed accordingly and submit the input back to the expansion DAG.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1y5JUysuUMGAzvWpiPEb4G/162771c50b9be51d4a496cc0aa019c4c/image2-20.png" />
            
            </figure>
    <div>
      <h3>Managing Dependencies Between Tasks</h3>
      <a href="#managing-dependencies-between-tasks">
        
      </a>
    </div>
    <p>Replacing SOP steps with DAG tasks was only the first part of our journey towards greater automation. We also had to define the dependencies between these tasks and construct the workflow accordingly.</p><p>Here’s an example of what this looks like in code:</p>
            <pre><code>verify_cr &gt;&gt; parse_cr &gt;&gt; [execute_offline, execute_online]
        execute_online &gt;&gt; silence_highstate_runner &gt;&gt; silence_metals &gt;&gt; \
            disable_highstate_runner</code></pre>
            <p>The code simply uses bit shift operators to chain the operations. A list of tasks can also be set as dependencies:</p>
            <pre><code>change_metal_status &gt;&gt;  [wait_for_change_metal_status, verify_zone_update] &gt;&gt; \
evaluate_ecmp_management</code></pre>
            <p>With the bit shift operator, chaining multiple dependencies becomes concise.</p><p>By default, a downstream task will only run if its upstream has succeeded. For a more complex dependency setup, we set a trigger_rule which defines the rule by which the generated task gets triggered.</p><p>All operators have a trigger_rule argument. The Airflow scheduler decides whether to run the task or not depending on what rule was specified in the task. An example rule that we use a lot in PraaS is “one_success” — it fires as soon as at least one parent succeeds, and it does not wait for all parents to be done.</p>
    <div>
      <h3>Solving Complex Workflows with Branching and Multi-DAGs</h3>
      <a href="#solving-complex-workflows-with-branching-and-multi-dags">
        
      </a>
    </div>
    <p>Having complex workflows means that we need a workflow to branch, or only go down a certain path, based on an arbitrary condition, which is typically related to something that happened in an upstream task. Branching is used to perform conditional logic, that is, execute a set of tasks based on a condition. We use BranchPythonOperator to achieve this.</p><p>At some point in the workflow, our data center expansion DAGs trigger various external DAGs to accomplish complex tasks. This is why we have written our DAGs to be fully reusable. We did not try to incorporate all the logic into a single DAG; instead, we created other separable DAGs that are fully reusable and can be triggered on-demand manually by hand or programmatically — our DAG Manager and the “helper” DAG is an example of this.</p><p>The Helper DAG comprises logic that allows us to mimic a “for loop” by having the DAG respawn itself if needed, technically doing cycles. If you recall, a DAG is acyclic, but we have some tasks in our workflow that require us to do complex loops and are solved by using a helper DAG.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4JEhMEgEZswPJWxkgSAtck/11453cefd2e4c6543181bdf241c9d2ea/image3-31.png" />
            
            </figure><p>We designed reusable DAGs early on, which allowed us to build complex automation workflows from separable DAGs, each of which handles distinct and well-defined tasks. Each data center DAG could easily reuse other DAGs by triggering them programmatically.</p><p>Having separate DAGs that run independently, that are triggered by other DAGs, and that keep inter-dependencies between them, is a pattern we use a lot. It has allowed us to execute very complex workflows.</p>
    <div>
      <h3>Creating DAGs that Scale and Executing Tasks at Scale</h3>
      <a href="#creating-dags-that-scale-and-executing-tasks-at-scale">
        
      </a>
    </div>
    <p>Data center expansions are done in two phases:</p><p><b>Phase 1</b> - this is the phase in which servers are powered on. It boots our custom Linux kernel, and begins the provisioning process.</p><p><b>Phase 2</b> - this is the phase in which newly provisioned servers are enabled in the cluster to receive production traffic.</p><p>To reflect these phases in the automation workflow, we also wrote two separate DAGs, one for each phase. However, we have over 200 data centers, so if we were to write a pair of DAGs for each, we would end up writing and maintaining 400 files!</p><p>A viable option could be to parameterize our DAGs. At first glance, this approach sounds reasonable. However, it poses one major challenge: tracking the progress of DAG runs will be too difficult and confusing for the human operator using PraaS.</p><p>Following the software design principle called DRY (Don’t Repeat Yourself), and inspired by the Factory Method design pattern in programming, we’ve instead written both phase 1 and phase 2 DAGs in a way that allow them to dynamically create multiple different DAGs with exactly the same tasks, and to fully reuse the exact same code. As a result, we only maintain one code base, and as we add new data centers, we are also able to generate a DAG for each new data center instantly, without writing a single line of code.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/32tu5HSvTbXRo6yrRAqlq9/dff87e0fd133a1b8ce83b49ef616e0c3/image1-37.png" />
            
            </figure><p>And Airflow even made it easy to put a simple customized web UI on top of the process, which made it simple to use by more employees who didn’t have to understand all the details.</p>
    <div>
      <h3>The death of SOPs?</h3>
      <a href="#the-death-of-sops">
        
      </a>
    </div>
    <p>We would like to think that all of this automation removes the need for our original SOP document. But this is not really the case.  Automation can fail, the components in it can fail, and   a particular task in the DAG may fail. When this happens, our SOPs will be used again to prevent provisioning and expansion activities from stopping completely.</p><p>Introducing automation paved the way for what we call an SOP-as-Code practice. We made sure that every task in the DAG had an equivalent manual step in the SOP that SREs can execute by hand, should the need arise, and that every change in the SOP has a corresponding pull request (PR) in the code.</p>
    <div>
      <h3>What’s next for PraaS</h3>
      <a href="#whats-next-for-praas">
        
      </a>
    </div>
    <p>Onboarding of the other provisioning activities into PraaS, such as decommissioning, is already ongoing.</p><p>For expansions, our ultimate goal is a fully autonomous system that monitors whether new servers have been racked in our edge data centers — and automatically triggers expansions — with no human intervention.</p>
    <div>
      <h3>Watch it on Cloudflare TV</h3>
      <a href="#watch-it-on-cloudflare-tv">
        
      </a>
    </div>
    <div></div>
<p></p> ]]></content:encoded>
            <category><![CDATA[Edge]]></category>
            <category><![CDATA[Data Center]]></category>
            <guid isPermaLink="false">7m9h6gYslgZrVO36QyRv8a</guid>
            <dc:creator>Jet Mariscal</dc:creator>
        </item>
        <item>
            <title><![CDATA[An introduction to three-phase power and PDUs]]></title>
            <link>https://blog.cloudflare.com/an-introduction-to-three-phase-power-and-pdus/</link>
            <pubDate>Fri, 04 Dec 2020 14:05:37 GMT</pubDate>
            <description><![CDATA[ This blog is a quick Electrical Engineering 101 session going over specifically how 3-phase PDUs work, along with some good practices on how we use them ]]></description>
            <content:encoded><![CDATA[ <p>Our fleet of over 200 locations comprises various generations of servers and routers. And with the ever changing landscape of services and computing demands, it’s imperative that we manage power in our data centers right. This blog is a brief Electrical Engineering 101 session going over specifically how power distribution units (PDU) work, along with some good practices on how we use them. It appears to me that we could all use a bit more knowledge on this topic, and more love and appreciation of something that’s critical but usually taken for granted, like hot showers and opposable thumbs.</p><p>A PDU is a device used in data centers to distribute power to multiple rack-mounted machines. It’s an industrial grade power strip typically designed to power an average consumption of about <a href="https://www.eia.gov/tools/faqs/faq.php?id=97&amp;t=3">seven US households</a>. Advanced models have monitoring features and can be accessed via <a href="https://www.cloudflare.com/learning/access-management/what-is-ssh/">SSH</a> or webGUI to turn on and off power outlets. How we choose a PDU depends on what country the data center is and what it provides in terms of <a href="https://www.worldstandards.eu/electricity/three-phase-electric-power/">voltage, phase, and plug type</a>.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5VQToUAxoKYdAqSWgqOyDS/15afd55e2d243d5ae444bf39929cc88c/Artboard-1.png" />
            
            </figure><p>For each of our racks, all of our dual power-supply (PSU) servers are cabled to one of the two vertically mounted PDUs. As shown in the picture above, one PDU feeds a server’s PSU via a red cable, and the other PDU feeds that server’s other PSU via a blue cable. This is to ensure we have power redundancy maximizing our service uptime; in case one of the PDUs or server PSUs fail, the redundant power feed will be available keeping the server alive.</p>
    <div>
      <h3>Faraday’s Law and Ohm’s Law</h3>
      <a href="#faradays-law-and-ohms-law">
        
      </a>
    </div>
    <p>Like most high-voltage applications, PDUs and servers are designed to use AC power. Meaning voltage and current aren’t constant — they’re sine waves with magnitudes that can alternate between positive and negative at a certain frequency. For example, a voltage feed of 100V is not constantly at 100V, but it bounces between 100V and -100V like a sine wave. One complete sine wave cycle is one phase of 360 degrees, and running at 50Hz means there are 50 cycles per second.</p><p>The sine wave can be explained by Faraday’s Law and by looking at how an AC power generator works. Faraday’s Law tells us that a current is induced to flow due to a changing magnetic field. Below illustrates a simple generator with a permanent magnet rotating at constant speed and a coil coming in contact with the magnet’s magnetic field. Magnetic force is strongest at the North and South ends of the magnet. So as it rotates on itself near the coil, current flow fluctuates in the coil. One complete rotation of the magnet represents one phase. As the North end approaches the coil, current increases from zero. Once the North end leaves, current decreases to zero. The South end in turn approaches, now the current “increases” in the opposite direction. And finishing the phase, the South end leaves returning the current back to zero. Current <i>alternates</i> its direction at every half cycle, hence the naming of Alternating Current.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7CcXLX2BlNWmNeVBk9YOJz/68fd03d71ec5a29a4c13454e4ce5fb72/Artboard-2-1.png" />
            
            </figure><p>Current and voltage in AC power fluctuate in-phase, or “in tandem”, with each other. So by Ohm's Law of Power = Voltage x Current, power will always be positive. Notice on the graph below that AC power (Watts) has two peaks per cycle. But for practical purposes, we'd like to use a constant power value. We do that by interpreting AC power into "DC" power using root-mean-square (RMS) averaging, which takes the max value and divides it by √2. For example, in the US, our conditions are 208V 24A at 60Hz. When we look at spec sheets, all of these values can be assumed as RMS'd into their constant DC equivalent values. When we say we're fully utilizing a PDU's max capacity of 5kW, it actually means that the power consumption of our machines bounces between 0 and 7.1kW (5kW x √2).</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3fM63pmekFqVlqHI6opB4V/c26220c91da05301a7573407d513eafe/image13.png" />
            
            </figure>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6n22LgiBvxJ4hrF6UdL0em/058bcddee79584ca845603f0ae6ca706/image6.png" />
            
            </figure><p>It’s also critical to figure out the sum of power our servers will need in a rack so that it falls under the PDU’s design max power capacity. For our US example, a PDU is typically 5kW (208 volts x 24 amps); therefore, we're budgeting 5kW and fit as many machines as we can under that. If we need more machines and the total sum power goes above 5kW, we'd need to provision another power source. That would lead to possibly another set of PDUs and racks that we may not fully use depending on demand; e.g. more underutilized costs. All we can do is abide by P = V x I.</p><p>However there is a way we can increase the max power capacity economically — 3-phase PDU. Compared to single phase, its max capacity is √3 or 1.7 times higher. A 3-phase PDU of the same US specs above has a capacity of 8.6kW (5kW x √3), allowing us to power more machines under the same source. Using a 3-phase setup might mean it has thicker cables and bigger plug; but despite being more expensive than a 1-phase, its value is higher compared to two 1-phase rack setups for these reasons:</p><ul><li><p>It’s more cost-effective, because there are fewer hardware resources to buy</p></li><li><p>Say the computing demand adds up to 215kW of hardware, we would need 25 3-phase racks compared to 43 1-phase racks.</p></li><li><p>Each rack needs two PDUs for power redundancy. Using the example above, we would need 50 3-phase PDUs compared to 86 1-phase PDUs to power 215kW worth of hardware.</p></li><li><p>That also means a smaller rack footprint and fewer power sources provided and charged by the data center, saving us up to √3 or 1.7 times in opex.</p></li><li><p>It’s more resilient, because there are more circuit breakers in a 3-phase PDU — one more than in a 1-phase. For example, a 48-outlet PDU that is 1-phase would be split into two circuits of 24 outlets. While a 3-phase one would be split into 3 circuits of 16 outlets. If a breaker tripped, we’d lose 16 outlets using a 3-phase PDU instead of 24.</p></li></ul>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6j4fgzSlb8GU9fsGwywC11/a761ff04c713ff3cbc5a5b04f5e067b0/image5-1.png" />
            
            </figure><p>The PDU shown above is a 3-phase model of 48 outlets. We can see three pairs of circuit breakers for the three branches that are intertwined with each other <b>—</b> white, grey, and black. Industry demands today pressure engineers to maximize compute performance and minimize physical footprint, making the 3-phase PDU a widely-used part of operating a data center.</p>
    <div>
      <h3>What is 3-phase?</h3>
      <a href="#what-is-3-phase">
        
      </a>
    </div>
    <p>A 3-phase AC generator has three coils instead of one where the coils are 120 degrees apart inside the cylindrical core, as shown in the figure below. Just like the 1-phase generator, current flow is induced by the rotation of the magnet thus creating power from each coil sequentially at every one-third of the magnet’s rotation cycle. In other words, we’re generating three 1-phase power offset by 120 degrees.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7JNipgmV5CwJESOZLyeiy2/8a8cd916f8af4b820b8de6d93ed237ce/Artboard-3-1.png" />
            
            </figure><p>A 3-phase feed is set up by joining any of its three coils into line pairs. L1, L2, and L3 coils are live wires with each on their own <i>phase</i> carrying their own <i>phase</i> voltage and <i>phase</i> current. Two phases joining together form one <i>line</i> carrying a common <i>line</i> voltage and <i>line</i> current. L1 and L2 phase voltages create the L1/L2 line voltage. L2 and L3 phase voltages create the L2/L3 line voltage. L1 and L3 phase voltages create the L1/L3 line voltage.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/aEGubJ4ZOZYPBdqTyT2If/6d9ec3e4af13c9a9b8edfc3ddf4235ab/image9-1.jpg" />
            
            </figure><p>Let’s take a moment to clarify the terminology. Some other sources may refer to line voltage (or current) as line-to-line or phase-to-phase voltage (or current). It can get confusing, because line voltage is the same as phase voltage in 1-phase circuits, as there’s only one phase. Also, the <i>magnitude</i> of the line voltage is equal to the <i>magnitude</i> of the phase voltage in 3-phase Delta circuits, while the <i>magnitude</i> of the line current is equal to the <i>magnitude</i> of the phase current in 3-phase Wye circuits.</p><p>Conversely, the line current equals to phase current times √3 in Delta circuits. In Wye circuits, the line voltage equals to phase voltage times √3.</p><p>In Delta circuits:</p><p>V<sub>line</sub> = V<sub>phase</sub></p><p>I<sub>line</sub> = √3 x I<sub>phase</sub></p><p>In Wye circuits:</p><p>V<sub>line</sub> = √3 x V<sub>phase</sub></p><p>I<sub>line</sub> = I<sub>phase</sub></p><p>Delta and Wye circuits are the two methods that three wires can join together. This happens both at the power source with three coils and at the PDU end with three branches of outlets. Note that the generator and the PDU don’t need to match each other’s circuit types.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/yBiiAFcHTedr9s3s3QSPL/52c6822b94b0816b139570c334c62998/image8.png" />
            
            </figure><p>On PDUs, these phases join when we plug servers into the outlets. So we conceptually use the wirings of coils above and replace them with resistors to represent servers. Below is a simplified wiring diagram of a 3-phase Delta PDU showing the three line pairs as three modular branches. Each branch carries two phase currents and its own one common voltage drop.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4xV9Yds4Dzc7VOVFEmrg7X/f398859d93ca13341b641ca3ec533753/image15.png" />
            
            </figure><p>And this one below is of a 3-phase Wye PDU. Note that Wye circuits have an additional line known as the neutral line where all three phases meet at one point. Here each branch carries one phase and a neutral line, therefore one common current. The neutral line isn’t considered as one of the phases.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6P2JKqoppmgeEjomv9jmmY/8fe420607f4a0f0abba13cdf82aa117a/image20.png" />
            
            </figure><p>Thanks to a neutral line, a Wye PDU can offer a second voltage source that is √3 times lower for smaller devices, like laptops or monitors. Common voltages for Wye PDUs are 230V/400V or 120V/208V, particularly in North America.</p>
    <div>
      <h3>Where does the √3 come from?</h3>
      <a href="#where-does-the-3-come-from">
        
      </a>
    </div>
    <p>Why are we multiplying by √3? As the name implies, we are adding phasors. Phasors are complex numbers representing sine wave functions. Adding phasors is like adding vectors. Say your GPS tells you to walk 1 mile East (vector a), then walk a 1 mile North (vector b). You walked 2 miles, but you only moved by 1.4 miles NE from the original location (vector a+b). That 1.4 miles of “work” is what we want.</p><p>Let’s take in our application L1 and L2 in a Delta circuit. we add phases L1 and L2, we get a L1/L2 line. We assume the 2 coils are identical. Let’s say α represents the voltage magnitude for each phase. The 2 phases are 120 degrees offset as designed in the 3-phase power generator:</p>
            <pre><code>|L1| = |L2| = α
L1 = |L1|∠0° = α∠0°
L2 = |L2|∠-120° = α∠-120°</code></pre>
            <p>Using vector addition to solve for L1/L2:</p>
            <pre><code>L1/L2 = L1 + L2</code></pre>
            
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2NtOvL0EuHAqcE84gSFJsf/64042e5e1175757f216824d49222b611/image10.png" />
            
            </figure><p>$$\text{L1/L2} = α∠\text{0°} - α∠\text{-120°}$$</p><p>$$\text{L1/L2} = (α\cos{\text{0°}}+jα\sin{\text{0°}})-(α\cos{\text{-120°}}+jα\sin{\text{-120°}})$$</p><p>$$\text{L1/L2} = (α\cos{\text{0°}}-α\cos{\text{-120°}})+j(α\sin{\text{0°}}-α\sin{\text{-120°}})$$</p><p>$$\text{L1/L2} = \frac{3}{2}α+j\frac{\sqrt3}{2}α$$</p><p>Convert L1/L2 into polar form:</p><p>$$\text{L1/L2} = \sqrt{(\frac{3}{2}α)^2 + (\frac{\sqrt3}{2}α)<sup>2}∠\tan</sup>{-1}(\frac{\frac{\sqrt3}{2}α}{\frac{3}{2}α})$$</p><p>$$\text{L1/L2} = \sqrt 3α∠\text{30°}$$</p><p>Since voltage is a scalar, we’re only interested in the “work”:</p>
            <pre><code>|L1/L2| = √3α</code></pre>
            <p>Given that α also applies for L3. This means for any of the three line pairs, we multiply the phase voltage by √3 to calculate the line voltage.</p><p>V<sub>line</sub> = √3 x V<sub>phase</sub></p><p>Now with the three line powers being equal, we can add them all to get the overall effective power. The derivation below works for both Delta and Wye circuits.</p><p>P<sub>overall</sub> = 3 x P<sub>line</sub></p><p>P<sub>overall</sub> = 3 x (V<sub>line</sub> x I<sub>line</sub>)</p><p>P<sub>overall</sub> = (3/√3) x (V<sub>phase</sub> x I<sub>phase</sub>)</p><p>P<sub>overall</sub> = √3 x V<sub>phase</sub> x I<sub>phase</sub></p><p></p><p>Using the US example, V<sub>phase</sub> is 208V and I<sub>phase</sub> is 24A. This leads to the overall 3-phase power to be 8646W (√3 x 208V x 24A) or 8.6kW. There lies the biggest advantage for using 3-phase systems. Adding 2 sets of coils and wires (ignoring the neutral wire), we’ve turned a generator that can produce √3 or 1.7 times more power!</p>
    <div>
      <h3>Dealing with 3-phase</h3>
      <a href="#dealing-with-3-phase">
        
      </a>
    </div>
    <p>The derivation in the section above assumes that the magnitude at all three phases is equal, but we know in practice that's not always the case. In fact, it's barely ever. We rarely have servers and switches evenly distributed across all three branches on a PDU. Each machine may have different loads and different specs, so power could be wildly different, potentially causing a dramatic phase imbalance. Having a heavily imbalanced setup could potentially hinder the PDU's available capacity.</p><p>A perfectly balanced and fully utilized PDU at 8.6kW means that each of its three branches has 2.88kW of power consumed by machines. Laid out simply, it's spread 2.88 + 2.88 + 2.88. This is the best case scenario. If we were to take 1kW worth of machines out of one branch, spreading power to 2.88 + 1.88 + 2.88. Imbalance is introduced, the PDU is underutilized, but we're fine. However, if we were to put back that 1kW into another branch — like 3.88 + 1.88 + 2.88 — the PDU is over capacity, even though the sum is still 8.6kW. In fact, it would be over capacity even if you just added 500W instead of 1kW on the wrong branch, thus reaching 3.18 + 1.88 + 2.88 (8.1kW).</p><p>That's because a 8.6kW PDU is spec'd to have a maximum of 24A for each phase current. Overloading one of the branches can force phase currents to go over 24A. Theoretically, we can reach the PDU’s capacity by loading one branch until its current reaches 24A and leave the other two branches unused. That’ll render it into a 1-phase PDU, losing the benefit of the √3 multiplier. In reality, the branch would have fuses rated less than 24A (usually 20A) to ensure we won't reach that high and cause overcurrent issues. Therefore the same 8.6kW PDU would have one of its branches tripped at 4.2kW (208V x 20A).</p><p>Loading up one branch is the easiest way to overload the PDU. Being heavily imbalanced significantly lowers PDU capacity and increases risk of failure. To help minimize that, we must:</p><ul><li><p>Ensure that total power consumption of all machines is under the PDU's max power capacity</p></li><li><p>Try to be as phase-balanced as possible by spreading cabling evenly across the three branches</p></li><li><p>Ensure that the sum of phase currents from powered machines at each branch is under the fuse rating at the circuit breaker.</p></li></ul><p><a href="https://www.raritan.com/blog/how-to-calculate-current-on-a-3-phase-208v-rack-pdu-power-strip">This spreadsheet</a> from Raritan is very useful when designing racks.</p><p>For the sake of simplicity, let's ignore other machines like switches. Our latest 2U4N servers are rated at 1800W. That means we can only fit a maximum of four of these 2U4N chassis (8600W / 1800W = 4.7 chassis). Rounding them up to 5 would reach a total rack level power consumption of 9kW, so that's a no-no.</p><p>Splitting 4 chassis into 3 branches evenly is impossible, and will force us to have one of the branches to have 2 chassis. That would lead to a non-ideal phase balancing:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1vAVIr6zDrLo4vIWjmtQYL/50f9ae2af265da7f953e05e96003f47f/image17.png" />
            
            </figure><p>Keeping phase currents under 24A, there's only 1.1A (24A - 22.9A) to add on L1 or L2 before the PDU gets overloaded. Say we want to add as many machines as we can under the PDU’s power capacity. One solution is we can add up to 242W on the L1/L2 branch until both L1 and L2 currents reach their 24A limit.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3NP9EOPb0h2lEXuvlSdg3B/9a6f53163c45fd3b8f2ee01964c0bd86/image18.png" />
            
            </figure><p>Alternatively, we can add up to 298W on the L2/L3 branch until L2 current reaches 24A. Note we can also add another 298W on the L3/L1 branch until L1 current reaches 24A.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/64ECQoHBzqhPuq38sNizat/6070a8f2acad6cb76fae4e32f1c566df/image16.png" />
            
            </figure><p>In the examples above, we can see that various solutions are possible. Adding two 298W machines each at L2/L3 and L3/L1 is the most phase balanced solution, given the parameters. Nonetheless, PDU capacity isn't optimized at 7.8kW.</p><p>Dealing with a 1800W server is not ideal, because whichever branch we choose to power one would significantly swing the phase balance unfavorably. Thankfully, our <a href="/cloudflares-gen-x-servers-for-an-accelerated-future/">Gen X servers</a> take up less space and are more power efficient. Smaller footprint allows us to have more flexibility and fine-grained control over our racks in many of our diverse data centers. Assuming each 1U server is 450W, as if we physically split the 1800W 2U4N into fours each with their own power supplies, we're now able to fit 18 nodes. That's 2 more nodes than the four 2U4N setup:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7eBaV5AwmB0D31FSgEw65b/bfd1bd88c6e6078edf84523c2852081a/image21.png" />
            
            </figure><p>Adding two more servers here means we've increased our value by 12.5%. While there are more factors not considered here to calculate the Total Cost of Ownership, this is still a great way to show we can be smarter with asset costs.</p><p>Cloudflare provides the back-end services so that our customers can enjoy the performance, reliability, security, and global scale of our edge network. Meanwhile, we manage all of our hardware in over 100 countries with various power standards and compliances, and ensure that our physical infrastructure is as reliable as it can be.</p><p>There’s no Cloudflare without hardware, and there’s no Cloudflare without power. Want to know more? Watch this Cloudflare TV segment about power: <a href="https://cloudflare.tv/event/7E359EDpCZ6mHahMYjEgQl">https://cloudflare.tv/event/7E359EDpCZ6mHahMYjEgQl</a>.</p> ]]></content:encoded>
            <category><![CDATA[Hardware]]></category>
            <category><![CDATA[Data Center]]></category>
            <category><![CDATA[Network]]></category>
            <category><![CDATA[Edge]]></category>
            <category><![CDATA[Developer Platform]]></category>
            <category><![CDATA[Developers]]></category>
            <guid isPermaLink="false">4Qx2ZCOM4gEYCEIljEKvAi</guid>
            <dc:creator>Rob Dinh</dc:creator>
        </item>
        <item>
            <title><![CDATA[Anchoring Trust: A Hardware Secure Boot Story]]></title>
            <link>https://blog.cloudflare.com/anchoring-trust-a-hardware-secure-boot-story/</link>
            <pubDate>Tue, 17 Nov 2020 12:00:00 GMT</pubDate>
            <description><![CDATA[ As a security company, we pride ourselves on finding innovative ways to protect our platform to, in turn, protect the data of our customers. Part of this approach is implementing progressive methods in protecting our hardware at scale. ]]></description>
            <content:encoded><![CDATA[ 
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/15nAX8kXKg4gz7jDCecogD/f2340b560358c5d4c25f5ff7fbb77325/anchor2-2-1.png" />
            
            </figure><p>As a security company, we pride ourselves on finding innovative ways to protect our platform to, in turn, protect the data of our customers. Part of this approach is implementing progressive methods in protecting our hardware at scale. While we have blogged about how we address security threats from <a href="/mitigating-spectre-and-other-security-threats-the-cloudflare-workers-security-model/">application</a> to <a href="/securing-memory-at-epyc-scale/">memory</a>, the attacks on hardware, as well as firmware, have increased substantially. The data cataloged in the <a href="https://nvd.nist.gov/">National Vulnerability Database (NVD)</a> has shown the frequency of hardware and firmware-level vulnerabilities rising year after year.</p><p>Technologies like <a href="https://docs.microsoft.com/en-us/windows-hardware/design/device-experiences/oem-secure-boot">secure boot</a>, common in desktops and laptops, have been ported over to the server industry as a method to combat firmware-level attacks and protect a device’s boot integrity. These technologies require that you create a trust ‘anchor’, an authoritative entity for which trust is assumed and not derived. A common trust anchor is the system <a href="https://en.wikipedia.org/wiki/BIOS">Basic Input/Output System (BIOS)</a> or the <a href="https://www.uefi.org/">Unified Extensible Firmware Interface (UEFI</a>) firmware.</p><p>While this ensures that the device boots only signed firmware and operating system bootloaders, does it protect the entire boot process? What protects the BIOS/UEFI firmware from attacks?</p>
    <div>
      <h2>The Boot Process</h2>
      <a href="#the-boot-process">
        
      </a>
    </div>
    <p>Before we discuss how we secure our boot process, we will first go over how we boot our machines.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3ubWFPurTNwYnbXL8EnVpl/bd8c93e0e7acedf04b2787816be51e6d/image1-7.png" />
            
            </figure><p>The above image shows the following sequence of events:</p><ul><li><p>After powering on the system (through a <a href="https://www.gigabyte.com/Glossary/bmc">baseboard management controller (BMC)</a> or physically pushing a button on the system), the system unconditionally executes the UEFI firmware residing on a flash chip on the motherboard.</p></li><li><p>UEFI performs some hardware and peripheral initialization and executes the <a href="https://wiki.debian.org/PXEBootInstall">Preboot Execution Environment (PXE)</a> code, which is a small program that boots an image over the network and usually resides on a flash chip on the network card.</p></li><li><p>PXE sets up the network card, and downloads and executes a small program bootloader through an open source boot firmware called <a href="https://ipxe.org/">iPXE</a>.</p></li><li><p>iPXE loads a script that automates a sequence of commands for the bootloader to know how to boot a specific operating system (sometimes several of them). In our case, it loads our Linux kernel, <code>initrd</code> (this contains device drivers which are not directly compiled into the kernel), and a standard Linux root filesystem. After loading these components, the bootloader executes and hands off the control to the kernel.</p></li><li><p>Finally, the Linux kernel loads any additional drivers it needs and starts applications and services.</p></li></ul>
    <div>
      <h2>UEFI Secure Boot</h2>
      <a href="#uefi-secure-boot">
        
      </a>
    </div>
    <p>Our UEFI secure boot process is fairly straightforward, albeit customized for our environments. After loading the UEFI firmware from the bootloader, an initialization script defines the following variables:</p><p><b>Platform Key (PK):</b> It serves as the cryptographic root of trust for secure boot, giving capabilities to manipulate and/or validate the other components of the <a href="https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/">secure boot framework</a>.</p><p><b>Trusted Database (DB):</b> Contains a signed (by platform key) list of hashes of all PCI option ROMs, as well as a public key, which is used to verify the signature of the bootloader and the kernel on boot.</p><p>These variables are respectively the master platform public key, which is used to sign all other resources, and an allow list database, containing other certificates, binary file hashes, etc. In default secure boot scenarios, Microsoft keys are used by default. At Cloudflare we use our own, which makes us the root of trust for UEFI:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/12zsC1QVrT8uIGMG0K6ss8/92c1d1cdaf9348b03794be40943c81f8/image7.png" />
            
            </figure><p>But, by setting our trust anchor in the UEFI firmware, what attack vectors still exist?</p>
    <div>
      <h2>UEFI Attacks</h2>
      <a href="#uefi-attacks">
        
      </a>
    </div>
    <p>As stated previously, firmware and hardware attacks are on the rise. It is clear from the figure below that firmware-related vulnerabilities have increased significantly over the last 10 years, especially since 2017, when the hacker community started attacking the firmware on different platforms:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7gyyxjhnApSBYfZEdqglcS/d863b610573c1ca0b497b1b3e1ebf2cc/image14.png" />
            
            </figure><p>This upward trend, coupled with <a href="https://arstechnica.com/information-technology/2020/10/custom-made-uefi-bootkit-found-lurking-in-the-wild/">recent malware findings in UEFI</a>, shows that trusting firmware is becoming increasingly problematic.</p><p>By tainting the UEFI firmware image, you poison the entire boot trust chain. The ability to trust firmware integrity is important beyond secure boot. For example, if you can't trust the firmware not to be compromised, you can't trust things like <a href="https://docs.microsoft.com/en-us/windows/security/information-protection/tpm/trusted-platform-module-overview">trusted platform module (TPM) measurements</a> to be accurate, because the firmware is itself responsible for doing these measurements (e.g a TPM is not an on-path security mechanism, but instead it requires firmware to interact and cooperate with). Firmware may be crafted to extend measurements that are accepted by a remote attestor, but that don't represent what's being locally loaded. This could cause firmware to have a questionable measured boot and remote attestation procedure.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3hTmUFGH3CZwcPD6CXmASh/4a26d01153fb10cd9b11d461be513005/image11.png" />
            
            </figure><p>If we can’t trust firmware, then hardware becomes our last line of defense.</p>
    <div>
      <h2>Hardware Root of Trust</h2>
      <a href="#hardware-root-of-trust">
        
      </a>
    </div>
    <p>Early this year, we made a series of blog posts on <a href="/technical-details-of-why-cloudflare-chose-amd-epyc-for-gen-x-servers/">why we chose AMD EPYC processors</a> for our Gen X servers. With security in mind, we started <a href="/securing-memory-at-epyc-scale/">turning on</a> features that were available to us and set forth the plan of using AMD silicon as a Hardware Root of Trust (HRoT).</p><p><a href="https://www.amd.com/system/files/2017-06/Trusting-in-the-CPU.pdf">Platform Secure Boot</a> (PSB) is AMD’s implementation of hardware-rooted boot integrity. Why is it better than UEFI firmware-based root of trust? Because it is intended to assert, by a root of trust anchored in the hardware, the integrity and authenticity of the System ROM image before it can execute. It does so by performing the following actions:</p><ul><li><p>Authenticates the first block of BIOS/UEFI prior to releasing x86 CPUs from reset.</p></li><li><p>Authenticates the System Read-Only Memory (ROM) contents on each boot, not just during updates.</p></li><li><p>Moves the UEFI Secure Boot trust chain to immutable hardware.</p></li></ul><p>This is accomplished by the AMD Platform Security Processor (PSP), an ARM Cortex-A5 microcontroller that is an immutable part of the system on chip (SoC). The PSB consists of two components:</p><p><b><b><b>On-chip Boot ROM</b></b></b></p><ul><li><p>Embeds a SHA384 hash of an AMD root signing key</p></li><li><p>Verifies and then loads the off-chip PSP bootloader located in the boot flash</p></li></ul><p><b><b><b>Off-chip Boot</b></b></b><b><b>**l</b></b>oader******</p><ul><li><p>Locates the PSP directory table that allows the PSP to find and load various images</p></li><li><p>Authenticates first block of BIOS/UEFI code</p></li><li><p>Releases CPUs after successful authentication</p></li></ul>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5ABw5l5aHps4VcM0wHACDq/e0eaaf60f0ffee8317d88d049f3c594c/image4.gif" />
            
            </figure><ol><li><p>The PSP secures the On-chip Boot ROM code, loads the off-chip PSP firmware into PSP static random access memory (SRAM) after authenticating the firmware, and passes control to it.</p></li><li><p>The Off-chip Bootloader (BL) loads and specifies applications in a specific order (whether or not the system goes into a debug state and then a secure EFI application binary interface to the BL)</p></li><li><p>The system continues initialization through each bootloader stage.</p></li><li><p>If each stage passes, then the UEFI image is loaded and the x86 cores are released.</p></li></ol><p>Now that we know the booting steps, let’s build an image.</p>
    <div>
      <h2>Build Process</h2>
      <a href="#build-process">
        
      </a>
    </div>
    
    <div>
      <h3></h3>
      <a href="#">
        
      </a>
    </div>
    <p>Public Key Infrastructure</p><p>Before the image gets built, a public key infrastructure (PKI) is created to generate the key pairs involved for signing and validating signatures:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7CGqAcYMPxBE9kv0ZcjGwL/0ffb73c3d6b1353b0291b1736ff0f599/image10.png" />
            
            </figure><p>Our original device manufacturer (ODM), as a trust extension, creates a key pair (public and private) that is used to sign the first segment of the BIOS (private key) and validates that segment on boot (public key).</p><p>On AMD’s side, they have a key pair that is used to sign (the AMD root signing private key) and certify the public key created by the ODM. This is validated by AMD’s root signing public key, which is stored as a hash value (<a href="https://tools.ietf.org/html/rfc5756">RSASSA-PSS</a>: SHA-384 with 4096-bit key is used as the hashing algorithm for both message and mask generation) in <a href="https://en.wikipedia.org/wiki/Serial_Peripheral_Interface">SPI-ROM</a>.</p><p>Private keys (both AMD and ODM) are stored in <a href="https://en.wikipedia.org/wiki/Hardware_security_module">hardware security modules</a>.</p><p>Because of the way the PKI mechanisms are built, the system cannot be compromised if only one of the keys is leaked. This is an important piece of the trust hierarchy that is used for image signing.</p>
    <div>
      <h3>Certificate Signing Request</h3>
      <a href="#certificate-signing-request">
        
      </a>
    </div>
    <p>Once the PKI infrastructure is established, a BIOS signing key pair is created, together with a certificate signing request (CSR). Creating the CSR uses known common name (CN) fields that many are familiar with:</p><ul><li><p><code>countryName</code></p></li><li><p><code>stateOrProvinceName</code></p></li><li><p><code>localityName</code></p></li><li><p><code>organizationName</code></p></li></ul><p>In addition to the fields above, the CSR will contain a <code>serialNumber</code> field, a 32-bit integer value represented in ASCII HEX format that encodes the following values:</p><ul><li><p><code>PLATFORM_VENDOR_ID</code>: An 8-bit integer value assigned by AMD for each ODM.</p></li><li><p><code>PLATFORM_MODEL_ID</code>: A 4-bit integer value assigned to a platform by the ODM.</p></li><li><p><code>BIOS_KEY_REVISION_ID</code>: is set by the ODM encoding a 4-bit key revision as unary counter value.</p></li><li><p><code>DISABLE_SECURE_DEBUG</code>: Fuse bit that controls whether secure debug unlock feature is disabled permanently.</p></li><li><p><code>DISABLE_AMD_BIOS_KEY_USE</code>: Fuse bit that controls if the BIOS, signed by an AMD key, (with <code>vendor ID == 0</code>) is permitted to boot on a CPU with non-zero Vendor ID.</p></li><li><p><code>DISABLE_BIOS_KEY_ANTI_ROLLBACK</code>: Fuse bit that controls whether BIOS key anti-rollback feature is enabled.</p></li></ul>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7jqoVoEKDiRSoVt9MbdY0W/0f4d2d505e12ecef65a6b31648f223d1/image3-3.png" />
            
            </figure><p>Remember these values, as we’ll show how we use them in a bit. Any of the <code>DISABLE</code> values are optional, but recommended based on your security posture/comfort level.</p><p>AMD, upon processing the CSR, provides the public part of the BIOS signing key signed and certified by the AMD signing root key as a RSA Public Key Token file (<code>.stkn</code>) format.</p>
    <div>
      <h2>Putting It All Together</h2>
      <a href="#putting-it-all-together">
        
      </a>
    </div>
    <p>The following is a step-by-step illustration of how signed UEFI firmware is built:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/48teEpwD6WwiJEVvSql73e/203673a7e6265f4d799c2b31ec9f492a/image8.gif" />
            
            </figure><ol><li><p>The ODM submits their public key used for signing Cloudflare images to AMD.</p></li><li><p>AMD signs this key using their RSA private key and passes it back to ODM.</p></li><li><p>The AMD public key and the signed ODM public key are part of the final BIOS SPI image.</p></li><li><p>The BIOS source code is compiled and various BIOS components (PEI Volume, Driver eXecution Environment (DXE) volume, NVRAM storage, etc.) are <a href="https://edk2-docs.gitbook.io/edk-ii-build-specification/2_design_discussion/23_boot_sequence">built as usual.</a></p></li><li><p>The PSP directory and BIOS directory are built next. PSP directory and BIOS directory table points to the location of various firmware entities.</p></li><li><p>The ODM builds the signed BIOS Root of Trust Measurement (RTM) signature based on the blob of BIOS PEI volume concatenated with BIOS Directory header, and generates the digital signature of this using the private portion of ODM signing key. The SPI location for signed BIOS RTM code is finally updated with this signature blob.</p></li><li><p>Finally, the BIOS binaries, PSP directory, BIOS directory and various firmware binaries are combined to build the SPI BIOS image.</p></li></ol>
    <div>
      <h2>Enabling Platform Secure Boot</h2>
      <a href="#enabling-platform-secure-boot">
        
      </a>
    </div>
    <p>Platform Secure Boot is enabled at boot time with a PSB-ready firmware image. PSB is configured using a region of one-time programmable (OTP) fuses, specified for the customer. OTP fuses are on-chip non-volatile memory (NVM) that permits data to be written to memory only once. There is <b>NO</b> way to roll the fused CPU back to an unfused one.</p><p>Enabling PSB in the field will go through two steps: fusing and validating.</p><ul><li><p>Fusing: Fuse the values assigned in the <code>serialNumber</code> field that was generated in the CSR</p></li><li><p>Validating: Validate the fused values and the status code registers</p></li></ul><p>If validation is successful, the BIOS RTM signature is validated using the ODM BIOS signing key, PSB-specific registers (<code>MP0_C2P_MSG_37</code> and <code>MP0_C2P_MSG_38</code>) are updated with the PSB status and fuse values, and the x86 cores are released</p><p>If validation fails, the registers above are updated with the PSB error status and fuse values, and the x86 cores stay in a locked state.</p>
    <div>
      <h2>Let’s Boot!</h2>
      <a href="#lets-boot">
        
      </a>
    </div>
    <p>With a signed image in hand, we are ready to enable PSB on a machine. We chose to deploy this on a few machines that had an updated, unsigned <a href="https://ami.com/en/support/bios-uefi-firmware-support/">AMI UEFI</a> firmware image, in this case version <code>2.16</code>. We use a couple of different firmware <a href="https://github.com/Zibri/afulnx/releases">update</a> <a href="https://downloadcenter.intel.com/download/29977?v=t">tools</a>, so, after a quick script, we ran an update to change the firmware version from <code>2.16</code> to <code>2.18C</code> (the signed image):</p>
            <pre><code>. $sudo ./UpdateAll.sh
Bin file name is ****.218C

BEGIN

+---------------------------------------------------------------------------+
|                 AMI Firmware Update Utility v5.11.03.1778                 |      
|                 Copyright (C)2018 American Megatrends Inc.                |                       
|                         All Rights Reserved.                              |
+---------------------------------------------------------------------------+
Reading flash ............... done
FFS checksums ......... ok
Check RomLayout ........ ok.
Erasing Boot Block .......... done
Updating Boot Block ......... done
Verifying Boot Block ........ done
Erasing Main Block .......... done
Updating Main Block ......... done
Verifying Main Block ........ done
Erasing NVRAM Block ......... done
Updating NVRAM Block ........ done
Verifying NVRAM Block ....... done
Erasing NCB Block ........... done
Updating NCB Block .......... done
Verifying NCB Block ......... done

Process completed.</code></pre>
            <p>After the update completed, we rebooted:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2ZW4E36XqbrlpgvXyjR34t/21625b6e4691951b840d4d0d7bb91c5b/image2-6.png" />
            
            </figure><p>After a successful install, we validated that the image was correct via the <a href="https://man7.org/linux/man-pages/man5/sysfs.5.html">sysfs</a> information provided in the <a href="https://linux.die.net/man/8/dmidecode">dmidecode</a> output:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1gIi4xRxwq4PfpxAjc2nnA/6262739c2730a1c85865a59dd168ada7/image12.gif" />
            
            </figure>
    <div>
      <h3>Testing</h3>
      <a href="#testing">
        
      </a>
    </div>
    <p>With a signed image installed, we wanted to test that it worked, meaning: what if an unauthorized user installed their own firmware image? We did this by downgrading the image back to an unsigned image, <code>2.16</code>. In theory, the machine shouldn’t boot as the x86 cores should stay in a locked state. After downgrading, we rebooted and got the following:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7HQqHnKOTSHg1YQOyZq35A/2209455a149759a90c474970bb9bf6ad/image13-1.jpg" />
            
            </figure><p>This isn’t a powered down machine, but the result of booting with an unsigned image.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/y9RGO5UGzOEG1lxRyPJa2/818ecd62bc892f61097cf369d1b599a2/image9.jpg" />
            
            </figure><p>Flashing back to a signed image is done by running the same flashing utility through the BMC, so we weren’t bricked. Nonetheless, the results were successful.</p>
    <div>
      <h2>Naming Convention</h2>
      <a href="#naming-convention">
        
      </a>
    </div>
    <p>Our standard UEFI firmware images are alphanumeric, making it difficult to distinguish (by name) the difference between a signed and unsigned image (<code>v2.16A</code> vs <code>v2.18C</code>), for example. There isn’t a remote attestation capability (yet) to probe the PSB status registers or to store these values by means of a signature (e.g. <a href="https://linux.die.net/man/8/tpm_quote_tools">TPM quote</a>). As we transitioned to PSB, we wanted to make this easier to determine by adding a specific suffix: <code>-sig</code>  that we could query in userspace. This would allow us to query this information via <a href="https://prometheus.io/">Prometheus</a>. Changing the file name alone wouldn’t do it, so we had to make the following changes to reflect a new naming convention for signed images:</p><ul><li><p>Update filename</p></li><li><p>Update BIOS version for setup menu</p></li><li><p>Update post message</p></li><li><p>Update <a href="https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_2.7.1.pdf">SMBIOS type 0</a> (BIOS version string identifier)</p></li></ul><p>Signed images now have a <code>-sig</code> suffix:</p>
            <pre><code>~$ sudo dmidecode -t0
# dmidecode 3.2
Getting SMBIOS data from sysfs.
SMBIOS 3.3.0 present.
# SMBIOS implementations newer than version 3.2.0 are not
# fully supported by this version of dmidecode.

Handle 0x0000, DMI type 0, 26 bytes
BIOS Information
	Vendor: American Megatrends Inc.
	Version: V2.20-sig
	Release Date: 09/29/2020
	Address: 0xF0000
	Runtime Size: 64 kB
	ROM Size: 16 MB</code></pre>
            
    <div>
      <h2>Conclusion</h2>
      <a href="#conclusion">
        
      </a>
    </div>
    <p>Finding weaknesses in firmware is a challenge that many attackers have taken on. Attacks that physically manipulate the firmware used for performing hardware initialization during the booting process can invalidate many of the common secure boot features that are considered industry standard. By implementing a hardware root of trust that is used for code signing critical boot entities, your hardware becomes a 'first line of defense' in ensuring that your server hardware and software integrity can derive trust through cryptographic means.</p>
    <div>
      <h2>What’s Next?</h2>
      <a href="#whats-next">
        
      </a>
    </div>
    <p>While this post discussed our current, AMD-based hardware platform, how will this affect our future hardware generations? One of the benefits of working with diverse vendors like AMD and <a href="https://amperecomputing.com/">Ampere</a> (ARM) is that we can ensure they are baking in our desired platform security by default (which we’ll speak about in a future post), making our hardware security outlook that much brighter ?.</p> ]]></content:encoded>
            <category><![CDATA[Security]]></category>
            <category><![CDATA[Hardware]]></category>
            <category><![CDATA[Encryption]]></category>
            <category><![CDATA[Data Center]]></category>
            <category><![CDATA[Cloudflare Network]]></category>
            <guid isPermaLink="false">m0jUp84VV1cK5dqLgVh32</guid>
            <dc:creator>Derek Chamorro</dc:creator>
            <dc:creator>Ryan Chow</dc:creator>
        </item>
        <item>
            <title><![CDATA[Cloudflare Network expands to more than 100 Countries]]></title>
            <link>https://blog.cloudflare.com/cloudflare-network-expands-to-more-than-100-countries/</link>
            <pubDate>Wed, 15 Jul 2020 15:43:17 GMT</pubDate>
            <description><![CDATA[ We have expanded our global network to 206 cities across more than 100 countries. This is in addition to completing 40+ datacenter expansion projects and adding over 1Tbps of bandwidth capacity to our global backbone so-far in 2020.  ]]></description>
            <content:encoded><![CDATA[ <p></p><p>2020 has been a historic year that will forever be associated with the COVID-19 pandemic. Over the past six months, we have seen societies, businesses, and entire industries unsettled. The situation at Cloudflare has been no different. And while this pandemic has affected each and every one of us, we here at Cloudflare have not forgotten what our mission is: to help build a better Internet.</p><p>We have expanded our global network to 206 cities across more than 100 countries. This is in addition to completing 40+ datacenter expansion projects and adding over 1Tbps in dedicated “backbone” (transport) capacity connecting our major data centers so far this year.</p>
    <div>
      <h3>Pandemic times means new processes</h3>
      <a href="#pandemic-times-means-new-processes">
        
      </a>
    </div>
    <p>There was zero chance that 2020 would mean business as usual within the Infrastructure department. We were thrown a curve-ball as the pandemic began affecting our supply chains and operations. By April, the vast majority of the world’s passenger flights were grounded. The majority of bulk air freight ships within the lower deck (“belly”) of these flights, which saw an imbalance between supply and demand with the sudden 74% decrease in passenger belly cargo capacity relative to the same period last year.</p><p>We were fortunate to have existing logistics partners who were involved in medical equipment distribution, subsequently offering to help us maintain our important global infrastructure cargo flows. In one example, our logistics partner Expeditors , already operating with limited staff to limit the risk of exposure, went above and beyond securing us space on  “freight only” converted passenger aircraft flights from  Taipei.</p>
    <div>
      <h3>Six new cities</h3>
      <a href="#six-new-cities">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2xkwAZci8njwBe2tgobq2n/340bac0f051ba37638c2b9ce96eba077/image1-7.png" />
            
            </figure><p>New cities represent more than a new dot on the map for Cloudflare. These cities represent unique partnerships with ISPs all over the world which allow Cloudflare to bring the Internet closer to an ISP’s end-users and increase our edge compute capabilities in the region.</p><p>When we enter into a partnership with an ISP it is also a commitment to that ISP, and to our customers, to increase the security, performance, and reliability of the more than 27 million Internet properties on our network. These accomplishments would not be possible if not for our partners and the individuals who make up Cloudflare’s Infrastructure and Network Operations teams.</p><p>Of the six new cities we’ve turned up this year five represent new countries for Cloudflare, including one very close to my heart.</p><ul><li><p><b>Vientiane</b>, Laos*. Our first data center in Laos, a country where accessible high-speed Internet has only been available for a few decades. In the last two decades, there has been an exponential growth of Laos Internet users <a href="https://www.internetlivestats.com/internet-users/laos/">increasing from just under 6,000 residents in 2000 to over 1,000,000 residents</a> when 4G LTE service launched in 2015.</p></li><li><p><b>Tegucigalpa</b>, Honduras*. The nation's capital, Tegucigalpa is the most populated city in Honduras. This also marks our first data center in-country. Today <a href="https://www.internetworldstats.com/central.htm">41% of the population are active Internet users</a> which is the lowest of all countries in Central America and we are excited to help bring faster and more reliable Internet to the people of Honduras.</p></li><li><p><b>Johor Bahru</b>, Malaysia. Our second data center in Malaysia is located in the <a href="https://www.cia.gov/library/publications/the-world-factbook/geos/my.html">second-largest city</a> in the country. Johor Bahru serves as a gateway between Singapore and Malaysia and we are proud to be a participant on the Johor Bahru Internet Exchange (JBIX), the <a href="https://www.malaysianwireless.com/2019/11/de-cix-malaysia-jbix/">second IX to launch in Malaysia</a>. Turning up this site was a challenge for our deployment partners, who went above and beyond to install and provision during the beginning stages of nationwide COVID-19 lockdowns.</p></li><li><p><b>Monrovia</b>, Liberia*. Our 15th data center on the continent of Africa shares a history with the United States. Liberia as we know it today first began as a settlement for freed slaves from the United States almost 200 years ago. Monrovia, the nation’s capital, was the largest settlement and today makes up <a href="https://www.cia.gov/library/publications/the-world-factbook/geos/print_li.html">roughly one-third of the population of Liberia</a>.</p></li><li><p><b>Bandar Seri Begawan</b>, Brunei*. Although Brunei is the second smallest country in Southeast Asia by land area (only behind Singapore), and the smallest country by population, Brunei is <a href="https://datareportal.com/reports/digital-2020-global-digital-overview">currently ranked 4th in the world</a> for the highest share of social media users coming in at 94% of the population.</p></li><li><p><b>Paramaribo</b>, Suriname*. While Suriname is one of the smallest countries in South America it is one of the most diverse countries in all of the Americas. 80% of the country is covered by tropical rainforest and <a href="https://www.paho.org/salud-en-las-americas-2017/?p=4307">70% of the nation's population resides in just two urban districts</a> which only account for 0.5% of the country's total land. This also happens to be my home country where my entire family is from, and where I was born.</p></li></ul><p>* = New Country for Cloudflare’s global network</p>
    <div>
      <h3>Cloudflare network expansion hits home for our team</h3>
      <a href="#cloudflare-network-expansion-hits-home-for-our-team">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5UIIdngk0ggbEEGwU6dueK/5430cf7529a5cc90712f98a1b0e56ebb/image2-5.png" />
            
            </figure><p>50th-percentile performance improvement versus other edge networks when Surinamese traffic started being served in-country. // Source: Cedexis</p><p>When I shared the news with my Surinamese family that Cloudflare had turned up a data center in Suriname they were extremely proud. More importantly, they are excited at the opportunity to see increased performance and reliability on the Internet. When my family immigrated to the United States more than 30 years ago, one of the hardships of establishing this new life was communicating with loved ones back home.</p><p>Even in the advent of global communication via social media, challenges still persist. Having access to reliable and secure Internet is still a luxury in many parts of the world. Suriname is no different. For many years my family relied on wireless carriers for reliable Internet connectivity. That has changed significantly in the last decade with improvements to the Internet’s infrastructure in Suriname. One big challenge is the physical distance between the Internet users in Suriname and where the content (servers) are located.</p><p>When we partner with a local ISP in-country it allows us to shorten that distance and bring the Internet closer. I am proud to work for a company that is helping deliver better access to  Internet users like my family in Suriname and millions of others around the world.</p>
    <div>
      <h3>Cloudflare is still growing, even when everyone is working from home</h3>
      <a href="#cloudflare-is-still-growing-even-when-everyone-is-working-from-home">
        
      </a>
    </div>
    <p>During these times communicating over the Internet has become essential for everyone. As more businesses and people are shifting to Internet-based operations our work is more critical than ever. We’re only halfway through the year and have a lot more work to do. This means we are continuing to grow our company by hiring and offering fully remote onboarding. <a href="https://www.cloudflare.com/careers/jobs/">Check out our careers page</a> for more information on full-time positions and internship roles across the globe.</p> ]]></content:encoded>
            <category><![CDATA[Cloudflare Network]]></category>
            <category><![CDATA[Data Center]]></category>
            <guid isPermaLink="false">7xVp0GcsYKjTdBfbbznGQl</guid>
            <dc:creator>Kevin Dompig</dc:creator>
        </item>
        <item>
            <title><![CDATA[Introducing Regional Services]]></title>
            <link>https://blog.cloudflare.com/introducing-regional-services/</link>
            <pubDate>Fri, 26 Jun 2020 11:00:00 GMT</pubDate>
            <description><![CDATA[ Cloudflare launches Regional Services, giving customers control over where their data is processed. ]]></description>
            <content:encoded><![CDATA[ <p>In a world where, increasingly, workloads shift to the cloud, it is often uncertain and unclear how data travels the Internet and in which countries data is processed. Today, Cloudflare is pleased to announce that we're giving our customers control. With Regional Services, we’re providing customers full control over exactly where their traffic is handled.</p><p>We operate a global network spanning more than 200 cities. Each data center runs servers with the exact same software stack. This has enabled Cloudflare to quickly and efficiently add capacity where needed. It also allows our engineers to ship features with ease: deploy once, and it's available globally.</p><p>The same benefit applies to our customers: configure once and that change is applied everywhere in seconds, regardless of whether they’re changing security features, adding a DNS record or deploying a Cloudflare Worker containing code.</p><p>Having a homogenous network is great from a routing point of view: whenever a user performs an HTTP request, the closest datacenter is found due to Cloudflare's Anycast network. BGP looks at the hops that would need to be traversed to find the closest data center. This means that someone near the Canadian border (let's say North Dakota) could easily find themselves routed to Winnipeg (inside Canada) instead of a data center in the United States. This is generally what our customers want and expect: find the fastest way to serve traffic, regardless of geographic location.</p><a href="https://cloudflare.tv/">
         <img src="http://staging.blog.mrk.cfdata.org/content/images/2020/06/tube-blog-banner.png" />
      </a><p>Some organizations, however, have expressed preferences for maintaining regional control over their data for a variety of reasons. For example, they may be bound by agreements with their own customers that include geographic restrictions on data flows or data processing. As a result, some customers have requested control over where their web traffic is serviced.</p><p>Regional Services gives our customers the ability to accommodate regional restrictions while still using Cloudflare’s global edge network. As of today, Enterprise customers can add Regional Services to their contracts. With Regional Services, customers can choose which subset of data centers are able to service traffic on the HTTP level. But we're not reducing network capacity to do this: that would not be the Cloudflare Way. Instead, we're allowing customers to use our entire network for <a href="https://www.cloudflare.com/ddos/">DDoS protection</a> but limiting the data centers that apply higher-level layer 7 security and performance features such as WAF, Workers, and Bot Management.</p><p>Traffic is ingested on our global Anycast network at the location closest to the client, as usual, and then passed to data centers inside the geographic region of the customer’s choice. TLS keys are only <a href="/geo-key-manager-how-it-works">stored</a> and used to actually handle traffic inside that region. This gives our customers the benefit of our huge, low-latency, high-throughput network, capable of withstanding even the <a href="/the-daily-ddos-ten-days-of-massive-attacks/">largest DDoS attacks</a>, while also giving them local control: only data centers inside a customer’s preferred geographic region will have the access necessary to apply security policies.</p><p>The diagram below shows how this process works. When users connect to Cloudflare, they hit the closest data center to them, by nature of our Anycast network. That data center detects and mitigates DDoS attacks. Legitimate traffic is passed through to a data center with the geographic region of the customers choosing. Inside that data center, traffic is inspected at OSI layer 7 and HTTP products can work their magic:</p><ul><li><p>Content can be returned from and stored in cache</p></li><li><p>The WAF looks inside the HTTP payloads</p></li><li><p>Bot Management detects and blocks suspicious activity</p></li><li><p>Workers scripts run</p></li><li><p>Access policies are applied</p></li><li><p>Load Balancers look for the best origin to service traffic</p></li></ul>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7aaFSqiVx77rXsS2N3RT1f/d574a8616e54dd8246b68ee94a09837e/image2-9.png" />
            
            </figure><p>Today's launch includes preconfigured geographic regions; we'll look to add more depending on customer demand. Today, US and EU regions are available immediately, meaning layer 7 (HTTP) products can be configured to only be applied within those regions and not outside of them.</p><p>The US and EU maps are depicted below. Purple dots represent data centers that apply DDoS protection and network acceleration. Orange dots represent data centers that process traffic.</p>
    <div>
      <h3>US</h3>
      <a href="#us">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/27QO1l8SD4U7w27OSYYPOp/33c4577ab859445c0f3fab1f515fbf72/image1-10.png" />
            
            </figure>
    <div>
      <h3>EU</h3>
      <a href="#eu">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/10lHcRerwTtYDamjx1u0HA/7f714e18362e0ad7a09caa8ea4447406/BDES-655-_-Slides-with-Cloudflare-PoPs-for-product-launch--1-.jpg" />
            
            </figure><p>We're very excited to provide new tools to our customers, allowing them to dictate which of our data centers employ HTTP features and which do not. If you're interested in learning more, contact <a>sales@cloudflare.com</a>.</p> ]]></content:encoded>
            <category><![CDATA[Data Center]]></category>
            <category><![CDATA[Europe]]></category>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[BGP]]></category>
            <category><![CDATA[Regional Services]]></category>
            <guid isPermaLink="false">6odmOeCIIEK47sVIlmcGt6</guid>
            <dc:creator>Achiel van der Mandele</dc:creator>
        </item>
        <item>
            <title><![CDATA[Securing Memory at EPYC Scale]]></title>
            <link>https://blog.cloudflare.com/securing-memory-at-epyc-scale/</link>
            <pubDate>Fri, 28 Feb 2020 14:00:00 GMT</pubDate>
            <description><![CDATA[ At Cloudflare, we encrypt data both in transit (on the network) and at rest (on the disk). Both practices address some of the most common vectors used to exfiltrate information and these measures serve to protect sensitive data from attackers but, what about data currently in use? ]]></description>
            <content:encoded><![CDATA[ <p></p><p>Security is a serious business, one that we do not take lightly at Cloudflare. We have <a href="https://www.cloudflare.com/compliance/">invested a lot of effort</a> into ensuring that our services, both external and internal, are protected by meeting or exceeding industry best practices. Encryption is a huge part of our strategy as it is embedded in nearly every process we have. At Cloudflare, we encrypt data both in <a href="/rfc-8446-aka-tls-1-3/">transit</a> (on the network) and at rest (on the disk). Both practices address some of the most common vectors used to exfiltrate information and these measures serve to <a href="https://www.cloudflare.com/learning/security/what-is-information-security/">protect sensitive data</a> from attackers but, what about data currently in use?</p><p>Can encryption or any technology eliminate all threats? No, but as Infrastructure Security, it’s our job to consider worst-case scenarios. For example, what if someone were to steal a server from one of our <a href="https://www.cloudflare.com/network/">data centers</a>? How can we leverage the most reliable, cutting edge, innovative technology to secure all data on that host if it were in the wrong hands? Would it be protected? And, in particular, what about the server’s RAM?</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/F40SGb897EzCafJNfUMxo/9346da5cc95f377fd15c8ebe6d3a7077/mission-impossible-1.png" />
            
            </figure><p>Data in random access memory (RAM) is usually stored in the clear. This can leave data vulnerable to software or hardware probing by an attacker on the system. Extracting data from memory isn’t an easy task but, with the rise of <a href="https://www.snia.org/sites/default/files/SSSI/NVDIMM%20-%20Changes%20are%20Here%20So%20What's%20Next%20-%20final.pdf">persistent memory technologies</a>, additional attack vectors are possible:</p><ul><li><p>Dynamic random-access memory (<a href="https://user.eng.umd.edu/~blj/talks/DRAM-Tutorial-isca2002.pdf">DRAM</a>) interface snooping</p></li><li><p>Installation of hardware devices that access host memory</p></li><li><p><a href="https://en.wikipedia.org/wiki/Cold_boot_attack">Freezing and stealing</a> dual in-line memory module (<a href="https://en.wikipedia.org/wiki/DIMM">DIMMs</a>)</p></li><li><p>Stealing non-volatile dual in-line memory module (<a href="https://en.wikipedia.org/wiki/NVDIMM">NVDIMMs</a>)</p></li></ul><p>So, what about enclaves? Hardware manufacturers have introduced <a href="https://en.wikipedia.org/wiki/Trusted_execution_environment">Trusted Execution Environments</a> (also known as enclaves) to help create security boundaries by isolating software execution at runtime so that sensitive data can be processed in a trusted environment, such as secure area inside an existing processor or <a href="https://en.wikipedia.org/wiki/Trusted_Platform_Module">Trusted Platform Module</a>.</p><p>While this allows developers to shield applications in untrusted environments, it doesn’t effectively address all of the physical system attacks mentioned previously. Enclaves were also meant to run small pieces of code. You <i>could</i> run an <a href="https://www.usenix.org/system/files/conference/osdi14/osdi14-paper-baumann.pdf">entire OS in an enclave</a>, but there are <a href="https://blog.quarkslab.com/overview-of-intel-sgx-part-1-sgx-internals.html">limitations</a> and performance issues in doing so.</p><p>This isn’t meant to bash enclave usage; we just wanted a better solution for encrypting all memory at scale. We expected performance to be compromised, and conducted tests to see just how much.</p>
    <div>
      <h2>Time to get EPYC</h2>
      <a href="#time-to-get-epyc">
        
      </a>
    </div>
    <p>Since we are using <a href="/cloudflares-gen-x-servers-for-an-accelerated-future/">AMD for our tenth generation "Gen X servers"</a>, we found an interesting security feature within the System on a Chip architecture of the AMD EPYC line. Secure Memory Encryption (SME) is an <a href="https://en.wikichip.org/wiki/x86">x86</a> instruction set <a href="https://en.wikichip.org/wiki/x86/extension">extension</a> introduced by AMD and available in the <a href="https://developer.amd.com/sev/">EPYC processor line.</a> SME provides the ability to mark individual pages of memory as encrypted using standard x86 page tables. A page that is marked encrypted will be automatically decrypted when read from DRAM and encrypted when written to DRAM. SME can therefore be used to protect the contents of DRAM from physical attacks on the system.</p><p>Sounds complicated, right? Here’s the secret: It isn’t ?</p>
    <div>
      <h2>Components</h2>
      <a href="#components">
        
      </a>
    </div>
    <p>SME is comprised of two components:</p><ul><li><p><b>AES-128 encryption</b> <b>engine</b>: Embedded in the memory controller. It is responsible for encrypting and decrypting data in main memory when an appropriate key is provided via the Secure Processor.</p></li><li><p><b>AMD Secure Processor (AMD-SP)</b>: An on-die 32-bit <a href="https://developer.arm.com/ip-products/processors/cortex-a/cortex-a5">ARM Cortex A5 CPU</a> that provides cryptographic functionality for secure key generation and key management. Think of this like a mini hardware security module that uses a hardware random number generator to generate the 128-bit key(s) used by the encryption engine.</p></li></ul>
    <div>
      <h2>How It Works</h2>
      <a href="#how-it-works">
        
      </a>
    </div>
    <p>We had two options available to us when it came to enabling SME. The first option, regular SME, requires enabling a model specific register <code>MSR 0xC001_0010[SMEE]</code>. This enables the ability to set a page table entry encryption bit:</p><ul><li><p>0 = memory encryption features are disabled</p></li><li><p>1 = memory encryption features are enabled</p></li></ul><p>After memory encryption is enabled, a physical address bit (C-Bit) is utilized to mark if a memory page is protected. The operating system sets the bit of a physical address to 1 in the page table entry (PTE) to indicate the page should be encrypted. This causes any data assigned to that memory space to be automatically encrypted and decrypted by the AES engine in the memory controller:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4Y55gr55Ypmf0kCFfSBrNN/d52fa52def521555431c16c76d9a1086/enclavng-diagrams_3x.png" />
            
            </figure>
    <div>
      <h3>Becoming More Transparent</h3>
      <a href="#becoming-more-transparent">
        
      </a>
    </div>
    <p>While arbitrarily flagging which page table entries we want encrypted is nice, our objective is to ensure that we are incorporating the full physical protection of SME. This is where the second mode of SME came in, Transparent SME (TSME). In TSME, all memory is encrypted regardless of the value of the encrypt bit on any particular page. This includes both instruction and data pages, as well as the pages corresponding to the page tables themselves.</p><p>Enabling TSME is as simple as:</p><ol><li><p>Setting a BIOS flag:</p></li></ol>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6AqdL0sTjEI4YKjHdwas11/d1f28bfac2bd91a7751fe4fe2aa25109/bios-tsme2.png" />
            
            </figure><p>2. Enabling kernel support with the following flag:</p><p><code>CONFIG_AMD_MEM_ENCRYPT=y</code></p><p>After a reboot you should see the following in <code>dmesg</code>:</p>
            <pre><code>$ sudo dmesg | grep SME
[    2.537160] AMD Secure Memory Encryption (SME) active</code></pre>
            
    <div>
      <h2>Performance Testing</h2>
      <a href="#performance-testing">
        
      </a>
    </div>
    <p>To weigh the pros and cons of implementation against the potential risk of a stolen server, we had to test the performance of enabling TSME. We took a test server that mirrored a production edge metal with the following specs:</p><ul><li><p>Memory: 8 x 32GB 2933MHz</p></li><li><p>CPU: AMD 2nd Gen EPYC 7642 with SMT enabled and running NPS4 mode</p></li><li><p>OS: Debian 9</p></li><li><p>Kernel: <a href="https://lwn.net/Articles/809568/">5.4.12</a></p></li></ul><p>The performance tools we used were:</p><ul><li><p><a href="http://www.cs.virginia.edu/stream/ref.html">STREAM</a></p></li><li><p><a href="http://man7.org/linux/man-pages/man8/cryptsetup.8.html">Cryptsetup</a></p></li><li><p>Benchmarky</p></li></ul>
    <div>
      <h2>Stream</h2>
      <a href="#stream">
        
      </a>
    </div>
    <p>We used a custom STREAM binary with 24 threads, using all available cores, to measure the sustainable memory bandwidth (in MB/s). Four synthetic computational kernels are run, with the output of each kernel being used as an input to the next. The best rates observed are reported for each choice of thread count.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1kwLMDcfqdWZ0dP9dgpbBO/a8ac5a90cd57a212539df64002fd1a04/Stream-SME-On-vs-Off-1.png" />
            
            </figure>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3C8c6Nfn0cScGA0dt4yTaN/1bf1a1f32cceefac591aab63a1ab1e1c/Stream-Performance-delta-1.png" />
            
            </figure><p>The figures above show 2.6% to 4.2% performance variation, with a mean of 3.7%. These were the highest numbers measured, which fell below an expected performance impact of &gt;5%.</p>
    <div>
      <h2>Cryptsetup</h2>
      <a href="#cryptsetup">
        
      </a>
    </div>
    <p>While cryptsetup is normally used for encrypting disk partitions, it has a benchmarking utility that will report on a host’s cryptographic performance by iterating key derivation functions using memory only:</p><p>Example:</p>
            <pre><code>$ sudo cryptsetup benchmark
# Tests are approximate using memory only (no storage IO).
PBKDF2-sha1      1162501 iterations per second for 256-bit key
PBKDF2-sha256    1403716 iterations per second for 256-bit key
PBKDF2-sha512    1161213 iterations per second for 256-bit key
PBKDF2-ripemd160  856679 iterations per second for 256-bit key
PBKDF2-whirlpool  661979 iterations per second for 256-bit key</code></pre>
            
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5BC1HclFkbzijWahfsXLxH/67dec2664c6a31625c99613aef6b925e/cryptsetup-benchmark-SME-Off-vs-On-1.png" />
            
            </figure>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1FoosofQ0iHlQbLAdi8fuS/950d23104a94ad5bd66f15614dd72b49/crypt-Performance-delta-1.png" />
            
            </figure>
    <div>
      <h2>Benchmarky</h2>
      <a href="#benchmarky">
        
      </a>
    </div>
    <p>Benchmarky is a homegrown tool <a href="/author/ivan/">provided by our Performance team</a> to run synthetic workloads against a specific target to evaluate performance of different components. It uses <a href="https://workers.cloudflare.com/">Cloudflare Workers</a> to send requests and read stats on responses. In addition to that, it also reports versions of all important stack components and their CPU usage. Each test runs 256 concurrent clients, grabbing a cached 10kB PNG image from a performance testing endpoint, and calculating the requests per second (RPS).</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2uHw5bMNlZiKFLb3Ks5weQ/37cbcd116f472c6b20a35ede49d26f15/benckmarky-SME-off-and-SME-on-1.png" />
            
            </figure>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3h5FsuK2Lv5xS3qUwv382A/2161213c7b0fb3715d9ab3eae66d4cc3/bench-Performance-delta-1.png" />
            
            </figure>
    <div>
      <h2>Conclusion</h2>
      <a href="#conclusion">
        
      </a>
    </div>
    <p>In the majority of test results, performance decreased by a nominal amount, actually less than we expected. AMD’s official <a href="https://developer.amd.com/wordpress/media/2013/12/AMD_Memory_Encryption_Whitepaper_v7-Public.pdf">white paper</a> on SME even states that encryption and decryption of memory through the AES engine does incur a small amount of additional latency for DRAM memory accesses, though dependent on the workload. Across all 11 data points, our average performance drag was only down by .699%. Even at scale, enabling this feature has reduced the worry that <i>any</i> data could be exfiltrated from a stolen server.</p><p>While we wait for other hardware manufacturers to add support for <a href="https://en.wikichip.org/wiki/x86/tme">total memory encryption,</a> we are happy that AMD has set the bar high and is protecting our next generation edge hardware.</p> ]]></content:encoded>
            <category><![CDATA[EPYC]]></category>
            <category><![CDATA[Hardware]]></category>
            <category><![CDATA[Data Center]]></category>
            <category><![CDATA[Cloudflare Network]]></category>
            <category><![CDATA[Security]]></category>
            <guid isPermaLink="false">8ZqsGZD6Kw9pakjpzsIuP</guid>
            <dc:creator>Derek Chamorro</dc:creator>
            <dc:creator>Brian Bassett</dc:creator>
        </item>
        <item>
            <title><![CDATA[Impact of Cache Locality]]></title>
            <link>https://blog.cloudflare.com/impact-of-cache-locality/</link>
            <pubDate>Wed, 26 Feb 2020 12:00:00 GMT</pubDate>
            <description><![CDATA[ Our Gen X servers process more requests per second per core than our previous fleet. The AMD 2nd Gen EPYC 7642 processor’s large L3 cache minimizes L3 cache misses, and the time-savings add up quickly. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>In the past, we didn't have the opportunity to evaluate as many CPUs as we do today. The hardware ecosystem was simple – Intel had consistently delivered industry leading processors. Other vendors could not compete with them on both performance and cost. Recently it all changed: AMD has been challenging the status quo with their 2nd Gen EPYC processors.</p><p>This is not the first time that Intel has been challenged; previously <a href="/arm-takes-wing/">there was Qualcomm</a>, and we worked with AMD and considered their 1st Gen EPYC processors and based on the original Zen architecture, but ultimately, <a href="/a-tour-inside-cloudflares-g9-servers/">Intel prevailed</a>. AMD did not give up and unveiled their 2nd Gen EPYC processors codenamed Rome based on the latest Zen 2 architecture.</p><blockquote><p>Playing with some new fun kit. <a href="https://twitter.com/hashtag/epyc?src=hash&amp;ref_src=twsrc%5Etfw">#epyc</a> <a href="https://t.co/1No8Cmfzwl">pic.twitter.com/1No8Cmfzwl</a></p><p>— Matthew Prince ? (@eastdakota) <a href="https://twitter.com/eastdakota/status/1192898039003766785?ref_src=twsrc%5Etfw">November 8, 2019</a></p></blockquote><p>This made many improvements over its predecessors. Improvements include a die shrink from 14nm to 7nm, a doubling of the top end core count from 32 to 64, and a larger L3 cache size. Let’s emphasize again on the size of that L3 cache, which is 32 MiB L3 cache per Core Complex Die (CCD).</p><p>This time around, we have taken steps to understand our workloads at the hardware level through the use of hardware performance counters and profiling tools. Using these specialized CPU registers and profilers, we collected data on the AMD 2nd Gen EPYC and Intel Skylake-based Xeon processors in a lab environment, then validated our observations in production against other generations of servers from the past.</p>
    <div>
      <h2>Simulated Environment</h2>
      <a href="#simulated-environment">
        
      </a>
    </div>
    <p>CPU Specifications</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/42MpuiHDcFmNWT8c5GOh96/3666d84667b56b645e29aec5cfafdfdd/image-3.png" />
            
            </figure><p>We evaluated several Intel Cascade Lake and AMD 2nd Gen EPYC processors, trading off various factors between power and performance; the AMD EPYC 7642 CPU came out on top. The majority of Cascade Lake processors have 1.375 MiB L3 cache per core shared across all cores, a common theme that started with Skylake. On the other hand, the 2nd Gen EPYC processors start at 4 MiB per core. The AMD EPYC 7642 is a unique SKU since it has 256 MiB of L3 cache. Having a cache this large or approximately 5.33 MiB sitting right next to each core means that a program will spend fewer cycles fetching data from RAM with the capability to have more data readily available in the L3 cache.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7FVYxpe6TeVh26fV12eeBw/a285e437f90b2ac809811bb3645b1130/Infrastructure-before_2x.png" />
            
            </figure><p><i>Before (Intel)</i></p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/zMlvsRWnuL6SwUUPyLHBu/13d459bee2cf7d0c195bb74b18c49555/Infrastructure-after-_2x--1-.png" />
            
            </figure><p><i>After (AMD)</i></p><p>Traditional cache layout has also changed with the introduction of 2nd Gen EPYC, a byproduct of AMD using a multi-chip module (MCM) design. The 256 MiB L3 cache is formed by 8 individual dies or Core Complex Die (CCD) that is formed by 2 Core Complexes (CCX) with each CCX containing 16 MiB of L3 cache.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5oqKl2iToZamCbBNQBH2uj/ba9b72846f7f81c92e0ccf705f3be9c1/image6.png" />
            
            </figure><p><i>Core Complex (CCX) - Up to four cores</i></p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6p5FRRU9VZTMWhkdNH7g4/acb4ff79d8916a20278f8c50e21c53bb/image9.png" />
            
            </figure><p><b>Core Complex Die (CCD) - Created by combining two CCXs</b></p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2IyMxh74THzCubUs6H3SY1/a031494b9f0783406ef653b3e99ad598/image1-2.png" />
            
            </figure><p><i>AMD 2nd Gen EPYC 7642 - Created with 8x CCDs plus an I/O die in the center</i></p>
    <div>
      <h3>Methodology</h3>
      <a href="#methodology">
        
      </a>
    </div>
    <p>Our production traffic shares many characteristics of a sustained workload which typically does not induce large variation in operating frequencies nor enter periods of idle time. We picked out a simulated traffic pattern that closely resembled our production traffic behavior which was the Cached 10KiB png via HTTPS. We were interested in assessing the CPU’s maximum throughput or requests per second (RPS), one of our key metrics. With that being said, we did not disable Intel Turbo Boost or AMD Precision Boost, nor matched the frequencies clock-for-clock while measuring for requests per second, instructions retired per second (IPS), L3 cache miss rate, and sustained operating frequency.</p>
    <div>
      <h3>Results</h3>
      <a href="#results">
        
      </a>
    </div>
    <p>The 1P AMD 2nd Gen EPYC 7642 powered server took the lead and processed 50% more requests per second compared to our Gen 9’s 2P Intel Xeon Platinum 6162 server.</p><p>We are running a sustained workload, so we should end up with a sustained operating frequency that is higher than base clock. The AMD EPYC 7642 operating frequency or the number cycles that the processor had at its disposal was approximately 20% greater than the Intel Xeon Platinum 6162, so frequency alone was not enough to explain the 50% gain in requests per second.</p><p>Taking a closer look, the number of instructions retired over time was far greater on the AMD 2nd Gen EPYC 7642 server, thanks to its low L3 cache miss rate.</p>
    <div>
      <h3>Production Environment</h3>
      <a href="#production-environment">
        
      </a>
    </div>
    <p>CPU Specifications</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7lji8wRNR827IKHgDE3asr/3180fa701066cee223dde822b313d8ec/image-2.png" />
            
            </figure>
    <div>
      <h3>Methodology</h3>
      <a href="#methodology">
        
      </a>
    </div>
    <p>Our most predominant bottleneck appears to be the cache memory and we saw significant improvement in requests per second as well as <a href="/an-epyc-trip-to-rome-amd-is-cloudflares-10th-generation-edge-server-cpu/">time to process a request</a> due to low L3 cache miss rate. The data we present in this section was collected at a point of presence that spanned between Gen 7 to Gen 9 servers. We also collected data from a secondary region to gain additional confidence that the data we present here was not unique to one particular environment. Gen 9 is the baseline just as we have done in the previous section.</p><p>We put the 2nd Gen EPYC-based Gen X into production with hopes that the results would mirror closely to what we have previously seen in the lab. We found that the requests per second did not quite align with the results we had hoped, but the AMD EPYC server still outperformed all previous generations including outperforming the Intel Gen 9 server by 36%.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4V8uzcFfnFwUIH0leecLnm/232bd88ceb2216efa4fae242a085a140/image8.png" />
            
            </figure><p>Sustained operating frequency was nearly identical to what we have seen back in the lab.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3DhckmjQqo7b9JtllouvVL/19b3fda2e8a5a277c511269f4bc7a148/image10.png" />
            
            </figure><p>Due to the lower than expected requests per second, we also saw lower instructions retired over time and higher L3 cache miss rate but maintained a lead over Gen 9, with 29% better performance.</p>
    <div>
      <h2>Conclusion</h2>
      <a href="#conclusion">
        
      </a>
    </div>
    <p>The single AMD EPYC 7642 performed very well during our lab testing, beating our Gen 9 server with dual Intel Xeon Platinum 6162 with the same total number of cores. Key factors we noticed were its large L3 cache, which led to a low L3 cache miss rate, as well as a higher sustained operating frequency. The AMD 2nd Gen EPYC 7642 did not have as big of an advantage in production, but nevertheless still outperformed all previous generations. The observation we made in production was based on a PoP that could have been influenced by a number of other factors such as but not limited to ambient temperature, timing, and other new products that will shape our traffic patterns in the future such as <a href="/webassembly-on-cloudflare-workers/">WebAssembly on Cloudflare Workers</a>. The AMD EPYC 7642 opens up the possibility for our upcoming Gen X server to maintain the same core count while processing more requests per second than its predecessor.</p><p>Got a passion for hardware? I think we should get in touch. We are always looking for talented and curious individuals to <a href="https://www.cloudflare.com/careers/departments/">join our team</a>. The data presented here would not have been possible if it was not for the teamwork between many different individuals within Cloudflare. As a team, we strive to work together to create highly performant, reliable, and secure systems that will form the pillars of our rapidly growing <a href="https://www.cloudflare.com/network/">network</a> that spans 200 cities in more than 90 countries and we are just getting started.</p> ]]></content:encoded>
            <category><![CDATA[Hardware]]></category>
            <category><![CDATA[Data Center]]></category>
            <category><![CDATA[Cloudflare Network]]></category>
            <category><![CDATA[Partners]]></category>
            <category><![CDATA[EPYC]]></category>
            <category><![CDATA[Speed & Reliability]]></category>
            <guid isPermaLink="false">2QRJzUFnyzSRaIXLggtDqr</guid>
            <dc:creator>Sung Park</dc:creator>
        </item>
        <item>
            <title><![CDATA[An EPYC trip to Rome: AMD is Cloudflare's 10th-generation Edge server CPU]]></title>
            <link>https://blog.cloudflare.com/an-epyc-trip-to-rome-amd-is-cloudflares-10th-generation-edge-server-cpu/</link>
            <pubDate>Tue, 25 Feb 2020 14:00:00 GMT</pubDate>
            <description><![CDATA[ As we looked at production ready systems to power our Gen X solution, we’re moving on from Gen 9's 48-core setup of dual socket Intel Xeon Platinum 6162's to a 48-core single socket AMD EPYC 7642. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>More than 1 billion unique IP addresses pass through the <a href="/tag/cloudflare-network/">Cloudflare Network</a> each day, serving on average 11 million HTTP requests per second and operating within 100ms of 95% of the Internet-connected population globally. Our network spans 200 cities in more than 90 countries, and our engineering teams have built an extremely <a href="/tag/speed-and-reliability/">fast and reliable infrastructure</a>.</p><p>We’re extremely proud of our work and are determined to help make the Internet a <a href="https://www.fastcompany.com/most-innovative-companies/2019/sectors/security">better and more secure place</a>. Cloudflare engineers who are involved with hardware get down to servers and their components to understand and select the best hardware to maximize the performance of our stack.</p><p>Our software stack is compute intensive and is very much CPU bound, driving our engineers to work continuously at optimizing Cloudflare’s performance and reliability at all layers of our stack. With the server, a straightforward solution for increasing computing power is to have more CPU cores. The more cores we can include in a server, the more output we can expect. This is important for us since the diversity of our products and customers has grown over time with increasing demand that requires our servers to do more. To help us drive compute performance, we needed to increase core density and that's what we did. Below is the processor detail for servers we’ve deployed since 2015, including the core counts:</p><table><tr><td><p>---</p></td><td><p><b>Gen 6</b></p></td><td><p><b>Gen 7</b></p></td><td><p><b>Gen 8</b></p></td><td><p><b>Gen 9</b></p></td></tr><tr><td><p>Start of service</p></td><td><p>2015</p></td><td><p>2016</p></td><td><p>2017</p></td><td><p>2018</p></td></tr><tr><td><p>CPU</p></td><td><p>Intel Xeon E5-2630 v3</p></td><td><p>Intel Xeon E5-2630 v4</p></td><td><p>Intel Xeon Silver 4116</p></td><td><p>Intel Xeon Platinum 6162</p></td></tr><tr><td><p>Physical Cores</p></td><td><p>2 x 8</p></td><td><p>2 x 10</p></td><td><p>2 x 12</p></td><td><p>2 x 24</p></td></tr><tr><td><p>TDP</p></td><td><p>2 x 85W</p></td><td><p>2 x 85W</p></td><td><p>2 x 85W</p></td><td><p>2 x 150W</p></td></tr><tr><td><p>TDP per Core</p></td><td><p>10.65W</p></td><td><p>8.50W</p></td><td><p>7.08W</p></td><td><p>6.25W</p></td></tr></table><p>In 2018, we made a big jump in total number of cores per server with <a href="/a-tour-inside-cloudflares-g9-servers/">Gen 9</a>. Our physical footprint was reduced by 33% compared to Gen 8, giving us increased capacity and computing power per rack. Thermal Design Power (TDP aka typical power usage) are mentioned above to highlight that we've also been more power efficient over time. Power efficiency is important to us: first, because we'd like to be as <a href="/a-carbon-neutral-north-america/">carbon friendly</a> as we can; and second, so we can better utilize our provisioned power supplied by the data centers. But we know we can do better.</p><p>Our main defining metric is Requests per Watt. We can increase our Requests per Second number with more cores, but we have to stay within our power budget envelope. We are constrained by the data centers’ power infrastructure which, along with our selected power distribution units, leads us to power cap for each server rack. Adding servers to a rack obviously adds more power draw increasing power consumption at the rack level. Our Operational Costs significantly increase if we go over a rack’s power cap and have to provision another rack. What we need is more compute power inside the same power envelope which will drive a higher (better) Requests per Watt number – our key metric.</p><p>As you might imagine, we look at power consumption carefully in the design stage. From the above you can see that it’s not worth the time for us to deploy more power-hungry CPUs if TDP per Core is higher than our current generation which would hurt our Requests per Watt metric. As we started looking at production ready systems to power our Gen X solution, we took a long look at what is available to us in the market today, and we’ve made our decision. We’re moving on from Gen 9's 48-core setup of dual socket <a href="https://ark.intel.com/content/www/us/en/ark/products/136869/intel-xeon-platinum-6162-processor-33m-cache-1-90-ghz.html">Intel® Xeon® Platinum 6162</a>'s to a 48-core single socket <a href="https://www.amd.com/en/products/cpu/amd-epyc-7642">AMD EPYC™ 7642</a>.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6Ub4NDKC4KKIMsXY2cFPJW/2bb5250e410aa4c75cad9651ab1b84f7/1.jpg" />
            
            </figure><p>                                      Gen X server setup with single socket 48-core AMD EPYC 7642.</p><table><tr><td><p><b>---</b></p></td><td><p><b>Intel</b></p></td><td><p><b>AMD</b></p></td></tr><tr><td><p>CPU</p></td><td><p>Xeon Platinum 6162</p></td><td><p>EPYC 7642</p></td></tr><tr><td><p>Microarchitecture</p></td><td><p>“Skylake”</p></td><td><p>“Zen 2”</p></td></tr><tr><td><p>Codename</p></td><td><p>“Skylake SP”</p></td><td><p>“Rome”</p></td></tr><tr><td><p>Process</p></td><td><p>14nm</p></td><td><p>7nm</p></td></tr><tr><td><p>Physical Cores</p></td><td><p>2 x 24</p></td><td><p>48</p></td></tr><tr><td><p>Frequency</p></td><td><p>1.9 GHz</p></td><td><p>2.4 GHz</p></td></tr><tr><td><p>L3 Cache / socket</p></td><td><p>24 x 1.375MiB</p></td><td><p>16 x 16MiB</p></td></tr><tr><td><p>Memory / socket</p></td><td><p>6 channels, up to DDR4-2400</p></td><td><p>8 channels, up to DDR4-3200</p></td></tr><tr><td><p>TDP</p></td><td><p>2 x 150W</p></td><td><p>225W</p></td></tr><tr><td><p>PCIe / socket</p></td><td><p>48 lanes</p></td><td><p>128 lanes</p></td></tr><tr><td><p>ISA</p></td><td><p>x86-64</p></td><td><p>x86-64</p></td></tr></table><p>From the specs, we see that with the AMD chip we get to keep the same amount of cores and lower TDP. Gen 9's TDP per Core was 6.25W, Gen X's will be 4.69W... That's a 25% decrease. With higher frequency, and perhaps going to a more simplified setup of single socket, we can speculate that the AMD chip will perform better. We're walking through a series of tests, simulations, and live production results in the rest of this blog to see how much better AMD performs.</p><p>As a side note before we go further, TDP is a simplified metric from the manufacturers’ datasheets that we use in the early stages of our server design and CPU selection process. A quick Google search leads to thoughts that AMD and Intel define TDP differently, which basically makes the spec unreliable. Actual CPU power draw, and more importantly server system power draw, are what we really factor in our final decisions.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4ue5oOlAdewYkerMSsEPWN/5cf921da1bc31eccd575af6670af66d3/2.png" />
            
            </figure>
    <div>
      <h3>Ecosystem Readiness</h3>
      <a href="#ecosystem-readiness">
        
      </a>
    </div>
    <p>At the beginning of our journey to choose our next CPU, we got a variety of processors from different vendors that could fit well with our software stack and services, which are written in C, LuaJIT, and Go. More details about benchmarking for our stack were explained when we benchmarked <a href="/arm-takes-wing/">Qualcomm's ARM® chip in the past</a>. We're going to go through the same suite of tests as Vlad's blog this time around since it is a quick and easy "sniff test". This allows us to test a bunch of CPUs within a manageable time period before we commit to spend more engineering effort and need to apply our software stack.</p><p>We tried a variety of CPUs with different number of cores, sockets, and frequencies. Since we're explaining how we chose the AMD EPYC 7642, all the graphs in this blog focus on how AMD compares with our <a href="/a-tour-inside-cloudflares-g9-servers/">Gen 9's Intel Xeon Platinum 6162 CPU</a> as a baseline.</p><p>Our results correspond to server node for both CPUs tested; meaning the numbers pertain to 2x 24-core processors for Intel, and 1x 48-core processor for AMD – a two socket Intel based server and a one socket AMD EPYC powered server. Before we started our testing, we changed the Cloudflare lab test servers’ BIOS settings to match our production server settings. This gave us CPU frequencies yields for AMD at 3.03 Ghz and Intel at 2.50 Ghz on average with very little variation. With gross simplification, we expect that with the same amount of cores AMD would perform about 21% better than Intel. Let’s start with our crypto tests.</p>
    <div>
      <h3>Cryptography</h3>
      <a href="#cryptography">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3AZYQDj2nhVofkFNuK7fhb/dea112fd9ae2b2e91514b62e21d242d6/3.png" />
            
            </figure>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2OpcfNqi2hraQrS8fZV0Lw/29fcc9dcf3ec73400a8fe784a12b26f5/4.png" />
            
            </figure><p>Looking promising for AMD. In public key cryptography, it does 18% better. Meanwhile, for symmetric key, AMD loses on AES-128-GCM, but it’s comparable overall.</p>
    <div>
      <h3>Compression</h3>
      <a href="#compression">
        
      </a>
    </div>
    <p>We do a lot of compression at the edge to save bandwidth and help deliver content faster. We go through both zlib and brotli libraries written in C. All tests are done on <a href="/">blog.cloudflare.com</a> HTML file in memory.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3IVKryfCIXY2c6vXt8KsPc/eab9765ff8650fc9fbe97a82cf89f0cf/5.png" />
            
            </figure>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2ycU6O5cbLREXNJV29sPDI/4472bc4ae36cfedae67535d08e5e10f8/6.png" />
            
            </figure><p>AMD wins by an average of 29% using gzip across all qualities. It does even better with brotli with tests lower than quality 7, which we use for dynamic compression. There’s a throughput cliff starting brotli-9 which <a href="/arm-takes-wing/">Vlad’s explanation</a> is that Brotli consumes lots of memory and thrashes cache. Nevertheless, AMD wins by a healthy margin.</p><p>A lot of our services are written in Go. In the following graphs we’re redoing the crypto and compression tests in Go along with RegExp on 32KB strings and the strings' library.</p>
    <div>
      <h3>Go Cryptography</h3>
      <a href="#go-cryptography">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1JRYfDXEC61iGL6Ds7LjL1/16b8980b2b2cf5bdda22769d0dad5fa6/7.png" />
            
            </figure>
    <div>
      <h3>Go Compression</h3>
      <a href="#go-compression">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5U6GEnTLU1VVvqbZtJZ1df/0e3a0fa77bbb3ce709e36503e9eaba66/Screen-Shot-2020-02-24-at-14.37.27.png" />
            
            </figure>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3YQTrE7SfEiCXjivU7NXXf/c5b22a8a38b2eb48c0658d4b9b3a1f63/9.png" />
            
            </figure>
    <div>
      <h3>Go Regexp</h3>
      <a href="#go-regexp">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1ZQn6rtg7fE6IJ3wNgpCf/9886faae1855b658347fccfe72802a0a/10.png" />
            
            </figure>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/vvUuNzVuRrgGqVrGOxagJ/720667e78cb5b34eda7f4ca0d445bd9f/11.png" />
            
            </figure>
    <div>
      <h3>Go Strings</h3>
      <a href="#go-strings">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3BY6NTdgjUWGiDBwC0NMNv/8943902a6f047eb8d2f9079e9b1e432b/12.png" />
            
            </figure><p>AMD performs better in all of our Go benchmarks except for ECDSA P256 Sign losing by 38%, which is peculiar since with the test in C it does 24% better. It’s worth investigating what’s going on here. Other than that, AMD doesn’t win by as much of a margin, but it still proves to be better.</p>
    <div>
      <h3>LuaJIT</h3>
      <a href="#luajit">
        
      </a>
    </div>
    <p>We rely a lot on LuaJIT in our stack. As <a href="/arm-takes-wing/">Vlad said</a>, it’s the glue that holds Cloudflare together. We’re glad to show that AMD wins here as well.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4VM41wrmwYIpaJSvR70ztl/95f5f48fad6f48034422ea69b62c73b6/13.png" />
            
            </figure><p>Overall our tests show a single EPYC 7642 to be more competitive than two Xeon Platinum 6162. While there are a couple of tests where AMD loses out such as OpenSSL AES-128-GCM and Go OpenSSL ECDSA-P256 Sign, AMD wins in all the others. By scanning quickly and treating all tests equally, AMD does on average 25% better than Intel.</p>
    <div>
      <h3>Performance Simulations</h3>
      <a href="#performance-simulations">
        
      </a>
    </div>
    <p>After our ‘sniff’ tests, we put our servers through another series of emulations which apply synthetic workloads simulating our edge software stack. Here we are simulating workloads of scenarios with different types of requests we see in production. Types of requests vary from asset size, whether they go through HTTP or HTTPS, <a href="https://www.cloudflare.com/learning/ddos/glossary/web-application-firewall-waf/">WAF</a>, Workers, or one of many additional variables. Below shows the throughput comparison between the two CPUs of the types of requests we see most typically.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2Rj1NqqXfYroVsefnGQQgS/c598bbf7b324ab6944236e91d5f5e28a/14.png" />
            
            </figure><p>The results above are ratios using Gen 9's Intel CPUs as the baseline normalized at 1.0 on the X-axis. For example, looking at simple requests of 10KiB assets over HTTPS, we see that AMD does 1.50x better than Intel in Requests per Second. On average for the tests shown on the graph above, AMD performs 34% better than Intel. Considering that the TDP for the single AMD EPYC 7642 is 225W, when compared to two Intel's being 300W, we're looking at AMD delivering up to 2.0x better Requests per Watt vs. the Intel CPUs!</p><p>By this time, we were already leaning heavily toward a single socket setup with AMD EPYC 7642 as our CPU for Gen X. We were excited to see exactly how well AMD EPYC servers would do in production, so we immediately shipped a number of the servers out to some of our data centers.</p>
    <div>
      <h3>Live Production</h3>
      <a href="#live-production">
        
      </a>
    </div>
    <p>Step one of course was to get all our test servers set up for a production environment. All of our machines in the fleet are loaded with the same processes and services which makes for a great apples-to-apples comparison.  Like data centers everywhere, we have multiple generations of servers deployed, and we deploy our servers in clusters such that each cluster is pretty homogeneous by server generation. In some environments this can lead to varying utilization curves between clusters.  This is not the case for us. Our engineers have optimized CPU utilization across all server generations so that no matter if the machine's CPU has 8 cores or 24 cores, CPU usage is generally the same.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2CiOx8dprb9NuYH2kUrZQ/ef686808c946d6cc55aa2983dc50c839/15.png" />
            
            </figure><p>As you can see above and to illustrate our ‘similar CPU utilization’ comment, there is no significant difference in CPU usage between Gen X AMD powered servers and Gen 9 Intel based servers. This means both test and baseline servers are equally loaded. Good. This is exactly what we want to see with our setup, to have a fair comparison. The 2 graphs below show the comparative number of requests processed at the CPU single core and all core (server) level.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/18XOFPOFmKWcIuheu6HWl8/e84fa7ff38c6c3f39115b60882a7c106/16.png" />
            
            </figure>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/rwWBZrTmfJvIs7Em9aCXT/19945cb240e37ca3ba61853b3e72bf5b/17.png" />
            
            </figure><p>We see that AMD does on average about 23% more requests. That's really good! We talked a lot about bringing more muscle in the <a href="/a-tour-inside-cloudflares-g9-servers/">Gen 9 blog</a>. We have the same number of cores, yet AMD does more work, and does it with less power. Just by looking at the specs for number of cores and TDP in the beginning, it's really nice to see that AMD also delivers significantly more performance with better power efficiency.</p><p>But as we mentioned earlier, TDP isn’t a standardized spec across manufacturers so let’s look at real power usage below. Measuring server power consumption along with requests per second (RPS) yields the graph below:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3DnPzngVCU8da71wGJUleo/b132d4256abe8c60809cf7b2c6d27ea4/18.png" />
            
            </figure><p>Observing our servers request rate over their power consumption, the AMD Gen X server performs 28% better. While we could have expected more out of AMD since its TDP is 25% lower, keep in mind that TDP is very ambiguous. In fact, we saw that AMD actual power draw ran nearly at spec TDP with it's much higher than base frequency; Intel was far from it. Another reason why TDP is becoming a less reliable estimate of power draw. Moreover, CPU is just one component contributing to the overall power of the system. Let’s remind that Intel CPUs are integrated in a multi-node system as described in the <a href="/a-tour-inside-cloudflares-g9-servers/">Gen 9 blog</a>, while AMD is in a regular 1U form-factor machine. That actually doesn’t favor AMD since multi-node systems are designed for high density capabilities at lower power per node, yet it still outperformed the Intel system on a power per node basis anyway.</p><p>Through the majority of comparisons from the datasheets, test simulations, and live production performance, the 1P AMD EPYC 7642 configuration performed significantly better than the 2P Intel Xeon 6162. We’ve seen in some environments that AMD can do up to 36% better in live production, and we believe we can achieve that consistently with some optimization on both our hardware and software.</p><p>So that's it. AMD wins.</p><p>The additional graphs below show the median and p99 NGINX processing mostly on-CPU time latencies between the two CPUs throughout 24 hours. On average, AMD processes about 25% faster. At p99, it does about 20-50% depending on the time of day.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/Fty1XuK9w4yupvRyHzLmu/0f1e8bc02e8f04d0c33752f6ff67fd98/19.png" />
            
            </figure>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3yWj3MsDnro619KjtJwVAW/0868d32c8aa3f5c594b8e660e608eb6c/20.png" />
            
            </figure>
    <div>
      <h3>Conclusion</h3>
      <a href="#conclusion">
        
      </a>
    </div>
    <p>Hardware and Performance engineers at Cloudflare do significant research and testing to figure out the best server configuration for our customers. Solving big problems like this is why <a href="https://www.fastcompany.com/best-workplaces-for-innovators/2019">we love working here</a>, and we're also helping to solve yours with our services like <a href="/introducing-cloudflare-workers/">serverless</a> edge compute and the array of security solutions such as <a href="/magic-transit-network-functions/">Magic Transit</a>, <a href="/argo-tunnel/">Argo Tunnel</a>, and <a href="/unmetered-mitigation/">DDoS protection</a>. All of our servers on the Cloudflare Network are designed to make our products work reliably, and we strive to make each new generation of our server design better than its predecessor. We believe the AMD EPYC 7642 is the answer for our Gen X's processor question.</p><p>With <a href="https://developers.cloudflare.com/workers/">Cloudflare Workers</a>, developers have enjoyed deploying their applications to our <a href="/tag/cloudflare-network/">Network</a>, which is ever expanding across the globe. We’ve been proud to empower our customers by letting them focus on writing their code while we are managing the security and reliability in the cloud. We are now even more excited to say that their work will be deployed on our Gen X servers powered by 2nd Gen AMD EPYC processors.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6yI4yio6UovXiaJi79a78l/d248e04fd2b5c98c68b7312af953c54f/21.jpg" />
            
            </figure><p>Expanding Rome to a data center near you</p><p>Thanks to AMD, using the EPYC 7642 allows us to increase our capacity and expand into more cities easier. Rome wasn’t built in one day, but it will be <a href="/scaling-the-cloudflare-global/">very close to many of you</a>.</p><p>In the last couple of years, we've been experimenting with many Intel and AMD x86 chips along with ARM CPUs. We look forward to having these CPU manufacturers partner with us for future generations so that together we can help build a better Internet.</p> ]]></content:encoded>
            <category><![CDATA[Hardware]]></category>
            <category><![CDATA[Cloudflare Network]]></category>
            <category><![CDATA[Data Center]]></category>
            <category><![CDATA[EPYC]]></category>
            <category><![CDATA[Partners]]></category>
            <category><![CDATA[Speed & Reliability]]></category>
            <guid isPermaLink="false">7dSLKQwG5XrggG5HDcZm1x</guid>
            <dc:creator>Rob Dinh</dc:creator>
        </item>
        <item>
            <title><![CDATA[Cloudflare’s Gen X: 
Servers for an Accelerated Future]]></title>
            <link>https://blog.cloudflare.com/cloudflares-gen-x-servers-for-an-accelerated-future/</link>
            <pubDate>Mon, 24 Feb 2020 13:00:00 GMT</pubDate>
            <description><![CDATA[ We designed and built Cloudflare’s network to be able to grow capacity quickly and inexpensively; to allow every server, in every city, to run every service; and to allow us to shift customers and traffic across our network efficiently. ]]></description>
            <content:encoded><![CDATA[ <p></p><blockquote><p><i>“Every server can run every service.”</i></p></blockquote><p>We designed and built Cloudflare’s network to be able to grow capacity quickly and inexpensively; to allow every server, in every city, to run every service; and to allow us to shift customers and traffic across our network efficiently. We deploy standard, commodity hardware, and our product developers and customers do not need to worry about the underlying servers. Our software automatically manages the deployment and execution of our developers’ code and our customers’ code across our network. Since we manage the execution and prioritization of code running across our network, we are both able to optimize the performance of our highest tier customers and effectively leverage idle capacity across our network.</p><p>An alternative approach might have been to run several fragmented networks with specialized servers designed to run specific features, such as the <a href="https://www.cloudflare.com/waf/">Firewall</a>, <a href="https://www.cloudflare.com/ddos/">DDoS protection</a> or <a href="https://workers.cloudflare.com/">Workers</a>. However, we believe that approach would have resulted in wasted idle resources and given us less flexibility to build new software or adopt the newest available hardware. And a single optimization target means we can provide security and performance at the same time.</p><p>We use Anycast to route a web request to the nearest Cloudflare data center (from among <a href="https://www.cloudflare.com/network/">200 cities</a>), improving performance and maximizing the surface area to fight attacks.</p><p>Once a datacenter is selected, we use Unimog, Cloudflare’s custom load balancing system, to dynamically balance requests across diverse generations of servers. We load balance at different layers: between cities, between physical deployments located across a city, between external Internet ports, between internal cables, between servers, and even between logical CPU threads within a server.</p><p>As demand grows, we can scale out by simply adding new servers, points of presence (PoPs), or cities to the global pool of available resources. If any server component has a hardware failure, it is gracefully de-prioritized or removed from the pool, to be batch repaired by our operations team. This architecture has enabled us to have no dedicated Cloudflare staff at any of the 200 cities, instead relying on help for infrequent physical tasks from the ISPs (or data centers) hosting our equipment.</p>
    <div>
      <h3>Gen X: Intel Not Inside</h3>
      <a href="#gen-x-intel-not-inside">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2cA2rKV0dU3II6avmDY7BS/fba1453ea9bc827e399f57971ce871af/AMD_EPYC-39.jpg" />
            
            </figure><p>We recently turned up our tenth generation of servers, “Gen X”, already deployed across major US cities, and in the process of being shipped worldwide. Compared with our prior server (<a href="/a-tour-inside-cloudflares-g9-servers/">Gen 9</a>), it processes as much as 36% more requests while costing substantially less. Additionally, it enables a ~50% decrease in L3 cache miss rate and up to 50% decrease in NGINX p99 latency, powered by a CPU rated at 25% lower TDP (thermal design power) per core.</p><p>Notably, for the first time, Intel is not inside. We are not using their hardware for any major server components such as the CPU, board, memory, storage, network interface card (or any type of accelerator). Given how critical Intel is to our industry, this would until recently have been unimaginable, and is in contrast with <a href="/a-tour-inside-cloudflares-g9-servers/">prior</a> <a href="/a-tour-inside-cloudflares-latest-generation-servers/">generations</a> which made extensive use of their hardware.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3uCBtfJ5jawcCdsdyipghO/0d99e66b8db30d4c872d2a540cf9072c/AMD2.png" />
            
            </figure><p><i>Intel-based Gen 9 server</i></p><p>This time, AMD is inside.</p><p>We were particularly impressed by the 2nd Gen AMD EPYC processors because they proved to be far more efficient for our customers’ workloads. Since the pendulum of technology leadership swings back and forth between providers, we wouldn’t be surprised if that changes over time. However, we were happy to adapt quickly to the components that made the most sense for us.</p>
    <div>
      <h3>Compute</h3>
      <a href="#compute">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3qvmFWlrsejJpb9NEG6ZqU/d830111b48ee0ed930132e88660063ba/pasted-image-0.png" />
            
            </figure><p>CPU efficiency is very important to our server design. Since we have a compute-heavy workload, our servers are typically limited by the CPU before other components. Cloudflare’s software stack scales quite well with additional cores. So, we care more about core-count and power-efficiency than dimensions such as clock speed.</p><p>We selected the AMD EPYC 7642 processor in a single-socket configuration for Gen X. This CPU has 48-cores (96 threads), a base clock speed of 2.4 GHz, and an L3 cache of 256 MB. While the rated power (225W) may seem high, it is lower than the combined TDP in our Gen 9 servers and we preferred the performance of this CPU over lower power variants. Despite AMD offering a higher core count option with 64-cores, the performance gains for our software stack and usage weren’t compelling enough.</p><p>We have deployed the AMD EPYC 7642 in half a dozen Cloudflare data centers; it is considerably more powerful than a dual-socket pair of <a href="/a-tour-inside-cloudflares-g9-servers/">high-core count Intel processors</a> (Skylake as well as Cascade Lake) we used in the last generation.</p><p>Readers of our blog might remember our excitement around ARM processors. We even ported the entirety of our software stack to run on ARM, just as it does with x86, and have been maintaining that ever since even though it calls for slightly more work for our software engineering teams. We did this leading up to the launch of <a href="/arm-takes-wing/">Qualcomm’s Centriq server CPU</a>, which eventually got shuttered. While none of the off-the-shelf ARM CPUs available this moment are interesting to us, we remain optimistic about high core count offerings launching in 2020 and beyond, and look forward to a day when our servers are a mix of x86 (Intel and AMD) and ARM.</p><p>We aim to replace servers when the efficiency gains enabled by new equipment outweigh their cost.</p><p>The performance we’ve seen from the AMD EPYC 7642 processor has encouraged us to accelerate replacement of multiple generations of Intel-based servers.</p><p>Compute is our largest investment in a server. Our heaviest workloads, from the Firewall to <a href="/cloud-computing-without-containers/">Workers</a> (our serverless offering), often require more compute than other server resources. Also, the average size in kilobytes of a web request across our network tends to be small, influenced in part by the relative popularity of APIs and mobile applications. Our approach to server design is very different than traditional <a href="https://www.cloudflare.com/learning/cdn/what-is-a-cdn/">content delivery networks</a> engineered to deliver large object video libraries, for whom servers focused on storage might make more sense, and re-architecting to offer serverless is prohibitively capital intensive.</p><p>Our Gen X server is intentionally designed with an “empty” PCIe slot for a potential add on card, if it can perform some functions more efficiently than the primary CPU. Would that be a GPU, FPGA, SmartNIC, custom ASIC, TPU or something else? We’re intrigued to explore the possibilities.</p><p>In accompanying blog posts over the next few days, our hardware engineers will describe how AMD 7642 performed against the benchmarks we care about. We are thankful for their hard work.</p>
    <div>
      <h2>Memory, Storage &amp; Network</h2>
      <a href="#memory-storage-network">
        
      </a>
    </div>
    <p>Since we are typically limited by CPU, Gen X represented an opportunity to grow components such as RAM and SSD more slowly than compute.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/26Sxt3ggFdoQ0GzKF3EGss/368a3e0d940daae20b6feeb5a3e4fba2/AMD_EPYC-13.jpg" />
            
            </figure><p>For memory, we continued to use 256GB of RAM, as in our prior generation, but rated higher at 2933MHz. For storage, we continue to have ~3TB, but moved to 3x1TB form factor using NVME flash (instead of SATA) with increased available IOPS and higher endurance, which enables <a href="https://www.usenix.org/conference/vault20/presentation/korchagin">full disk encryption using LUKS without penalty</a>. For the network card, we continue to use Mellanox 2x25G NIC.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5ss6eIWw5bu2PmPfE000Wi/131a3644d28be05b4d00a113bc9565ea/AMD_EPYC-5.jpg" />
            
            </figure><p>We moved from our multi-node chassis back to a simple 1U form factor, designed to be lighter and less error prone during operational work at the data center. We also added multiple new ODM partners to diversify how we manufacture our equipment and to take advantage of additional global warehousing.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7idOzt8cy7gwxh6oeOSpI5/302f275f840d028cbd2b0bb6a1a351cc/AMD_EPYC-7.jpg" />
            
            </figure>
    <div>
      <h3>Network Expansion</h3>
      <a href="#network-expansion">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7kEiqTtyNgUY66Rh34MpuG/42da64e77acad6084872058580ed2d89/AMD_EPYC-35.jpg" />
            
            </figure><p>Our newest generation of servers give us the flexibility to continue to build out our network even closer to every user on Earth. We’re proud of the hard work from across engineering teams on Gen X, and are grateful for the support of our partners. Be on the lookout for more blogs about these servers in the coming days.</p> ]]></content:encoded>
            <category><![CDATA[Hardware]]></category>
            <category><![CDATA[Cloudflare Network]]></category>
            <category><![CDATA[Data Center]]></category>
            <category><![CDATA[Partners]]></category>
            <category><![CDATA[Speed & Reliability]]></category>
            <category><![CDATA[EPYC]]></category>
            <category><![CDATA[AMD]]></category>
            <guid isPermaLink="false">5NWs1t95pGWDeOMVAkbQ4S</guid>
            <dc:creator>Nitin Rao</dc:creator>
            <dc:creator>John Graham-Cumming</dc:creator>
        </item>
        <item>
            <title><![CDATA[Cloudflare Expanded to 200 Cities in 2019]]></title>
            <link>https://blog.cloudflare.com/cloudflare-expanded-to-200-cities-in-2019/</link>
            <pubDate>Sat, 04 Jan 2020 17:00:00 GMT</pubDate>
            <description><![CDATA[ We have some exciting news to ring in the new decade: Cloudflare’s global network has expanded to 200 cities across 90+ countries. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>We have exciting news: Cloudflare closed out the decade by reaching our <b>200th</b> city* across <b>90+</b> countries. Each new location increases the security, performance, and reliability of the 20-million-plus Internet properties on our network. Over the last quarter, we turned up seven data centers spanning from Chattogram, Bangladesh all the way to the Hawaiian Islands:</p><ul><li><p><b>Chattogram</b> &amp; <b>Dhaka</b>, Bangladesh. These data centers are our first in Bangladesh, ensuring that its <a href="https://data.worldbank.org/indicator/SP.POP.TOTL?locations=BD">161 million residents</a> will have a better experience on our network.</p></li><li><p><b>Honolulu</b>, Hawaii, USA. Honolulu is one of the most remote cities in the world; with our Honolulu data center up and running, Hawaiian visitors can be served 2,400 miles closer than ever before! Hawaii is a hub for many submarine cables in the Pacific, meaning that some Pacific Islands will also see significant improvements.</p></li><li><p><b>Adelaide</b>, Australia. Our 7th Australasian data center can be found “down under” in the capital of South Australia. Despite being Australia’s fifth-largest city, Adelaide is often overlooked for Australian interconnection. We, for one, are happy to establish a presence in it and its unique <a href="https://en.wikipedia.org/wiki/UTC%2B09:30">UTC+9:30 time zone</a>!</p></li><li><p><b>Thimphu</b>, Bhutan. Bhutan is the seventh <a href="https://en.wikipedia.org/wiki/South_Asian_Association_for_Regional_Cooperation">SAARC</a> (South Asian Association for Regional Cooperation) country with a Cloudflare network presence. Thimphu is our first Bhutanese data center, continuing our mission of <a href="http://betterinternet.com">security and performance for all</a>.</p></li><li><p><b>St George’s</b>, Grenada. Our Grenadian data center is joining the Grenada Internet Exchange (GREX), the first non-profit Internet Exchange (IX) in the English-speaking Caribbean.</p></li></ul><p>We’ve come a long way since our launch in 2010, moving from colocating in key Internet hubs to fanning out across the globe and partnering with local ISPs. This has allowed us to offer security, performance, and reliability to Internet users in all corners of the world. In addition to the 35 cities we added in 2019, we expanded our existing data centers behind-the-scenes. We believe there are a lot of opportunities to harness in 2020 as we look to bring our network and its edge-computing power closer and closer to everyone on the Internet.</p><p>*<i>Includes cities where we have data centers with active Internet ports and those where we are configuring our servers to handle traffic for more customers (at the time of publishing).</i></p> ]]></content:encoded>
            <category><![CDATA[Cloudflare Network]]></category>
            <category><![CDATA[Data Center]]></category>
            <category><![CDATA[USA]]></category>
            <category><![CDATA[Middle East]]></category>
            <category><![CDATA[Australia]]></category>
            <category><![CDATA[APJC]]></category>
            <guid isPermaLink="false">4LgQNJr6xVp1T7QdEMDMaj</guid>
            <dc:creator>Jon Rolfe</dc:creator>
        </item>
        <item>
            <title><![CDATA[Good Morning, Jakarta!]]></title>
            <link>https://blog.cloudflare.com/selamat-pagi-jakarta-customers/</link>
            <pubDate>Fri, 11 Oct 2019 00:00:25 GMT</pubDate>
            <description><![CDATA[ Beneath the veneer of glass and concrete, this is a city of surprises and many faces. On 3rd October 2019, we brought together a group of leaders from across a number of industries to connect in Central Jakarta, Indonesia.  ]]></description>
            <content:encoded><![CDATA[ 
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4RVJIZItNiZvwtbysmwEfk/350995092dc9c746415709bf3994d511/Screen-Shot-2019-10-10-at-7.24.19-PM.png" />
            
            </figure><p>Beneath the veneer of glass and concrete, this is a city of surprises and many faces. On 3rd October 2019, we brought together a group of leaders from across a number of industries to connect in Central Jakarta, Indonesia.</p><p>The habit of sharing stories at the lunch table, exchanging ideas, and listening to ideas from the different viewpoints of people from all tiers, paying first-hand attention to all input from customers, and listening to the dreams of some of life’s warriors may sound simple but it is a source of inspiration and encouragement in helping the cyberspace community in this region.</p><p>And our new data center in Jakarta extends our Asia Pacific network to 64 cities, and our global network to 194 cities.</p>
    <div>
      <h2>Selamat Pagi</h2>
      <a href="#selamat-pagi">
        
      </a>
    </div>
    <p>Right on time, Kate Fleming extended a warm welcome to our all our Indonesia guests. "We were especially appreciative of the investment of your time that you made coming to join us."</p><p>Kate, is the Head of Customer Success for APAC. Australian-born, Kate spent the past 5 years living in Malaysia and Singapore. She leads a team of Customer Success Managers in Singapore. The Customer Success team is dispersed across multiple offices and time zones. We are the advocates for Cloudflare Enterprise customers. We help with your on-boarding journey and various post sales activities from project and resource management planning to training, configuration recommendations, sharing best practices, point of escalation and more.</p><p>"Today, the Indonesian Cloudflare team would like to share with you some insights and best practices around how Cloudflare is not only a critical part of any organization’s cyber security planning, but is working towards building a better internet in the process.” - Kate</p><hr />
    <div>
      <h2>Learning Modern Trends of Cyber Attacks</h2>
      <a href="#learning-modern-trends-of-cyber-attacks">
        
      </a>
    </div>
    <p>Ayush Verma, who is our Solutions Engineer for ASEAN and India, was there to unveil the latest cyber security trends. He shared insights on how to stay ahead of the game in the fast-charging online environment.</p><p>Get answers to questions like:How can I secure my site without sacrificing performance?What are the latest trends in malicious attacks — and how should I prepare?</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/LoAMXlQEGCPAep6ajnjmF/c8d005ab2efb19ac17ef224da52fdad4/Screen-Shot-2019-10-10-at-7.26.51-PM.png" />
            
            </figure>
    <div>
      <h2>Superheroes Behind The Scenes</h2>
      <a href="#superheroes-behind-the-scenes">
        
      </a>
    </div>
    
    <div>
      <h4>We were very honored to have two industry leaders speak to us.</h4>
      <a href="#we-were-very-honored-to-have-two-industry-leaders-speak-to-us">
        
      </a>
    </div>
    <blockquote><p><b>Jullian Gafar,</b> the CTO from PT Viva Media Baru.PT Viva Media Baru is an online media company based out of Jakarta, Indonesia.</p><p><b>Firman Gautama</b>, the VP of Infrastructure &amp; Security from PT. Global Tiket Network.PT. Global Tiket Network offer hotel, flight, car rental, train, world class event/concert and attraction tickets.</p></blockquote><p>It was a golden opportunity to hear from the leaders themselves about what’s keeping them busy lately, their own approaches to cyber security, best practices, and easy-to-implement and cost-efficient strategies.  </p><p><b>Fireside Chat Highlights</b>:  Shoutout from Pak Firman, who was very pleased with the support he received from Kartika. He said "most sales people are hard to reach after completing a sale. Kartika always goes the extra mile, she stays engaged with me. The Customer Experience is just exceptional.”</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3JQUuUzJRnkXHXu65ygeKV/068248c48f4f30f9df2d6d56b6d47d61/Screen-Shot-2019-10-10-at-7.29.50-PM-3.png" />
            
            </figure>
    <div>
      <h2>Our Mission Continues</h2>
      <a href="#our-mission-continues">
        
      </a>
    </div>
    <p>Thank you for giving us your time to connect. It brings us back to our roots and core mission of helping to build a better internet. Based on this principle “The Result Never Betrays the Effort’ we believe that what we are striving for today, by creating various innovations in our services and strategies to improve your business, will in time produce the best results. For this reason, we offer our endless thanks for your support and loyalty in continuing to push forward with us. Always at your service!</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5vUa0AdpaBvKtdSVSQWQXW/930f36f33a3a49de31d7bc6d95fcfbde/Screen-Shot-2019-10-10-at-7.31.40-PM.png" />
            
            </figure><blockquote><p>Cloudflare Event Crew in Indonesia #CloudflareJKTChris Chua (Organiser) | Kate Fleming | Bentara Frans | Ayush Verma | Welly Tandiono | Kartika Mulyo  | Riyan Baharudin</p></blockquote> ]]></content:encoded>
            <category><![CDATA[Cloudflare Network]]></category>
            <category><![CDATA[Data Center]]></category>
            <category><![CDATA[APJC]]></category>
            <category><![CDATA[Cloudflare Meetups]]></category>
            <guid isPermaLink="false">1j41X4bKQ3zPGNrmB62nmU</guid>
            <dc:creator>Chris Chua</dc:creator>
        </item>
        <item>
            <title><![CDATA[Cloudflare Global Network Expands to 193 Cities]]></title>
            <link>https://blog.cloudflare.com/scaling-the-cloudflare-global/</link>
            <pubDate>Thu, 15 Aug 2019 01:41:18 GMT</pubDate>
            <description><![CDATA[ Cloudflare’s global network currently spans 193 cities across 90+ countries. With over 20 million Internet properties on our network, we increase the security, performance, and reliability of large portions of the Internet every time we add a location. ]]></description>
            <content:encoded><![CDATA[ <p>Cloudflare’s global network currently spans 193 cities across 90+ countries. With over 20 million Internet properties on our network, we increase the security, performance, and reliability of large portions of the Internet every time we add a location.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6othJ1CZ1L7QpVqAHMqu2/e3eaeb54fc1eb8f9a02e3dc8e6447770/image1-3.png" />
            
            </figure>
    <div>
      <h3>Expanding Network to New Cities</h3>
      <a href="#expanding-network-to-new-cities">
        
      </a>
    </div>
    <p>So far in 2019, we’ve added a score of new locations: Amman, Antananarivo*, Arica*, Asunción, Baku, Bengaluru, Buffalo, Casablanca, Córdoba*, Cork, Curitiba, Dakar*, Dar es Salaam, Fortaleza, Geneva, Göteborg, Guatemala City, Hyderabad, Kigali, Kolkata, Male*, Maputo, Nagpur, Neuquén*, Nicosia, Nouméa, Ottawa, Port-au-Prince, Porto Alegre, Querétaro, Ramallah, and Thessaloniki.</p>
    <div>
      <h4>Our Humble Beginnings</h4>
      <a href="#our-humble-beginnings">
        
      </a>
    </div>
    <p>When Cloudflare launched in 2010, we focused on putting servers at the Internet’s crossroads: large data centers with key connections, like the Amsterdam Internet Exchange and Equinix Ashburn. This not only provided the most value to the most people at once but was also easier to manage by keeping our servers in the same buildings as all the local ISPs, server providers, and other people they needed to talk to streamline our services.</p><p>This is a great approach for bootstrapping a global network, but we’re obsessed with <a href="/tag/speed-week/">speed in general</a>. There are over five hundred cities in the world with over one million inhabitants, but only a handful of them have the kinds of major Internet exchanges that we targeted. Our goal as a company is to help make a better Internet for all, not just those lucky enough to live in areas with affordable and easily-accessible interconnection points. However, we ran up against two broad, nasty problems: a) running out of major Internet exchanges and b) latency still wasn’t as low as we wanted. Clearly, we had to start scaling in new ways.</p><p>One of our first big steps was entering into partnerships around the world with local ISPs, who have many of the same problems we do: ISPs want to save money and provide fast Internet to their customers, but they often don’t have a major Internet exchange nearby to connect to. Adding Cloudflare equipment to their infrastructure effectively brought more of the Internet closer to them. We help them speed up millions of Internet properties while reducing costs by serving traffic locally. Additionally, since all of our servers are designed to support all our products, a relatively small physical footprint can also provide <a href="https://www.cloudflare.com/ddos/">security</a>, <a href="https://www.cloudflare.com/cdn/">performance</a>, <a href="https://www.cloudflare.com/load-balancing/">reliability</a>, and more.</p>
    <div>
      <h2>Upgrading Capacity in Existing Cities</h2>
      <a href="#upgrading-capacity-in-existing-cities">
        
      </a>
    </div>
    <p>Though it may be obvious and easy to overlook, continuing to build out existing locations is also a key facet of building a global network. This year, we have significantly increased the computational capacity at the edge of our network. Additionally, by making it <a href="https://www.cloudflare.com/partners/peering-portal/">easier</a> to <a href="https://bgp.he.net/report/exchanges#_participants">interconnect</a> with Cloudflare, we have increased the number of unique networks directly connected with us to over 8,000. This makes for a faster, more reliable Internet experience for the &gt;1 billion IPs that we see daily.</p><p>To make these capacity upgrades possible for our customers, efficient infrastructure deployment has been one of our keys to success. We want our infrastructure deployment to be targeted and flexible.</p>
    <div>
      <h3>Targeted Deployment</h3>
      <a href="#targeted-deployment">
        
      </a>
    </div>
    <p>The next Cloudflare customer through our door could be a small restaurant owner on a Pro plan with thousands of monthly pageviews or a <a href="https://www.cloudflare.com/case-studies/discord/">fast-growing global tech company like Discord.</a> As a result, we need to always stay one step ahead and synthesize a lot of data all at once for our customers.</p><p>To accommodate this expansion, our Capacity Planning team is learning new ways to optimize our servers. One key strategy is targeting exactly where to send our servers. However, staying on top of everything isn’t easy - we are a global <a href="https://www.cloudflare.com/learning/cdn/glossary/anycast-network/">anycast</a> network, which introduces unpredictability as to where incoming traffic goes. To make things even more difficult, each city can contain as many as five distinct deployments. Planning isn’t just a question of what city to send servers to, it’s one of which address.</p><p>To make sense of it all, we tackle the problem with simulations. Some, but not all, of the variables we model include historical traffic growth rates, foreseeable anomalous spikes (e.g., Cyber Day in Chile), and consumption states from our live deal pipeline, as well as product costs, user growth, end-customer adoption. We also add in site reliability, potential for expansion, and expected regional expansion and partnerships, as well as strategic priorities and, of course, feedback from our fantastic Systems Reliability Engineers.</p>
    <div>
      <h3>Flexible Supply Chain</h3>
      <a href="#flexible-supply-chain">
        
      </a>
    </div>
    <p>Knowing where to send a server is only the first challenge of many when it comes to a global network. Just like our user base, our supply chain must span the entire world while also staying flexible enough to quickly react to time constraints, pricing changes including taxes and tariffs, import/export restrictions and required certifications - not to mention local partnerships many more dynamic location-specific variables. Even more reason we have to stay quick on our feet, there will always be unforeseen roadblocks and detours even in the most well-prepared plans. For example, a planned expansion in our Prague location might warrant an expanded presence in Vienna for failover.</p><p>Once servers arrive at our data centers, our Data Center Deployment and Technical Operations teams work with our vendors and on-site data center personnel (our “Remote Hands” and “Smart Hands”) to install the physical server, manage the cabling, and handle other early-stage provisioning processes.</p><p>Our <a href="/cloudflare-architecture-and-how-bpf-eats-the-world/">architecture</a>, which is designed so that every server can support every service, makes it easier to withstand hardware failures and efficiently load balance workloads between equipment and between locations.</p>
    <div>
      <h2><b>Join Our Team</b></h2>
      <a href="#join-our-team">
        
      </a>
    </div>
    <p>If working at a rapidly expanding, globally diverse company interests you, we’re <a href="https://cloudflare.com/careers">hiring</a> for scores of positions, including in the Infrastructure group. If you want to help increase hardware efficiency, deploy and maintain servers, work on our supply chain, or strengthen ISP partnerships, get in touch.</p><p>*<i>Represents cities where we have data centers with active Internet ports and where we are configuring our servers to handle traffic for more customers (at the time of publishing)</i></p> ]]></content:encoded>
            <category><![CDATA[Cloudflare Network]]></category>
            <category><![CDATA[Data Center]]></category>
            <category><![CDATA[Africa]]></category>
            <category><![CDATA[South America]]></category>
            <category><![CDATA[India]]></category>
            <guid isPermaLink="false">8ETCTVINpOptfId22EZnC</guid>
            <dc:creator>Nitin Rao</dc:creator>
            <dc:creator>Jon Rolfe</dc:creator>
            <dc:creator>Eva Hoyer</dc:creator>
        </item>
        <item>
            <title><![CDATA[Solving Problems with Serverless – The Cloudflare LED Data Center Board, Part I]]></title>
            <link>https://blog.cloudflare.com/solving-problems-with-serverless-the-cloudflare-led-data-center-board-part-i/</link>
            <pubDate>Thu, 14 Feb 2019 20:00:00 GMT</pubDate>
            <description><![CDATA[ You know you have a cool job when your first project lets you bring your hobby into the office.  ]]></description>
            <content:encoded><![CDATA[ <p>You know you have a cool job when your first project lets you bring your hobby into the office.</p><p>That’s what happened to me just a few short weeks ago when I joined Cloudflare. The task: to create a light-up version of our Data Center map – we’re talking more than a hundred LEDs tied to the deployment state of each and every Cloudflare data center. This map will be a part of our booths, so it has to be able to travel; meaning we have to consider physical shipping <i>and</i> the ability to update the data when the map is away from the office. And the fun part – we are debuting it at SF Developer Week in late February (I even get to give a talk about it!) That gave me one week of software time in our San Francisco office, and a little over two and a half in the Austin office with the physical materials.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/eS2D5nN1ryxnbNscLYa3G/ab5a2b025cc3aa2e84545e2bccf6756b/Screen-Shot-2019-02-14-at-9.33.11-AM.png" />
            
            </figure><p>What the final LEDs will look like on a map of the world.</p><p>So what does this have to do with Serverless? Well, let’s think about where and how this map will need to operate: This will be going to expo halls and conferences, and we want it to update to show our most current data center statuses for at least that event, if not updating once a day. But we don’t need to stay connected to the information store constantly-- nor should we expect to, over conference or expo WiFi.</p>
    <div>
      <h2>Data Stored about Data Centers</h2>
      <a href="#data-stored-about-data-centers">
        
      </a>
    </div>
    <p>The data stored about each data center has two distinct categories; data relevant to the data center itself, and data about how that data center should be rendered on the map. These are relatively simple data structures, however: for a data center, we want to store what city the data center is in, the latitude and longitude, and the status. We arbitrarily assign an ID integer to each data center, which we'll use to match this data with the data in the other store. We’re not going to pick and choose which data centers we want; just pull them all down and let the microcontroller figure out how to display them.</p><p>Speaking of, this is where the data store relevant to the display comes in. LEDs are on strands numbered 0-7, and are represented by an LED numbered 0-63. We need to store the ID of the data center we created for the first store, the strand number, and the LED number in the strand.</p><p>Both of these sets of data can be stored in a key-value store, with the ID number as the key and a JSON object representing either the data center or its representative LED on the map as the value. Because of this, coupled with the fact that we do not need to search or index this data, we decided to use <a href="https://developers.cloudflare.com/workers/kv/">Workers KV</a> data stores to keep this information.</p>
    <div>
      <h2>The Data Center and Data Center Map API</h2>
      <a href="#the-data-center-and-data-center-map-api">
        
      </a>
    </div>
    <p>We needed two APIs around the data centers, and we needed them fast– both in the more immediate sense of having only a few weeks to complete the project, and in the sense that we needed the data to download relatively quickly over non-ideal internet situations. We also know this map will be traveling all over the world– we'd need the API to work and have at least a decent latency no matter where the map was geographically.</p><p>This is where the hundreds of LEDs comes in handy– each one represents a data center that we could deploy <a href="https://developers.cloudflare.com/workers/about/">serverless Workers</a> to. We can deploy the API to the data center before we leave from the comfort of the office, and it'd be ready for us when we hit the conference floor. Workers also, unsurprisingly, work really well with Workers KV data stores; allowing us to rapidly develop APIs around our data.</p>
    <div>
      <h2>Our Software Architecture Diagram</h2>
      <a href="#our-software-architecture-diagram">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3yB2l13rg61b9JTNZu9aZj/81ef8c85c292ed9d76899db9619c4f71/LED-PoP-Board-Architecture-Diagram.png" />
            
            </figure><p>In the end, we ended up with this architecture diagram; 2 Workers KV data stores, and 2 serverless Workers; all of which can be deployed across the world in order to make sure the physical map has the updated data every time we head to a new show.</p><hr /><p>In the next post in this series, we'll take a look at the physical architecture of the sign:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/42wDBaBFqptcC9iCt99h6I/66d9376444ab592eef2a570ac16568d6/Image_20190212_102827.jpeg.jpeg" />
            
            </figure><p>We'll also take a look at the system we built that uses the architecture laid out in this post that consumes this data and turns it into an LED map – so keep an eye out for it next month!</p><hr /><p>Interested in deploying a Cloudflare Worker without setting up a domain on Cloudflare? We’re making it easier to get started building serverless applications with custom subdomains on <a href="https://workers.dev">workers.dev</a>. <i>If you’re already a Cloudflare customer, you can add Workers to your existing website</i> <a href="https://dash.cloudflare.com/workers"><i>here</i></a>.</p><p><a href="https://workers.dev">Reserve a workers.dev subdomain</a></p><hr /> ]]></content:encoded>
            <category><![CDATA[Serverless]]></category>
            <category><![CDATA[Cloudflare Workers]]></category>
            <category><![CDATA[Fun]]></category>
            <category><![CDATA[Cloudflare Network]]></category>
            <category><![CDATA[Data Center]]></category>
            <category><![CDATA[Cloudflare Workers KV]]></category>
            <category><![CDATA[Developer Platform]]></category>
            <category><![CDATA[Developers]]></category>
            <guid isPermaLink="false">219IbwcBMcEwHEr3ghkFSk</guid>
            <dc:creator>Kassian Wren</dc:creator>
        </item>
        <item>
            <title><![CDATA[Argo Tunnel + DC/OS]]></title>
            <link>https://blog.cloudflare.com/argo-tunnel-and-dc-os/</link>
            <pubDate>Mon, 21 Jan 2019 13:00:00 GMT</pubDate>
            <description><![CDATA[ Cloudflare is proud to partner with Mesosphere on their new Argo Tunnel offering available within their DC/OS (Data Center / Operating System) catalogue! Before diving deeper into the offering itself, we’ll first do a quick overview of the Mesophere platform, DC/OS. ]]></description>
            <content:encoded><![CDATA[ <p>Cloudflare is proud to partner with Mesosphere on their new Argo Tunnel offering available within their DC/OS (Data Center / Operating System) catalogue! Before diving deeper into the offering itself, we’ll first do a quick overview of the Mesophere platform, DC/OS.</p>
    <div>
      <h2>What is Mesosphere and DC/OS?</h2>
      <a href="#what-is-mesosphere-and-dc-os">
        
      </a>
    </div>
    <p>Mesosphere DC/OS provides application developers and operators an easy way to consistently deploy and run applications and data services on cloud providers and on-premise infrastructure. The unified developer and operator experience across clouds makes it easy to realize use cases like global reach, resource expansion, and business continuity.</p><p>In this multi cloud world Cloudflare and Mesosphere DC/OS are great complements. Mesosphere DC/OS provides the same common services experience for developers and operators, and Cloudflare provides the same common service access experience across cloud providers. DC/OS helps tremendously for avoiding vendor lock-in to a single provider, while Cloudflare can load balance traffic intelligently (in addition to many other services) at the edge between providers. This new offering will allow you to load balance through the use of Argo Tunnel.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2G5ZOTv2xHKdlDqCus7HnU/bd4cf9e0d12ac9fbb93e6b3a9476b8c0/multicloud-neautral_2x.png" />
            
            </figure>
    <div>
      <h3>Quick Tunnel Refresh</h3>
      <a href="#quick-tunnel-refresh">
        
      </a>
    </div>
    <p>Cloudflare Argo Tunnel is a private connection between your services and Cloudflare. Tunnel makes it such that only traffic that routes through the Cloudflare network can reach your service.</p><p>Cloudflare’s lightweight Argo Tunnel daemon creates an encrypted Tunnel between your origin web server and Cloudflare’s nearest data center — all without opening any public inbound ports. In other words, it’s a private link. Only Cloudflare can see the service and communicate with it, and for the rest of the internet, the service is reachable only through the hostname configured on Cloudflare. Check this out if you’d like to learn more.</p><p>By using Argo Tunnel, DC/OS is able to load balance your traffic to any of your hosts, wherever they are running on Earth, in any cloud provider! Need more instances in Paris? Just launch them! Are instances more affordable in a specific provider? Just launch them there, and thanks to Argo Tunnel and DC/OS your traffic will be directed to exactly where it belongs.</p>
    <div>
      <h3>Requirements</h3>
      <a href="#requirements">
        
      </a>
    </div>
    <p>In order to use this application in DC/OS you must have a zone on Cloudflare with the <a href="/Argo/">Argo service enabled</a>. Argo can be enabled for any plan type and is billed on usage. Because this application requires the use of a DC/OS ‘secrets’ the Enterprise version of DC/OS is required. To get started on Cloudflare please see <a href="https://www.cloudflare.com/plans/">here</a> and sign up for an account. To do the same with DC/OS, please see <a href="https://docs.mesosphere.com/1.12/installing/evaluation/">here</a>.</p>
    <div>
      <h3>Cloudflare Argo Tunnel Support for DC/OS</h3>
      <a href="#cloudflare-argo-tunnel-support-for-dc-os">
        
      </a>
    </div>
    <p>Argo Tunnel is the fast way to make services that run on DC/OS private agents (that are only bound to the DC/OS internal network) accessible over the public internet.</p><p>When you launch the Tunnel for your service, it creates persistent outbound connections to the 2 closest Cloudflare PoPs over which the entire Cloudflare network will route through to reach the service associated with the Tunnel. There is no need to configure DNS, update a NAT configuration, or modify firewall rules (connections are outbound). The Argo Tunnel exposed service gets all the benefits offered by the Cloudflare network (e.g. DDoS protection, CDN and performance, TLS, etc.).</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/59NfzsE9nLW3aaKhzrSR1I/f0eb0aaa4d0e97feb5dfa942e9919446/Argo-Tunnel-DC-OS.png" />
            
            </figure><p>The Cloudflare Argo Tunnel Service is available from Mesosphere DC/OS catalog.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1ILYxEsM8NriMNpWhNZrf7/fd0f075da7013e08e4d6a0c01e537636/Argo-2.png" />
            
            </figure><p>Configuration of the Argo Tunnel requires you to specify three things.</p><ul><li><p>Cloudflare Hostname - The DNS name of your service on the Cloudflare network. This is the address where you wish your service to be available from on the Internet. (Note: adding a zone to Cloudflare is extremely simple, you can get started here (link: <a href="https://www.cloudflare.com/plans/">https://www.cloudflare.com/plans/</a>)</p></li><li><p>Local Service Url - The local URL of the service that you want to make available, on the machines running Argo Tunnel.</p></li><li><p>Load Balancer Pool - The load balancer pool you want the service to be part of. Use any value you like, keeping the value consistent for tunnels you wish to load balance traffic onto as a unit. Inside Cloudflare you can manage how your traffic is balanced between and inside your pools.</p></li></ul>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5VsuRFMMuVxqBNba5cUjR0/0f06d0d22282b82610390f3c951bd3e6/LB-Configuration.png" />
            
            </figure><p>Assuming you do that setup for a service in a West Coast DC/OS cluster and an East Coast DC/OS cluster, with a respective us-west and us-east LB pool, then you end up with a Cloudflare load balancer globally balancing traffic between these clusters. The load balancer can be configured to do geosteering, which you can learn more about <a href="https://support.cloudflare.com/hc/en-us/articles/115000081911-Tutorial-How-to-Set-Up-Load-Balancing-Intelligent-Failover-on-Cloudflare">here</a>.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5XLHj1d6PnXMgyoRrj7ICc/84715d0fc25f14045c0a36454d7d1f12/LB-Settings.png" />
            
            </figure><p>For more details see the DC/OS Argo Tunnel <a href="https://github.com/dcos/examples/tree/master/cloudflare-argotunnel">documentation</a>. We hope this partnership is a meaningful step towards a simple multi-cloud solution for DC/OS customers.</p><p>To sign up for Cloudflare click <a href="https://www.cloudflare.com/plans/">here</a> and to sign up for DC/OS click <a href="https://docs.mesosphere.com/1.12/installing/evaluation/">here</a>. This partnership between Cloudflare and Mesosphere we hope will help you drive private secure and performant multi cloud deployments</p> ]]></content:encoded>
            <category><![CDATA[Data Center]]></category>
            <category><![CDATA[Argo Smart Routing]]></category>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Cloudflare Tunnel]]></category>
            <category><![CDATA[Connectivity Cloud]]></category>
            <guid isPermaLink="false">61gNuny6p1knOUnyxbpVzZ</guid>
            <dc:creator>Tom Brightbill</dc:creator>
        </item>
        <item>
            <title><![CDATA[Ten new data centers: Cloudflare expands global network to 165 cities]]></title>
            <link>https://blog.cloudflare.com/ten-new-data-centers/</link>
            <pubDate>Thu, 20 Dec 2018 16:13:00 GMT</pubDate>
            <description><![CDATA[ Cloudflare is excited to announce the addition of ten new data centers across the United States, Bahrain, Russia, Vietnam, Pakistan and France (Reunion).   ]]></description>
            <content:encoded><![CDATA[ <p></p><p>Cloudflare is excited to announce the addition of ten new data centers across the United States, Bahrain, Russia, Vietnam, Pakistan and France (Réunion). We're delighted to help improve the performance and security of over 12 million domains across these diverse countries that collectively represent about half a billion Internet users.</p><p>Our global network now spans 165 cities, with <a href="/tag/march-of-cloudflare/">46 new cities</a> added just this year, and several dozen additional locations being actively worked on.</p>
    <div>
      <h3>United States of America</h3>
      <a href="#united-states-of-america">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5wnKguGqzNUNeAbmaoZ1Kj/355c42cb03326a8f50669808b74e8aab/Charlotte---Columbus.png" />
            
            </figure><p>Our expansion begins in the United States, where Cloudflare's 36th and 37th data centers in the nation serve <b>Charlotte</b> (North Carolina) and <b>Columbus</b> (Ohio) respectively. They are promising markets for interconnection, and join our existing deployments in Ashburn, Atlanta, Boston, Chicago, Dallas, Denver, Detroit, Houston, Indianapolis, Jacksonville, Kansas City, Las Vegas, Los Angeles, McAllen, Memphis, Miami, Minneapolis, Montgomery, Nashville, Newark, Norfolk, Omaha, Philadelphia, Portland, Richmond, Sacramento, Salt Lake City, San Diego, San Jose, Seattle, St. Louis, Tallahassee, and Tampa.</p>
    <div>
      <h3>Bahrain</h3>
      <a href="#bahrain">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5NeYXoKoCPOCmWZPk5IgrS/c30ab4520479b4ccc8872ae4cbe1e36c/Manama.png" />
            
            </figure><p>Cloudflare's <b>Manama</b> (Bahrain) data center, our 158th globally, further expands our <a href="https://www.cloudflare.com/network/">Middle East</a> coverage. A growing hub for cloud computing, including public sector adoption (with the Kingdom's "Cloud First" policy), Bahrain is attracting <a href="https://startupbahrain.com/about/">talent</a> and investment in innovative companies.</p>
    <div>
      <h3>Russia</h3>
      <a href="#russia">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3HAn8shGKNAQdXajgDg0Xv/8797f4072083bf8bf89b502c4341f4fa/St.-Petersburg.png" />
            
            </figure><p>Cloudflare's new <b>St. Petersburg</b> deployment serves as a point of redundancy to our existing <a href="/moscow/">Moscow</a> facility, while also expanding our surface area to withstand DDoS attacks and reducing latency for local Internet users. (Hint: If you live in Novosibirsk or other parts of Russia, stay tuned for upcoming Cloudflare deployments near you).</p>
    <div>
      <h3>Vietnam</h3>
      <a href="#vietnam">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/18UylfgT5boq2PjOb0r1dF/362b4625eb827c098344e49c4e5a2963/Hanoi-Ho---Chi-Minh-City.png" />
            
            </figure><p><b>Hànội and Hồ Chí Minh City,</b> the two most populated cities in Vietnam with an estimated population of 8 million and 9 million respectively, now host Cloudflare's 160th and 161st data center.</p><p>On November 19, 1997, the Internet officially became available in Vietnam. Since then, several telecommunication companies - including VNPT, FPT, Viettel, CMC, VDC, and NetNam - have played a critical role in integrating the use of Internet into the government systems, business environment, school facilities, and many other organizations. With our new data centers in place, we are delighted to help provide a faster and safer Internet experience.  </p>
    <div>
      <h3>Pakistan</h3>
      <a href="#pakistan">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/dGRKOOCwYSyCI6xr6jjea/fd94bf68fb3b06fd91c5bdd38c37a212/Islamabad---Karachi---Lahore.png" />
            
            </figure><p>The world's sixth most populous country, Pakistan is a land of delicious food, breathtaking natural beauty, poetry and, of course cricket. Its natural beauty is exemplified by being the home of 5 out of 14 mountains which are at least 8,000m high, including K2, the second highest peak in the world. Pakistan's rich history includes the 5,000 year old lost civilization of <a href="https://www.youtube.com/watch?v=QUng-iHhSzU">Mohenjo-daro</a>, with incredible design from complex architecture on a grid-layout to advanced water and sewage systems.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/15pB2d3jaIKdkAyaXU1LpT/6762cfb8ffbdc00bd41bf435e8f88632/image-28.png" />
            
            </figure><p><a href="https://en.wikipedia.org/wiki/File:Nanga_Parbat_The_Killer_Mountain.jpg">Nanga Parbat</a> - Creative Commons Attribution-Share Alike 3.0 Unported</p><p>Today, Cloudflare is unveiling three new data centers housed in Pakistan, one in each of the most populous cities - <b>Karachi</b> and <b>Lahore</b> - alongside an additional data center in the capital city, <b>Islamabad</b>. We are already seeing latency per request decrease by over 3x and as much as 150ms, and expect this to further improve as we tune routing for all our customers.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5NCC5ia9vYhfgwsZJAU02S/6447ee8bfdb1dae08db24da1f5bb2cf4/Pakistan_Latency.png" />
            
            </figure><p>Latency from PTCL to Cloudflare customers reduces by over 3x across Pakistan. Courtesy: Cedexis</p>
    <div>
      <h3>Réunion (France)</h3>
      <a href="#reunion-france">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/KZfCBUf3ysFggupCSVzNx/f7189508c4cda08337fee267aef17541/-Sainte-Marie-Re-union.png" />
            
            </figure><p>8,000 miles away, the final stop in today's expansion is <b>Sainte-Marie</b> in the Réunion island, the overseas department France off the coast of Magadascar (which can also expect some Cloudflare servers very soon!)</p>
    <div>
      <h3>Expansion ahead!</h3>
      <a href="#expansion-ahead">
        
      </a>
    </div>
    <p>Even beyond these, we are working on at least six new cities in each of Africa, Asia, Europe, North America, and South America. Guess 20 upcoming locations to receive Cloudflare swag.</p> ]]></content:encoded>
            <category><![CDATA[Cloudflare Network]]></category>
            <category><![CDATA[Data Center]]></category>
            <category><![CDATA[Middle East]]></category>
            <category><![CDATA[North America]]></category>
            <category><![CDATA[USA]]></category>
            <category><![CDATA[Russia]]></category>
            <guid isPermaLink="false">2FknYP8WrpWDPr7i7DyeCX</guid>
            <dc:creator>Nitin Rao</dc:creator>
            <dc:creator>Junade Ali</dc:creator>
            <dc:creator>Tuyen Dinh</dc:creator>
        </item>
        <item>
            <title><![CDATA[Lagos, Nigeria - Cloudflare’s 155th city]]></title>
            <link>https://blog.cloudflare.com/lagos/</link>
            <pubDate>Tue, 30 Oct 2018 07:00:00 GMT</pubDate>
            <description><![CDATA[ At just shy of 200 million, Nigeria is the most populous country in Africa (Ethiopia is second and Egypt is third). That’s a lot of people to communicate with the world - and communicate they all do! ]]></description>
            <content:encoded><![CDATA[ <p>At just shy of 200 million, Nigeria is the most populous country in Africa (Ethiopia is second and Egypt is third). That’s a lot of people to communicate with the world - and communicate they all do!</p><p>According to a published report earlier this year, 84% of the Nigerian population own a mobile device (193 million population and 162 million mobile subscriptions). Again, that’s #1 for any country in Africa. But why so connected? Maybe because Nigeria (and Lagos specifically) is always on the move!</p><p>Lagos, as those that know the city say, never sleeps, it’s filled with color from the food to fashion to even the diverse people going about their business. The vibrancy of the city is like a hard slap to the face, no matter what you have been told, your first time here will still knock you out. In Lagos, anything is possible, from the sadness of poverty to the clearly visible upper class, the city sucks you in like a surfers dream wave. Visitor come into Lagos and leave feeling like they’ve been through a unique experience. The traffic is mind blowing and the same goes for the work pace.</p><p>Lagos, a city always on the move!</p>
    <div>
      <h3>Cloudflare lands in Lagos, Nigeria</h3>
      <a href="#cloudflare-lands-in-lagos-nigeria">
        
      </a>
    </div>
    <p>Cloudflare has now entered Lagos with a secure facility colocated and interconnected to one of the primary undersea cable operators along with a full connection to both the local Internet Exchange (<a href="https://ixp.net.ng/">IXPN</a>) and the newly announced <a href="https://www.wafix.net/">WAF-IX Lagos</a> exchange. With every data center we add, local users not only connect faster and more reliably to sites proxied by Cloudflare, but our global DDoS mitigation becomes stronger and more robust.  Instead of serving Nigeria from Europe (London, Lisbon, etc), content can be delivered locally from Lagos.</p><p>If you follow the African telecom industry; then you'll know that West Africa’s economy is dominated by Nigeria; but few outside the region know that Nigeria is dominated by the phrase mobile-first. A country thats mobile-first means that mobile has eclipsed all other connectivity methods. Other countries with this status include Indonesia, China, Kenya, Philippines, Myanmar and many others. Being mobile-first doesn’t mean smartphone dominance (Myanmar qualifies because of the availability of $20 phones); but it does mean dependence on mobile infrastructure. In fact SMS or texting is still the number one common communications method for most of these places. But smartphone penetration in Nigeria is growing fast and sitting at around 21 million according to the recent report referenced above.</p>
    <div>
      <h3>Nollywood</h3>
      <a href="#nollywood">
        
      </a>
    </div>
    <p>La la land has Hollywood, India has Bollywood and Nigeria has Nollywood. Yes, movie-making in Nigeria is a booming business with <a href="https://www.pbs.org/newshour/arts/inside-nollywood-the-booming-film-industry-that-makes-1500-movies-a-year">1,500 or more movies produced a year</a> and yet Nollywood is only twenty-five years old. That’s still less movies than Bollywood; but that doesn’t worry any of the Nigerian statisticians because they restate the revenue number based on a per-capita basis and that makes Nollywood bigger than Bollywood. But we digress.</p><p>The one thing that all that mobile penetration can provide is a distribution method for Nollywood’s movies and while this has nothing to do with Cloudflare’s commitment to Nigeria; it’s interesting to see that Netflix (the movie and tv streaming giant) has just <a href="https://southerntimesafrica.com/site/news/netflix-invests-us8b-in-nollywood">invested heavily</a> into Nollywood!</p><p>Even Hollywood has tapped Nigerians for major roles. David Oyelowo, the British actor of Nigerian descent, played Martin Luther King Jr. in the 2014 movie Selma. Danny Glover (of Lethal Weapon and The Color Purple fame) is of Nigerian descent and has acted in a Nigeria based movie called 93 Days. Then there’s Forest Whitaker (Last King of Scotland), John Boyega (Finn in Star Wars: The Force Awakens and The Last Jedi), and geek-favorite Richard Ayoade (Maurice Moss in the IT Crowd); all of Nigerian descent.</p>
    <div>
      <h3>Connectivity across and around Africa</h3>
      <a href="#connectivity-across-and-around-africa">
        
      </a>
    </div>
    <p>Lagos is well served by <a href="https://www.submarinecablemap.com/">undersea cables</a> that reach northwards to Europe and south towards South Africa. In fact every African west coast undersea cable lands in Lagos Nigeria.</p><ul><li><p>ACE (Africa Coast to Europe))</p></li><li><p>Glo-1 (and Glo-2)</p></li><li><p>MainOne</p></li><li><p>NCSCS (Nigeria Cameroon Submarine Cable System)</p></li><li><p>SAT-3/WASC</p></li><li><p>WACS (West African Cable System)</p></li></ul><p>While most of these cables are pumping bandwidth from North to South (i.e. Europe to Africa); some are now being used for inter-country connectivity at the IP backbone level. WACS has Nigeria, Angola, and South Africa connected. MainOne has Ghana and Nigeria connected, etc.</p>
    <div>
      <h3>Nigerian websites that instantly win</h3>
      <a href="#nigerian-websites-that-instantly-win">
        
      </a>
    </div>
    <p>When we look at the Alexa-top-50 list for Nigerian users we find that 18 of those sites are Cloudflare customers. That means an instant win for both consumers (those smartphone users) and the website or app operators. BTW: of the remaining 32 sites, 15 are owned by massive content players (search, online video, social media, operating systems or phones) and of the remaining 17 sites (Wikipedia being one of highest visited on that list); they are mainly non-CDN’ed websites that are hosted outside the country (Europe or USA).</p>
    <div>
      <h3>After Nigeria</h3>
      <a href="#after-nigeria">
        
      </a>
    </div>
    <p>Cloudflare in West Africa far from finished! We still have places like Senegal, Côte d’Ivoire, and Ghana to do (just to name a few). As always, stay tuned as Cloudflare grows the network! Oh, and by now any regular reader of our blogs will know that we are growing, both in network deployment and in fantastic staff. So pop over to the <a href="https://www.cloudflare.com/careers/departments/">jobs</a> page and see what interests you!</p> ]]></content:encoded>
            <category><![CDATA[Data Center]]></category>
            <category><![CDATA[Africa]]></category>
            <category><![CDATA[Network]]></category>
            <category><![CDATA[Cloudflare Network]]></category>
            <guid isPermaLink="false">716D7VPVzZALxfv5AHiY4J</guid>
            <dc:creator>Martin J Levy</dc:creator>
        </item>
        <item>
            <title><![CDATA[Ulaanbaatar, Mongolia]]></title>
            <link>https://blog.cloudflare.com/mongolia/</link>
            <pubDate>Tue, 02 Oct 2018 23:59:00 GMT</pubDate>
            <description><![CDATA[ Whenever you get into a conversation about exotic travel or ponder visiting the four corners of the globe, inevitably you end up discussing Ulaanbaatar in Mongolia.  ]]></description>
            <content:encoded><![CDATA[ <p>Whenever you get into a conversation about exotic travel or ponder visiting the four corners of the globe, inevitably you end up discussing Ulaanbaatar in Mongolia. Travelers want to experience the rich culture and vivid blue skies of Mongolia; a feature which gives the country its nickname of <a href="https://www.travelweekly.com/Asia-Travel/Mongolia-Pristine-beauty-in-the-Land-of-the-Eternal-Blue-Sky">“Land of the Eternal Blue Sky”</a>.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6RKZanh8oMvKp79ISqf2dm/ddc68cb7236d18605143b38389647e41/Ulaanbaatar-Mongolia.png" />
            
            </figure><p>Ulaanbaatar (or Ulan Bator; but shortened to UB by many) is the capital of Mongolia and located nearly a mile above sea level just outside the <a href="https://en.wikipedia.org/wiki/Gobi_Desert">Gobi Desert</a> - a desert that spans a good percentage of Central Asia’s Mongolia. (The rest of the Gobi Desert extends into China). The country is nestled squarely between Russia to the north and China to the south. It’s also home to some of the richest and ancient customs and festivals around. It’s those festivals that successfully draw in the tourists who want to experience something quite unique. Luckily, even with all the tourists, Mongolia has managed to keep its local customs; both in the cities and within its nomadic tribes.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1mbsB7HMMapvzAaAk7Aajk/6eab4afd146f4b23d0e689c4e625659e/Mongolia_1996_CIA_map.jpg" />
            
            </figure><p><i>via </i><a href="https://commons.wikimedia.org/wiki/File:Mongolia_1996_CIA_map.jpg"><i>Wikipedia</i></a></p><p>History also has drawn explorers and conquerors to and from the region; but more on that later.</p>
    <div>
      <h3>Cloudflare is also drawn into Mongolia</h3>
      <a href="#cloudflare-is-also-drawn-into-mongolia">
        
      </a>
    </div>
    <p>Any avid reader of our blogs will know that we frequently explain that the expansion of our network provides customers and end-users with both more capacity and less latency. That goal (covering 95% of the Internet population with 10 milliseconds or less of latency) means that Mongolia was seriously on our radar.</p><p>Now we have a data center in Ulaanbaatar, Mongolia, latency into that blue sky country is significantly reduced. Prior to this data center going live we were shipping bits into the country via Hong Kong, a whopping 1,800 miles away (or 50 milliseconds if we talk latency). That's far! We know this new data center is a win-win for both mobile and broadband customers within the country and for Cloudflare customers as a whole.</p>
    <div>
      <h3>Just how did we get Cloudflare into Mongolia?</h3>
      <a href="#just-how-did-we-get-cloudflare-into-mongolia">
        
      </a>
    </div>
    <p>Ulaanbaatar is city number 154 on Cloudflare’s network. Our expansion into cities like Ulaanbaatar doesn’t just happen instantly; it takes many teams within Cloudflare in order to successfully deploy in a place like this.</p><p>However, before deploying, we need to negotiate a place to deploy into. A new city requires a secure data center for us to build into. A bandwidth partner is also required. We need to get access to the local networks and to also acquire cache-fill bandwidth in order to operate our CDN. Once we have those items negotiated, we can focus on the next steps. Any site we build has to match our own stringent security standards (we are <a href="https://www.cloudflare.com/learning/privacy/what-is-pci-dss-compliance/">PCI/DSS compliant</a> – hence all our data centers need to also be PCI/DSS compliant). That’s a paperwork process, which surprisingly takes longer than most other stages (because we care about security).</p><p>Then logistics kicks in. A BOM (Bill of Materials) is created. Serial numbers recorded. Power plugs chosen. Fun fact: Cloudflare data centers are nearly all identical, except the power cables. While we live in a world where fiber optic cables and connectors are universal, independent of location (or speed in some cases), the power connections we receive for our data centers vary widely as we expand around the globe.</p><p>The actual shipping is possibly the more interesting part of the logistics process. Getting a few pallets of hardware strapped up and ready to move is only a small part of the process. Paperwork again becomes the all-powerful issue. Each country has its own customs and import process, each shipping company has its own twist on how to process things, and each shipment needs to be coordinated with a receiving party. Our logistics team pulls off this miracle for new sites, upgrades for existing sites, replacement parts for existing sites, all while sometimes calmly listening to mundane on-hold music from around the globe.</p><p>Then our hardware arrives! Seriously, this is a biggie and those around the office that follow these new city builds are always celebrating on those days. The logistics team has done their part; now it’s time for the deployment team to kick-in.</p><p>The deployment team’s main goal is to get hardware racked-and-stacked in a site where (in most cases) we are contracting out the remote-hands to do this work. Sometimes we send people to a site to build it; however, that’s not a scalable process and hence we use local remote-hands contractors to do this heavy-lifting and cabling. There are diagrams, there are instructions, there are color-coded cables (‘cause the right cable needs to go into the right socket). Depending on the size of the build; it can be just a days work or up-to a weeks worth of work. We vary our data center sizes based on the capacity needs for each city. Once racked-and-stacked there is one more job to get done within the Infrastructure team. They get the initial private network connection enabled and secured. That single connection provides us with the ability to continue to the next step. Actually setting up the network and servers at the new site.</p><p>Every new data center site is shipped with zero configuration loaded into network hardware and compute servers. They all ship raw with no Cloudflare knowledge embedded into them. This is by design. The network teams first goal is to configure the routers and switches, which is mainly a bootstrap process in order for the hardware to phone-home and securely request its full configuration setup. We have previously written about our extensive <a href="https://www.cloudflare.com/network-automation-at-scale-ebook/">network automation</a> methods. In the case of a new site, it’s not that different. Once the site can communicate back home, it’s clear to the software base that its configuration is out of date. Updates are pushed to the site and <a href="https://www.cloudflare.com/network-services/solutions/network-monitoring-tools/">network monitoring</a> is automatically enabled.</p><p>But let's not paint a perfect rosy picture. There can still be networking issues. Just one is worth pointing-out as it’s a recurring issue and one that plagues the industry globally. Fiber optic cables can sometimes be plugged in with their receive and transmit sides reversed. It’s a 50:50 chance of being right. Sometimes it just amazes us that we can’t get this fixed; but … a quick swap of the two connectors and we are back in business!</p>
    <div>
      <h3>Those explorers and conquerors</h3>
      <a href="#those-explorers-and-conquerors">
        
      </a>
    </div>
    <p>No conversation about Mongolia would be valid unless we discuss Genghis Khan. Back in the 13th century, Genghis Khan founded the Mongol Empire. He unified the tribes of what is now Mongolia (and beyond). He established the largest land empire in history and is well described both online and via various TV documentaries (The History Channel doesn’t skimp when it comes to <a href="https://www.history.com/topics/china/genghis-khan">covering him</a>). Genghis Khan was a name of honor that he didn’t receive till 1206. Before that he was just named “Temujin”.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2cvUCdM6c6ZEFTMwfsXzZc/5d751c72f8d759499f619c88273239ba/35367135654_1251f9fbf8_o.jpg" />
            
            </figure><p><a href="https://www.flickr.com/photos/120420083@N05/35367135654/"><i>Photo</i></a><i> by </i><a href="https://www.flickr.com/photos/120420083@N05/"><i>SarahTz</i></a><i> CC by/</i><a href="https://creativecommons.org/licenses/by/2.0/"><i>2.0</i></a></p><p>Around 30 miles outside Ulaanbaatar is the equestrian statue of Genghis Khan on the banks of the Tuul River in <a href="https://en.wikipedia.org/wiki/Gorkhi-Terelj_National_Park">Gorkhi Terelj National Park</a>. Pictured above, this statue is 131 feet tall and built from 250 tons of steel.</p>
    <div>
      <h3>Meanwhile back in Mongolia in present time</h3>
      <a href="#meanwhile-back-in-mongolia-in-present-time">
        
      </a>
    </div>
    <p>We get to announce our new city (and country) data center during a very special time. The Golden Eagle Festival takes place during the first weekend of October (that’s October 6 and 7 this year). It’s a test of a hunter’s speed and agility. In this case the hunters (nomads of Mongolia) are practicing an ancient technique of using Golden Eagles to hunt. It takes place in the far west of the country in the Altai Mountains.</p><p>The most famous festival in Mongolia is the Naadam Festival in mid-July. So many things going on within that festival, all of which is a celebration of Mongolian and nomadic culture. The festival celebrates the local sports (wrestling, archery, and horse racing) along with plenty of arts. The opening ceremony can be quite elaborate.</p><p>When discussing Mongolia, travelers nearly always want to make sure their itineraries overlap at least one of these festivals!</p>
    <div>
      <h3>Cloudflare continues to expand globally</h3>
      <a href="#cloudflare-continues-to-expand-globally">
        
      </a>
    </div>
    <p>Last week was Cloudflare’s Birthday Week and we announced many services and products. Rest-assured that everything we announced is instantly available in Ulaanbaatar, Mongolia (data center city 154) just like it’s available everywhere else on Cloudflare’s network.</p><p>One final trivia point regarding our Ulaanbaatar data center. With Ulaanbaatar live, we now have datacenters covering the letters <b>A</b> thru <b>Z</b> (from Amsterdam to Zurich), i.e. with <b>U</b> added, every letter is now fully represented.</p><p>If you like what you’ve read and want to come join our infrastructure team, our logistics team, our network team, our SRE team, or any of the teams that help with these global expansions, then we would love to see your resume or CV. Look <a href="https://www.cloudflare.com/careers">here</a> for job opening.</p> ]]></content:encoded>
            <category><![CDATA[Data Center]]></category>
            <category><![CDATA[Asia]]></category>
            <category><![CDATA[Network]]></category>
            <category><![CDATA[Growth]]></category>
            <category><![CDATA[Cloudflare Network]]></category>
            <guid isPermaLink="false">ek9tlQYUye5NB9Iy0IvoI</guid>
            <dc:creator>Martin J Levy</dc:creator>
        </item>
    </channel>
</rss>