AWS re:Invent 2022 - Powering Amazon EC2: Deep dive on the AWS Nitro System (CMP301)
Aug 16, 2023
AWS re:Invent 2022 - Powering Amazon EC2: Deep dive on the AWS Nitro System (CMP301)
The AWS Nitro System is a rich collection of building block technologies—including AWS-built hardware offload and security components—that is powering the recent and future generations of Amazon EC2 instances with an ever-broadening selection of compute, storage, memory, and networking options. In this session, dive deep into the Nitro System, review its design and architecture, explore new innovations to the Nitro platform, and see how it has made the seemingly impossible possible. Learn more about AWS re:Invent at https://go.aws/3ikK4dD . Subscribe: More AWS videos http://bit.ly/2O3zS75 More AWS events videos http://bit.ly/316g9t4 ABOUT AWS Amazon Web Services (AWS) hosts events, both online and in-person, bringing the cloud computing community together to connect, collaborate, and learn from AWS experts. AWS is the world’s most comprehensive and broadly adopted cloud platform, offering over 200 fully featured services from data centers globally. Millions of customers—including the fastest-growing startups, largest enterprises, and leading government agencies—are using AWS to lower costs, become more agile, and innovate faster. #reInvent2022 #AWSreInvent2022 #AWSEvents
Content
0.27 -> - My name is Ravi,
1.35 -> I'm a senior principal engineer in EC2.
6.03 -> I'm so excited that all of you are here,
8.19 -> 'cause I'm gonna be
talking about hardware,
11.91 -> low level firmware, BIOSes.
13.65 -> If that's your kind of thing,
14.7 -> you're at the right place.
17.58 -> So just show of hands,
how many of you've been,
21.57 -> or how many of you've
heard of Nitro before?
25.62 -> Awesome.
27 -> How many of you've heard of
Bare Metal instances before?
31.65 -> You're gonna love this.
36.24 -> So in terms of an agenda,
here's what I'm gonna do.
38.64 -> I'm gonna spend a little bit
of time talking about Nitro.
42.42 -> There is a 2019 video on
YouTube that I did on Nitro,
47.7 -> and so the first 10 or so slides
49.59 -> is gonna sound roughly
the same, don't panic.
52.56 -> I do that because a lot
of you are new to Nitro
54.66 -> and I wanna set the foundation.
57.6 -> Then I'm gonna talk a little bit about
59.1 -> kind of the continuous innovations.
61.11 -> If you've been listening to
all the keynotes, Dave Brown,
65.1 -> Peter DeSantis, there's
a lot of talk about Nitro
68.04 -> and the new instances
and the new platforms
70.17 -> and Trainium and Inferentia.
72.38 -> So I'm gonna touch upon
those, but very, very briefly
75.6 -> because this is a technical deep dive.
77.7 -> And then I'm gonna deep
dive on two main topics
80.01 -> I think they're interesting.
81.45 -> First is security
83.07 -> because it comes up in
so many conversations.
86.43 -> And then I'm gonna spend a
little bit of time talking about
88.32 -> Amazon EC2 Bare Metal instances.
90.03 -> And the reason I wanna do this
91.89 -> is because I'm often in
customer conversations where
95.31 -> we talk about Bare Metal, but
customers confuse Bare Metal
98.04 -> with things like dedicated
hosts and I wanna clear up that.
102.42 -> So let's get started.
105.42 -> So let me take you back a little bit.
108.81 -> In roughly 2013,
111.15 -> we started doing things
like offloading I/O.
114.03 -> So the first thing we offloaded was,
116.37 -> now remember these are
Zen Hypervisor based
118.68 -> instances in 2013.
121.2 -> We decided that we wanted
to offload our network I/O.
124.08 -> So the way we did things was
125.34 -> we had a Intel A259 NIC on the platform.
130.23 -> And we had a custom Nitro Card built
132.39 -> that was the first Nitro Card built
134.34 -> that basically let us do our VPC traffic.
137.31 -> So customer instances talked
to the NIC, the Intel NIC,
141 -> and then when the packets
actually went out,
143.16 -> they got encapsulated by the Nitro Card
145.95 -> and actually went out in the wire,
147 -> so it was just a bump in the wire.
149.67 -> And this obviously saved,
152.057 -> a bunch of CPU cycles on the host CPU.
155.007 -> And just so for clarity, when I say host,
157.62 -> I mean the actual CPU where
customer instances run.
161.43 -> When I talk about servers,
162.81 -> I'm talking about the entire platform,
164.04 -> including the Nitro Cards,
just so you're clear.
168.18 -> And then as time went on in 2015,
170.07 -> we decided we were gonna offload storage.
171.96 -> So the first thing we offloaded was EBS,
174.36 -> the Elastic Block Storage.
176.82 -> And in order to do that,
178.29 -> we started working with a
company called Annapurna Labs.
181.26 -> This was a fabless semiconductor company,
184.23 -> and they were the first company
186.33 -> that were actually seriously
thinking about NVMe,
189.21 -> the Non-volatile Memory Express interface.
192.06 -> NVMe is awesome,
193.14 -> it's an interface that scales really well
195.48 -> for high performance storage,
198.24 -> and so the next thing we
did was we offload EBS
201.81 -> to this new card that we built,
203.82 -> the card exposed NVMe to instances.
206.79 -> And so now what was happening was,
208.8 -> instances were actually
getting more CPU cycles
211.23 -> because they were not spending CPU cycles
213.24 -> processing network traffic
and storage traffic
215.94 -> to do things like,
217.59 -> completions and submissions and so on.
219.72 -> 'cause all of that was
offloaded to the cards.
222.36 -> And then in 2016, we offloaded,
225.99 -> so after we offloaded EBS storage,
227.85 -> we decided the next thing
we wanted to offload
229.53 -> was Local Instance Storage.
231.21 -> And as I go through the presentation,
232.56 -> I'll kind of describe
the differences between
234.3 -> EBS storage and local instance storage.
238.08 -> And that led to our I3 instances
239.82 -> that were pretty much used by
VMware as a first customer.
243.84 -> But as you can see,
244.673 -> the story has been that over time,
246.87 -> we started to offload
things to Nitro Cards.
249.48 -> And in 2017, we actually decided
to offload our hypervisor.
254.1 -> So things that were traditionally
done in hypervisors were,
259.26 -> take a physical box,
260.28 -> carve it up into multiple
instances or guest VMs, right?
264.33 -> And do stuff for those
guest VMs, emulate I/O,
268.62 -> emulate the virtual machine,
and so on and so forth.
271.98 -> We decided to offload
them to the Nitro Cards.
275.37 -> And so that was kind of what led to Nitro.
277.92 -> So Nitro is is the underlying platform
280.38 -> that actually powers all of EC2.
283.26 -> The first Nitro instance that
we launched was C5 in 2017.
286.71 -> So if you've used a C5 2X large,
289.08 -> you're running on a Nitro
system based hardware.
293.16 -> So put simply, Nitro is
basically purpose built hardware,
297.57 -> purpose built software,
purpose built firmware
300.3 -> to basically let us
improve on our performance
304.2 -> and security posture.
306.54 -> It also includes a
purpose built hypervisor.
313.2 -> But when we talk about
Nitro, we talk about the,
315.23 -> we talk about things in
terms of a Nitro system,
318.426 -> it's really three different things.
320.34 -> The Nitro system consists
of a series of Nitro Cards.
323.88 -> I kind of touched upon them briefly,
326.764 -> a Nitro hypervisor that's purpose built,
328.68 -> it's actually based on Linux and KVM,
330.54 -> but we've like modified it
pretty heavily for a reason.
335.73 -> And the Nitro Security Chip
336.81 -> in the middle of everything else.
337.89 -> The Nitro Security Chip
338.82 -> was built for a very specific reason,
341.16 -> and you'll follow along
as I go through the slide.
346.5 -> So let's talk about the Nitro Cards first.
349.14 -> There are actually four different cards.
352.2 -> And each of these cards is
built for a specific purpose.
355.56 -> Now each of these cards
357.42 -> have fundamentally an SOC, an ARM SOC,
361.26 -> they're actually running
some software on it.
363.57 -> And for the most part,
365.16 -> a lot of software is
shared between these cards,
367.29 -> it's common software,
368.64 -> but each card specializes in one thing.
371.25 -> There is a Nitro Card for VPC,
372.9 -> it does our virtual
private cloud networking.
375.87 -> There's a Nitro Card for EBS,
377.49 -> it does our NVMe based storage,
380.55 -> there's a Nitro Card for instance storage,
383.88 -> it does, Nitro Card for,
386.291 -> it basically exports Local
Instance Storage to the instance.
389.82 -> And then there is a card
called the system controller,
392.22 -> the Nitro Controller,
393.053 -> it's really the brains behind
the whole Nitro system.
399.39 -> So let's dive into each
one of these cards now.
402.51 -> So the Nitro card for
VPC is a network card.
406.95 -> If I physically walk into a data center
409.56 -> and actually pull one of
the servers out of the rack
412.47 -> and take one of these cards in my hand,
413.94 -> it would look just like
any other PCIe card,
416.76 -> I mean it physically
looks like a PCIe card.
418.977 -> And if I hold it, it
actually looks like a NIC.
421.77 -> It's got a PCI interface on one end,
423.75 -> it's got ports connecting to the network
425.52 -> on the other end, right?
426.66 -> Because that's what it
does, it does networking.
431.46 -> When it's plugged into a server
433.56 -> and when the server boots up,
435.27 -> what the host hypervisor
sees is a bunch of
439.38 -> elastic network adapter
virtual functions, right?
442.8 -> So it uses SRIOV,
445.74 -> but what the host sees is an ENA NIC,
448.41 -> just like any other NIC.
449.94 -> And so there's an ENA
driver in the instance
452.37 -> that actually binds to that
NIC and basically says,
454.92 -> I'm gonna drive this physical,
this virtual function.
459.36 -> But the whole idea here is that
460.62 -> we implemented this ENA interface because,
463.83 -> think about the problem
where you have a data center
466.65 -> and you're actually
managing all these servers.
469.02 -> And if you decide you
want to upgrade your NICs
470.61 -> from one gig NIC to 10 gig NICs,
472.38 -> well here's what you have to do.
473.213 -> You have to take the one gig NIC out,
474.88 -> put a new 10 gig NIC in.
477.66 -> More than likely,
478.493 -> you'll have to go change the
drivers in the operating system
480.54 -> 'cause that'll come with new drivers,
482.04 -> and that's a huge pain to do at scale.
484.32 -> Well the ENA interface that we implemented
486.69 -> is actually this common interface,
488.1 -> it actually looks very similar to NVMe.
490.29 -> There's completion queues,
there is submission queues,
493.05 -> there is MSIX interrupts going both ways.
496.14 -> And so what essentially what happens
498.93 -> is the ENA driver loads,
500.43 -> and it doesn't matter what
generation of NIC we have,
503.34 -> you could have a, C5
instances, for example,
505.35 -> support 25 gig, C5N instances
support hundred gig,
508.83 -> it's a brand new card
that does a hundred gig,
510.99 -> but the instance driver is the same.
513.21 -> So you could take a army built for C5
516.6 -> and actually run a C5N instance
518.37 -> and get 800 gig with exact same driver.
520.68 -> That was the whole point of the ENA NIC.
524.07 -> But besides doing just
net standard networking,
526.98 -> it also does all of the things
528.06 -> that we expect from VPC, right?
529.233 -> The virtual private cloud.
531.21 -> The virtual private cloud
as you would expect,
533.19 -> is a software defined network.
536.01 -> So it does things like
encapsulation and decapsulation.
538.29 -> So when your instance sends a packet
540.99 -> in the transmit direction out,
542.97 -> the packet the Nitro Controller,
545.58 -> the hits the Nitro Card for VPC,
548.1 -> the Nitro Card then encapsulates
it into an overlay network
550.86 -> and sends it out on the physical network.
553.95 -> The other thing that the card does
555.39 -> is security groups, right?
557.19 -> This is firewalling.
558.27 -> So you as a customer
can launch an instance,
560.747 -> use an API to say,
562.29 -> I only want to allow traffic
in the inbound direction,
565.08 -> or I only want to allow traffic
in the outbound direction.
567.84 -> I only want to allow these ports
569.16 -> to be able to talk to my instance,
570.3 -> so it's a way to firewall your traffic.
572.34 -> But all of that is actually implemented
574.17 -> on the Nitro Card for VPC as
opposed to in the instance
578.01 -> that's running on the CPU.
580.59 -> Limiters is the other thing
we do on the Nitro Card.
584.04 -> One of the goals we had is
if you launch a C5 instance,
587.85 -> it doesn't matter which
you are in or which,
590.64 -> where on the rack you're in
591.87 -> or what part of the
data center you are in.
593.67 -> We wanted to give customers
consistent performance,
596.67 -> bandwidth and latency, right?
598.62 -> Limiters is our way of basically saying
601.38 -> we can actually provide
that consistent latency
603.57 -> no matter where you're
physically in the network.
606.33 -> And then last thing,
607.23 -> the Nitro Card for VPC does is routing,
610.461 -> which is what you would
expect when you have
612.72 -> a bunch of instances in your VPC
614.88 -> and they need to talk to each other.
617.1 -> But the key point here is
that the Nitro Card for VPC
620.19 -> offloads all of this stuff
622.11 -> and it doesn't consume
cycles in the instance.
627.78 -> The other thing that the
Nitro Card for VPC does
630.12 -> is this thing called
Elastic Fabric Adapter.
631.86 -> In fact, we actually built this
634.32 -> for applications like
HPC and machine learning.
638.22 -> I have a background in HPC,
639.42 -> so I'll go into this a bit,
641.19 -> but on the, what is it?
646.43 -> It is your left side,
648.24 -> is a classic HPC application
650.73 -> running on a standard
TCP/IP network, right?
653.52 -> So the NPI application, in this
case called HPC application,
657.57 -> when it wants to send a
packet to the network,
659.52 -> that packet has to traverse
the entire TCP/IP stack
662.07 -> down to the ENA driver
and then out the wire.
665.49 -> What happens with EFA is, EFA is a fabric,
668.16 -> it's a high performance fabric.
670.65 -> So HPC applications and
machine learning applications
674.46 -> sit on top of libraries like NPI and NCCL,
676.86 -> Nvidia's NCCL.
678.18 -> But they use this, this
library called Libfabric.
680.937 -> And Libfabric lets you provide a,
682.71 -> we implemented a provider
for EFA that basically says
686.88 -> when you want to initialize the adapter,
688.8 -> you go through that part that says,
691.41 -> transition from Libfabric
to user to kernel
693.42 -> back into the EFA driver.
694.47 -> But once the setup is
complete and you have cues,
697.86 -> the application talks
directly to the hardware,
700.11 -> there is no ring transition
from user mode to kernel mode.
702.9 -> So you get this really high
performance, high bandwidth,
705.45 -> low latency, and it's perfect for HPC.
708.48 -> The reason this is interesting is,
710.293 -> typically HPC applications
711.66 -> are trying to solve large problems, right?
713.52 -> They're trying to solve protein folding
716.25 -> or molecular dynamics or
some fluid simulation.
721.29 -> And in order to solve a
large problem quickly,
723.69 -> they distribute the problem
724.83 -> across many, many, many, many nodes.
727.26 -> While the nodes do two things,
728.73 -> they compute stuff, right?
730.48 -> So you use ABX instructions
731.94 -> and you use cache prefetching and so on.
734.37 -> But at every stage, they have to exchange
736.62 -> a bunch of partial
results with each other.
739.32 -> And in order to do that efficiently,
740.91 -> they need a high bandwidth,
low latency network.
744.18 -> And in order to do that, when
you use something like EFA,
746.91 -> you get really, really
consistent high performance.
753.48 -> EFA is actually based on
an underlying protocol
756.27 -> called Scalable Reliable Datagrams,
757.89 -> and I pulled up this paper
and I thought I should just
760.77 -> link it in my slide deck here.
763.14 -> This is the paper that
actually talks about
764.79 -> the implementation of SRD that EFA uses.
768.66 -> SRD was meant, or was designed
for data center environments
772.95 -> and it uses things like multi-pathing.
775.05 -> So if there are hotspots in the network,
777.69 -> we actually work around them.
781.62 -> And before I move on from the slide,
783.03 -> one of the things I'd like to mention is,
784.59 -> I think yesterday there
was announcements of
788.73 -> this thing we call EFA
Version 2 or EFA v2.
793.02 -> It's something we've been working on.
794.61 -> So EFA was launched in
2018 and since then,
797.43 -> we've been improving
the performance of EFA
799.65 -> and customers have been enjoying
801.69 -> all the improvements we made
802.74 -> because we are able to
actually update our machines
805.38 -> dynamically when customers are running.
807.99 -> EFA v2 specifically
brings two main benefits.
813.27 -> The first is it enables
full RDMA semantics,
819.63 -> so if you're doing HPC
applications with RDMA.
823.56 -> And the second it brings
824.64 -> it actually goes from hundred gigabit
826.2 -> to two hundred gigabit,
827.16 -> which is what EFA v2 does.
831.45 -> But in general, if you
look at ENA and EFA,
834.39 -> this is what's been
happening in EC2, right?
836.94 -> In 2013, I mentioned the A259
NIC with the bump in the wire.
842.04 -> We were at about 10 gigabits per second
843.48 -> with the Intel A259 NIC.
845.85 -> In 2017, 2018 when we launched,
848.61 -> when we launched C5 with Nitro,
850.71 -> we were at 25 gigabits per second.
852.27 -> So there were instances
853.71 -> that were actually C25 gigabit per second.
856.53 -> Then we launched our
C6 instances recently,
860.61 -> they offer 50 gigabit per second.
863.04 -> We also have network optimized instances
864.81 -> that do like 100 and 200.
866.1 -> So like C5N was a hundred
gigabit per second NIC,
869.34 -> and we just announced a
bunch of NICs yesterday
871.83 -> with C6IN, M6IN, R6IN,
874.62 -> our Ice Lake based instances
876.87 -> that do 200 gigabit per second bandwidth.
881.55 -> And then if you obviously
combine multiple cards
883.65 -> in a platform and you use multiple NICs,
885.84 -> you can actually get 400, 1800, 400, 800
888.58 -> and I believe even 1600
gigabits per second.
894.6 -> The next card in my series
is the Nitro Card for EBS.
899.28 -> The Nitro Card for EBS is, again,
901.32 -> it looks like a pretty standard PCIe card,
903.78 -> but what it does is
when the host boots up,
905.97 -> it actually exposes NVMe to the host.
910.17 -> It actually, so from an
instance perspective,
912.6 -> the instance has an NVMe driver,
914.033 -> NVMe is a pretty standard protocol.
917.01 -> The instance driver talks
to the card over NVMe,
920.25 -> it submits requests, gets
completions and so on.
923.64 -> The card itself actually implements
926.55 -> block storage over a network.
928.23 -> So when you, when the
customer instance is running
931.26 -> on the host talking NVMe,
933.48 -> we actually take those requests
934.98 -> and we ship them to our EBS servers
936.75 -> on the far end of the network.
939.12 -> What this gives you is durability.
941.37 -> You can actually stop your instance
943.47 -> or terminate your instance,
944.52 -> but your disc that's
sitting over your EBS volume
946.86 -> on the back end is completely persistent.
950.34 -> So you can come back the next day and say,
952.47 -> I want to start a new instance
and attach this volume to it.
955.71 -> And so the mental model is,
958.38 -> you have your laptop,
959.52 -> you've decided you wanna
go home for the day,
961.26 -> you shut your laptop,
962.58 -> doesn't mean your disc
is destroyed, right?
963.96 -> Your disc is persistent.
966.87 -> The Nitro Card for EBC
does a few other things.
970.65 -> It supports encryption,
971.76 -> so if you actually use encrypted volumes
973.95 -> when you launch an instance,
975.81 -> all of the encryption happens on the card,
977.49 -> it's actually offloaded to the card.
979.65 -> And so we've been doing
NVMe based remote storage,
983.46 -> basically NVM fabric for a very long time,
985.47 -> at least in C5 launched.
990.06 -> The Nitro Card for Instance Storage,
992.16 -> the mental model that I
want to leave you with is,
994.26 -> imagine a server with a Nitro Card
996.87 -> and a bunch of discs hanging
off of that Nitro Card,
999.66 -> so a bunch of SSDs, right?
1002.06 -> This is a card if I were to look at it,
1003.89 -> it would have a PCIe interface on the top
1006.17 -> and a bunch of NVMe
interfaces on the bottom.
1008.9 -> From an instance perspective, again,
1010.61 -> you see NVMe just like
EBS, but in this case,
1013.675 -> when you actually write NVMe commands,
1016.1 -> you're writing to the local discs.
1017.69 -> So there is no network attached
storage, it's just local.
1021.29 -> You get great performance.
1023.18 -> However, the lifetime of
the disc is tied to your,
1026.133 -> is tied to the lifetime of your instance.
1028.07 -> When you terminate your instance,
we wipe the discs, right?
1031.22 -> And the way we wipe the discs
1032.21 -> is we obviously encrypt everything
1033.44 -> and we basically throw the keys away.
1035.24 -> It's that simple and we trim the drive.
1038.75 -> A lot of our customers,
1039.74 -> especially database customers
use this particular storage,
1043.64 -> they build their own replication
strategies and whatnot.
1047.18 -> But local instance storage actually
1049.04 -> is extremely high performance.
1052.04 -> And like I mentioned,
1052.873 -> we also do all of the
encryption on the card,
1055.1 -> we do limiters.
1056.36 -> One important thing that this
1057.89 -> Nitro Card for Local Instance Storage does
1060.32 -> is related to NVMe and NAND storage.
1063.71 -> The way NAND storage works is
it's, you can always write,
1067.31 -> you can always go from a one to a Z
1068.87 -> or you can go from a
zero to a one on NAND,
1070.61 -> but you cannot go backwards.
1072.05 -> So, the more you write to
NAND, the more it wears out.
1076.58 -> So there's this thing called
1077.413 -> wear leveling that needs to happen where
1081.447 -> the FTL, it's a piece of firmware
1084.32 -> that lives in the NVMe controller
1086.87 -> that's constantly looking for
new blocks to put your data.
1089.15 -> So every time you write
data to your drive,
1091.55 -> it's looking for new blocks.
1092.87 -> And over time, because of
use, these blocks wear out.
1096.77 -> The Nitro Controller for Instance Storage
1099.98 -> does one additional thing, which is,
1102.47 -> it looks at, it keeps
monitoring wear levels
1104.42 -> of the SSDs that are attached to the card
1107 -> to make sure that you don't have
1108.2 -> this performance cliff, right?
1109.94 -> What happens in the FTL is,
1111.71 -> as you're writing to these blocks
1113.15 -> and the blocks are starting to wear out,
1114.53 -> it's looking for a new block.
1115.73 -> And sometimes over time,
that looking for a new block
1118.937 -> can take a very long time.
1120.56 -> And so from your
application's perspective,
1122.18 -> when you open a file and
you write to the block,
1124.4 -> it takes a very long time
1125.233 -> 'cause it needs to look for a new block.
1127.25 -> And so as the drive gets worn out,
1129.56 -> you start seeing performance degradation
1131.87 -> to the point where you
actually fall off a cliff.
1133.91 -> And so before that happens,
1136.1 -> we actually monitor these drives
1138.2 -> because we have monitoring
software running on these cards
1140.96 -> and we basically take it
out out of production.
1146.84 -> The last, well, not last,
1148.34 -> but one of the cards is
the Nitro Controller.
1150.717 -> The Nitro Controller is the
brains of the Nitro system.
1154.64 -> And I will tie all of these cards together
1157.31 -> very, very quickly in a
picture 'cause it's not,
1159.5 -> if it's not super clear to
you, it'll be in a minute.
1162.65 -> The Nitro Controller is the card
1165.29 -> that actually interfaces
with the EC2 control plane.
1168.29 -> So, and I'll show you an example
1170.45 -> of what happens when you launch
an instance as a customer,
1173.69 -> how it goes through the Nitro Controller,
1175.16 -> and what happens with
the Nitro Controller.
1177.65 -> It's the card that basically coordinates
1179.63 -> with all the other cards in the platform,
1181.31 -> so oftentimes we'll have a
server with the Nitro Controller
1185.36 -> and multiple Nitro I/O cards
for networking and storage.
1188.96 -> The Nitro Controller card
1189.83 -> basically talks to the other cards,
1191.12 -> so there's, think of it as a
cluster of cards in the server.
1195.601 -> The Nitro Controller
1196.434 -> also coordinates with
the Nitro Hypervisor,
1198.53 -> it's that thin layer of software
that's running on the host,
1201.35 -> the X86 or Graviton CPU.
1203.96 -> And the Nitro Controller
1205.01 -> also coordinates with
the Nitro Security Chip,
1206.87 -> which I'll get to in a minute.
1211.82 -> So the Nitro Security Chip,
1213.26 -> there was a very specific
reason why we built this thing.
1217.01 -> If you think about a server
today, any modern server,
1220.61 -> the server has many
besides the whole CPUs,
1224.87 -> it has memory DIMs,
1226.4 -> it has a baseboard
management controller or BMC,
1229.43 -> it has multiple microcontrollers
that are doing things like,
1233.3 -> keeping track of temperatures,
1235.01 -> keeping track of fan speeds
and so on and so forth,
1238.19 -> each of these controllers
1239.78 -> is typically running some
form of firmware, right?
1243.14 -> And when you power on the machine,
1244.88 -> that firmware has to load from somewhere.
1246.65 -> That somewhere is usually a flash chip
1248.99 -> sitting on the motherboard.
1251.15 -> Well, traditionally,
1252.32 -> if you're running a
server in a data center,
1254.51 -> that firmware has to be updated.
1255.77 -> There could be bugs, there
could be security bugs,
1258.65 -> there could be just crashes and so on.
1262.34 -> So typically the way these
updates are done is you,
1265.16 -> you log onto your host
and you run some tool
1267.56 -> and the tool basically says,
1268.7 -> I'm gonna flash that new firmware
1270.5 -> over an I square C bus or over a spy bus.
1275.18 -> Well, after we offloaded everything,
1277.34 -> we realized very quickly
1278.18 -> that we don't actually have to do that
1279.47 -> because we don't have to be
on the hypervisor to do it,
1281.69 -> we have a Nitro Controller.
1283.22 -> So the Nitro Controller now is in charge
1285.41 -> of actually updating
these firmware flashes.
1289.94 -> And one of the things we decided was,
1291.32 -> since we don't have to
support the legacy requirement
1293.6 -> of updating the firmware from the host,
1297.14 -> we can actually just implement a chip
1298.97 -> that sits in front of every I
square C bus and every spy bus
1302.9 -> and basically takes all
the right transactions
1304.67 -> and throws them away.
1306.38 -> So if you are a customer
running on the host,
1308.3 -> there is no way
1309.35 -> you can actually get to
one of these spy flashes,
1312.29 -> it's just a security feature, right?
1314.21 -> Nobody can muck with the
spy flashes on the platform,
1317.15 -> and that basically guarantees
that the platform is secure
1319.76 -> every time it reboots.
1322.07 -> The Nitro Security Chip
does another thing,
1324.41 -> which is every time the Nitro security,
1326.6 -> every time the platform reboots,
1328.31 -> the Nitro Security Chip holds the CPU,
1331.25 -> the X86 or the Graviton in reset,
1333.74 -> it holds it reset and then basically says,
1336.23 -> let me verify every single spy,
1338.93 -> make sure it matches what
I expect it to match,
1341.51 -> and if it doesn't,
1342.71 -> I'm gonna overwrite it with
what I think it should be.
1345.77 -> So even if we've had a
kind of a vulnerability
1348.92 -> where one of these writes from the host
1352.76 -> is actually able to get to a spy,
1354.41 -> it will get overwritten
on the next reboot.
1358.28 -> So pictorially, this
is what it looks like,
1360.71 -> so there's, imagine you're a customer,
1362.24 -> you're running on the instance,
1363.62 -> you're running inside
an instance on the CPU.
1367.1 -> The Nitro Security Chip, like I said,
1368.48 -> is sitting on all of the I square C buses
1371.15 -> and SM buses, and it basically says,
1373.73 -> I'm not going to let any
instance running on this box
1376.94 -> get to any of the spies.
1382.31 -> The last component before
I tie everything together
1385.13 -> is the Nitro Hypervisor.
1387.5 -> The Nitro Hypervisor is
based on Linux and KVM,
1390.95 -> but we made a very conscious
choice to simplify it.
1395.42 -> We don't need things like SSHD,
1397.67 -> we don't need things like system D,
1400.76 -> we don't have a network stack
in the hypervisor at all.
1403.55 -> There's no need for the
hypervisor to talk to the network
1406.43 -> because the hypervisor
1407.72 -> is only allowed to talk
to the Nitro Controller.
1410.9 -> And the reason we also
made the simplification
1413.51 -> is it's very easy reason about
what the hypervisor is doing.
1415.88 -> It does one thing,
1417.26 -> which is program hardware
for virtualization,
1420.08 -> carve up memory and CPUs
and get out of the way.
1423.5 -> We also call it a quiescent hypervisor,
1425.18 -> that's the exact word I used.
1426.44 -> And the reason we call
it quiescent hypervisor,
1428.15 -> if your Linux, if you guys know
how Linux system calls work,
1432.38 -> is if you open an application,
1433.67 -> you make a system call,
1434.66 -> a Linux system called
like open to open a file.
1438.2 -> You make a transition from
user space to kernel space,
1441.02 -> And that's the only time
the kernel's invoked.
1442.94 -> If your application doesn't
make any system calls
1445.13 -> and is simply executing application code,
1447.41 -> you don't actually make the transition
1448.61 -> from user space to kernel space,
1450.44 -> That is the case with he Nitro hypervisor.
1452.24 -> when an instance is running
and it doesn't actually need
1455.57 -> any support from the hypervisor,
it just keeps running.
1457.61 -> The Nitro hypervisor just
stays really, really quiet.
1461.33 -> And the reason we did
this is we didn't want
1463.033 -> threads running around
stealing CPU cycles and so on.
1467.15 -> The goal was to get the Nitro
Hypervisor's performance
1470.24 -> to be practically Bare Metal.
1472.79 -> We've actually had benchmarks where
1475.73 -> customers have run benchmarks and said,
1477.59 -> I'm going to run this benchmark
on a Bare Metal machine
1480.17 -> and run it on your C5 instance,
1481.82 -> which is running on top of the hypervisor
1483.53 -> and the performance is virtually the same
1486.41 -> to a very long tail latency.
1492.02 -> So let me tie this all
together for you, right?
1493.85 -> So imagine you've got a server
1495.44 -> that looks like the picture
here, it's a Nitro host.
1498.62 -> And imagine you just
launched an r6gd instance.
1501.71 -> And the reason I picked r6gd is it's a,
1504.47 -> it's a memory optimized
Graviton based instance
1507.904 -> that uses Local Instance Storage, the d
1511.55 -> and it's the 16xlarge,
so it uses 64 cores.
1516.2 -> The first thing that happens
when you as a customer says,
1518.93 -> AWS space EC2 space run instances,
1522.77 -> dash instance type r6gd.16xlarge,
1527.871 -> is the EC2 control pane gets your request
1530.21 -> and says, "Okay, let me
find you a host where
1533.18 -> your instance can start running."
1535.13 -> So it looks at the capacity in EC2,
1537.35 -> in your easy of choosing, let's say it's,
1540.26 -> US West two, it says,
1541.79 -> I'm gonna find capacity in US West two
1545.357 -> and find the right host.
1548.15 -> It then sends a command
1549.68 -> to the Nitro Controller on that host.
1552.32 -> And when I say sends a command,
1554.18 -> this is actually a API call
1556.43 -> that the control pane makes.
1558.44 -> And I'll describe this in a lot of detail
1559.823 -> when I get to the security section.
1562.46 -> The Nitro Controller
then says I'm going to,
1565.01 -> I'm gonna carve up bunch of memory
1567.05 -> and a bunch of CPUs
for this instance type,
1570.23 -> and then I'm gonna talk
to the Nitro Hypervisor
1571.88 -> and tell it to actually
launch this instance.
1574.7 -> The Nitro Hypervisor receives the command
1576.65 -> and basically says,
1577.527 -> "Okay, I've programmed the
hardware bits, VTX, VTD,
1581.21 -> all the virtualization features in the CPU
1583.85 -> and I'm gonna get out of the way."
1588.89 -> Step four, the Nitro Controller
sends another command
1591.8 -> and says, by the way, in
order for that thing to boot,
1594.65 -> it needs an EBS volume,
it needs an AMI, right?
1597.47 -> For those of you who know what an AMI is,
1598.7 -> an Amazon Machine Image.
1600.92 -> So I'm gonna take an image
that the customer has chosen,
1604.52 -> Amazon, Linux, Ubuntu,
Windows, even MacOS.
1609.14 -> I'm gonna take an image,
1610.61 -> I'm gonna put it on EBS volume
1612.23 -> and I'm gonna attach it to
the instance on this machine.
1615.5 -> And that's what the Nitro Controller does,
1616.7 -> it exposes NVMe to BIOS on the machine.
1622.58 -> The Nitro Controller then sends a command
1624.14 -> to the hypervisor and says,
1625.52 -> hey, you know that
instance that EBS volume
1627.77 -> that this got attached?
1628.76 -> Expose it to the instance
using SRIOV, right?
1632.54 -> So that the instance can
talk directly to the hardware
1635.03 -> and bypass a hypervisor,
that's what step five is.
1639.17 -> Step six, the control plane says,
1641.12 -> great, I've set up all I/O,
1643.25 -> you've programmed the hardware to do,
1644.93 -> all the VTD functions and
all the VTX functions,
1648.08 -> make the instance runable.
1649.85 -> And as soon as it says that,
the instance starts running
1652.25 -> and eventually you get to SSH into it.
1658.67 -> But through the last few
minutes of my talking,
1662.15 -> you could probably see how
1663.86 -> we've had multiple
generations of Nitro Cards
1666.86 -> for networking, for storage,
1669.29 -> multiple Nitro Controllers actually.
1671.27 -> And that gives us this
broad selection of instances
1675.5 -> for various workloads, right?
1677.09 -> Network bound workloads,
I/O bound workloads,
1679.37 -> compute bound workloads
across Intel, AMD, ARM,
1685.58 -> our Graviton CPUs, and
now MacOS and Apple.
1691.43 -> We have instances that go
from like half a gigabyte
1695.36 -> all the way up to 24 terabytes in size
1697.25 -> for the high memory SAP instances.
1699.77 -> We have instances that support,
1701.81 -> 25 gigabytes of networking
1703.43 -> all the way out to like 800 gigabits of,
1704.833 -> gigabit per second of networking.
1707.42 -> In fact, if you looked at the slide
1708.77 -> from like a couple of years ago,
1710.51 -> that 575 number was like 200, right?
1713.72 -> When we first launched Nitro.
1715.64 -> In fact, this slide did have
things like Apple on there,
1718.28 -> it didn't have things like
networking up to 1600 gigabits.
1722.21 -> It just shows you how quickly
we're able to innovate
1724.73 -> because we have these building blocks.
1729.08 -> I won't go over the slide
because like I said,
1731.24 -> all of our execs have
talked about this in depth,
1733.7 -> there's probably awesome recordings of it.
1736.91 -> But I want to quickly touch
upon the fact that we have,
1740.36 -> our sixth generation CMR instances,
1744.32 -> which support 80 gigabits
per second of EBS bandwidth,
1747.14 -> 200 gigabit per second of networking.
1749.9 -> C7gn, we just announced it yesterday,
1752.72 -> it's our Graviton based
200 gigabit per second
1757.49 -> networking instance.
1760.73 -> R7iz is our first Intel
Sapphire Rapids based instance
1766.67 -> that has, that is this high
frequency 3.9 gigahertz part.
1770.99 -> It's 15% better performance
1773.24 -> compared to the previous
generation and inf2 and Mac2.
1776.21 -> And I'm gonna dive into Mac2 a little bit
1778.97 -> 'cause I was the lead engineer for Mac2,
1780.37 -> so I'm super excited about that one.
1784.76 -> So now that I've given you
kind of the building blocks,
1786.83 -> let's talk about security.
1790.97 -> Keeping our customers' workload
secure and confidential
1795.02 -> is like our top priority in EC2.
1798.77 -> And we often get into these
conversations with customers
1801.56 -> about how we keep things secure and so on.
1806.274 -> AWS is responsible,
1807.95 -> and security is like a
shared responsibility.
1810.09 -> AWS is responsible for
security of the infrastructure,
1812.69 -> everything I just talked about.
1814.43 -> The customer, you, are
obviously responsible
1816.83 -> to make sure that the instance
and it's OS is patched,
1820.1 -> make sure that you don't expose
your instance to the world,
1822.23 -> you do all the security groups
and everything else, right?
1824.27 -> That's something we can do.
1830.03 -> And before I go further,
I should mention that,
1832.58 -> this talk is about Nitro.
1834.92 -> We take security very seriously,
1836.66 -> in fact, all of our Zen based instances,
1838.61 -> the C5, anything before C5,
1840.935 -> the C4s and the C3s are
also very, very secure,
1844.49 -> they just use a different
set of policies, right?
1848.12 -> In the past year,
1850.13 -> this phrase confidential
computing has been coming up a lot
1853.37 -> in the industry and in
customer conversations we have.
1857.51 -> We've observed that a lot
of people also talk about
1859.52 -> different technologies that
solve different problems,
1862.73 -> and this has led to a lot of confusion.
1864.98 -> But when we take a step back
1866.21 -> and we actually get into
customer conversations
1868.13 -> about confidential computing,
1869.69 -> the first question we ask actually is,
1873.05 -> who are you protecting
your data from, right?
1875.06 -> That is the key question.
1878.27 -> The most important dimension
that customers tell us often
1882.5 -> every single time is we wanna
protect our data and our code
1887.21 -> from in two scenarios;
scenario number one,
1889.7 -> from other instances running
on the same physical box.
1892.34 -> It's a multi-tenant box and from you,
1895.67 -> the cloud service provider, us, right?
1899.45 -> And we really think of that
problem as dimension one.
1903.26 -> We wanna make sure that we
don't ever see your data,
1906.02 -> we don't ever see your code,
1908.6 -> we just think of it as radioactive.
1910.19 -> We don't wanna touch it,
we don't wanna see it.
1912.2 -> That's the whole point
of the Nitro system.
1916.43 -> There's also a set of
customers to talk to about,
1918.71 -> talk to us about a second
dimension of security,
1922.37 -> and that is around making
sure that their users
1925.94 -> who are actually on the instance
1928.49 -> can't get to highly sensitive data.
1930.38 -> So they want to divide
their data into two parts,
1932.75 -> most trusted and less trusted.
1935.03 -> And they want to make sure that
1935.93 -> people who are able to
SSH into the instance
1938.15 -> can't get to this highly sensitive data.
1939.83 -> They wanna partition their
data into two separate classes.
1943.4 -> And this is where I'll
talk about Nitro Enclaves
1945.44 -> and what Nitro Enclaves does
and how it solves that problem.
1950.87 -> So I'll go over kind of
dimension one and dimension two,
1954.38 -> so let's start with dimension one.
1957.89 -> From everything you've seen
so far about the Nitro Cards
1960.5 -> and how we've had this secure hypervisor
1962.57 -> that's minimal and so on,
1964.46 -> the first thing that you notice is that
1966.41 -> there is physical separation
1968.18 -> between where you customer
instances run on the host CPU
1971.63 -> and where our software
runs on the Nitro Cards,
1974.36 -> it's physically separated.
1976.85 -> The second most important thing is,
1978.2 -> when the servers actually boot up,
1980.33 -> they go through a measured boot process.
1982.22 -> So the Nitro Controller, the
brain of the machine comes up,
1986.27 -> starts from a secure
place, from a secure ROM,
1989.54 -> and then starts measuring
1990.92 -> every single stage of the boot process,
1993.17 -> it's like a pretty standard measured boot.
1995.12 -> But the key thing is
that all of our software
1997.67 -> lives on an SSD that's attached
to the Nitro Controller,
2000.1 -> I've shown it that little picture
2001.24 -> next to the Nitro Controller.
2003.55 -> And only if the measurements match,
2006.73 -> the measurements are actually,
2007.84 -> so each stage measures the next stage
2010.45 -> and extends those measurements in a TPM,
2012.79 -> a Trusted Platform Module
2014.02 -> that's on the Nitro Controller.
2015.82 -> And at the end of the boot process,
2017.23 -> if the measurements match what we expect,
2020.17 -> the encryption key that encrypts the drive
2023.35 -> that has all of our
software is provided to us
2026.707 -> and we can decrypt the drive
2028.12 -> and actually get to the software.
2029.86 -> If the measurements fail,
2030.91 -> which means somebody's
tampered with the firmware,
2032.98 -> you can't unencrypt the drive.
2034.21 -> And if you can't decrypt the drive,
2035.77 -> there is no way you can launch
an instance on this machine,
2038.35 -> it's just a dead brick at that point.
2041.62 -> So by ensuring that the software on,
2044.32 -> the firmware on the machine
is exactly what we expect
2047.77 -> and that the drive is encrypted
2049.39 -> and all our software is careful,
2050.92 -> we can ensure that the machine
is in exactly in the state
2053.59 -> before it is able to launch
any customer instances.
2057.16 -> I talked about the Nitro Security Chip,
2060.25 -> I mentioned that the Nitro
security chip sits on every bus
2064.45 -> and makes sure that the customer instance
2066.19 -> can never ever ride to any
spy flash on the platform.
2070.72 -> But the second thing it does
2072.25 -> is that when we actually
reboot the machine,
2075.55 -> it comes up and holds the CPU
reset, measures everything,
2078.61 -> and then says if everything is okay,
2079.84 -> I'm gonna release the CPU from reset.
2081.73 -> If things fail, it's just a brick.
2087.82 -> Secure boot is so important to us
2089.8 -> that we actually worked
with some folks in academia,
2094.24 -> some of my colleagues worked
with folks in academia
2097.09 -> to come up with a paper that
actually formally verifies
2100.18 -> that the secure boot process
2101.35 -> that we use on these servers is correct.
2104.38 -> And that's this paper I wanted to link
2105.79 -> in case you wanna read offline.
2111.43 -> Continuing down dimension one,
2113.65 -> now you must be wondering,
I talked about software,
2115.75 -> I talked about this
drive and I talked about
2117.91 -> software being encrypted
on this drive and so on.
2120.55 -> Well that software
2121.66 -> is software that folks
like me write, right?
2123.55 -> So we write software, it's
obviously reviewed extensively,
2127.24 -> we go through multi-party
reviews every single change.
2130.42 -> The software also goes
through our build pipeline
2132.4 -> and our build pipeline signs
that software with a key
2135.61 -> that is private to the build pipeline.
2137.05 -> Like I as an individual, no
matter how senior you are,
2142 -> I cannot for example, make a change
2144.82 -> and say I'm gonna target
a production server,
2147.58 -> I'm gonna build that software
2148.9 -> and push it to that production
server and deploy it.
2150.73 -> It just cannot happen
because when that software
2153.61 -> is deployed to that production server,
2155.35 -> its signature is verified
2156.79 -> and I just don't have the private key
2158.26 -> to sign it with the production key.
2161.08 -> So when that software is
actually deployed to a machine
2163.9 -> and when that software
package is extracted,
2165.7 -> the signature verification fails
2167.02 -> and it'll reject my package.
2168.64 -> So the only way to get
software deployed to machines
2171.37 -> is if it's built by our
deployment pipeline,
2173.44 -> and that deployment pipeline
holds a key that is private
2176.38 -> to deployment pipeline.
2179.26 -> The other thing that we do
almost on a weekly basis
2183.22 -> is we do something called live update.
2185.98 -> So let's say we find that we want to,
2187.93 -> push a new feature to our customers
2190 -> or we want to push a
security fix or a bug fix,
2194.29 -> we can actually update
2195.73 -> most of the software
components I mentioned,
2197.2 -> networking, storage,
hypervisor, et cetera,
2200.47 -> and push it and update
our Nitro Controllers
2203.8 -> or our Nitro Cards while
customer instances are running.
2206.98 -> So it's like we're
basically updating software
2208.66 -> from underneath you
2210.04 -> and it does not impact customer instances.
2211.72 -> You keep running, you keep doing storage,
2213.64 -> you keep doing networking.
2216.04 -> This gives us a really cool
way of updating the software
2218.5 -> and making sure everything is okay.
2222.64 -> I also mentioned on a
lot of the Nitro Cards
2225.85 -> that I talked about, I
mentioned we do encryption,
2228.01 -> we do encryption of storage at rest,
2229.78 -> we do encryption or networking and so on.
2232.12 -> All the keys for that
encryption is stored in the TPM
2235.96 -> on those Nitro Cards
so it's secure storage
2238.18 -> and it cannot leave,
2239.35 -> it's not like we write it to the drive
2240.61 -> and it just sits there.
2242.68 -> Finally, as a defense in
depth, a lot of our instances,
2246.37 -> especially our more recent instances,
2248.83 -> support things like
total memory encryption
2253.989 -> or Graviton has encryption on by default.
2257.65 -> This prevents, this protects
you from physical attacks
2260.44 -> like a DCO attack or a technician
walking up to the server
2263.56 -> and pulling out a DIM that has
your memory contents, right?
2266.5 -> So the memory actually is
encrypted at rest in the DIM.
2273.94 -> This is very important to us.
2277.48 -> The Nitro architecture
is built such that I,
2281.14 -> it doesn't matter who you are,
2282.31 -> it doesn't matter who your seniority is,
2284.02 -> even if you're a VP, you
cannot SSH to a physical box,
2288.61 -> it just doesn't exist.
2290.14 -> This was a huge security bar raiser for us
2292.9 -> compared to our Zen instances.
2294.07 -> On Zen instances, there is
something called a DOM zero,
2296.74 -> which is a special DOM.
2298.24 -> You can actually SSH into
DOM zero and do things.
2301.57 -> You look at logs,
2302.47 -> you can look at debug messages and so on.
2305.32 -> That just doesn't exist on Nitro.
2307.39 -> The Nitro Controller
exposes a hardened API.
2311.83 -> It's REST API that the
EC2 control plane calls
2315.55 -> and sort of passes in parameters.
2318.28 -> The Nitro controller
validates the parameters
2319.9 -> and returns the response.
2321.76 -> And the API is actually encrypted,
2324.37 -> so there's actually a TLS session
2325.69 -> between the EC2 control plane
and the Nitro Controller.
2327.72 -> So it's an encrypted
transaction, it's authenticated,
2331.54 -> there's actually tokens
in that API that says yes,
2334.09 -> you are allowed to talk
to the Nitro Controller.
2336.94 -> And even I can't walk up to
a production box and say,
2340.72 -> oh, do something funky
with over the API just to,
2343.06 -> I don't have the tokens.
2345.22 -> It's authorized and
everything's logged on the,
2347.77 -> so all the interactions
that happen with the,
2350.11 -> between the EC2 control plane
2351.7 -> and the Nitro Controller are
actually audited and logged.
2354.58 -> So we can go back and look
and see what happened.
2358.27 -> And we use the principle
of least privilege.
2360.1 -> So for example, the EC2
control plane that I show here
2362.83 -> is actually really the control plane
2365.47 -> that launches instances, there
is a storage control plane,
2367.75 -> there is a networking control plane,
2368.86 -> so really three components.
2370.45 -> Each of them has a
restricted set of API calls
2373.66 -> that they can make and that's it,
2375.55 -> they can't do anything more.
2377.89 -> Lastly, none of these APIs,
2380.02 -> and we go through this
like every so often,
2382.24 -> we go look at these APIs over and over,
2384.91 -> none of these APIs
2386.17 -> ever expose customer
memory or customer content.
2389.5 -> Just they don't, they
just don't expose it.
2394.36 -> The second dimension, so
with the first dimension,
2396.94 -> the things I just talked about,
2399.7 -> we're basically saying there
is no way for an operator
2402.34 -> or a service an operator
like myself or a service
2405.61 -> to actually get customer content.
2407.32 -> You can't SSH to a box, you
can't just do weird things.
2410.68 -> The software that's
running on that is trusted
2412.24 -> 'cause it's built by our system.
2414.25 -> The firmware is trusted 'cause
it's measured and so on.
2417.61 -> The second dimension is Nitro Enclaves.
2421.42 -> An enclave is basically a isolated,
2424.63 -> hardened virtual machine.
2427.24 -> In fact, it uses the same
underlying VMM technology
2431.11 -> that we use for virtual machines.
2432.97 -> Think of it this way:
2434.74 -> imagine you just launched
a C5 8xlarge instance with,
2439.45 -> I'm just gonna make up a number,
2441.46 -> 16 VCPUs and 32 gigabytes of memory.
2444.82 -> And then you SSH into
that instance and said,
2447.407 -> "Carve out four VCPUs
and eight gigs of memory
2450.01 -> and create an enclave from it."
2452.5 -> We launch another virtual machine
2454 -> next to the main parent virtual machine
2456.73 -> with four VCPUs and eight
gigabytes of memory,
2460 -> and that thing boots into
a Linux like environment,
2462.04 -> but it's very, very limited.
2464.26 -> And that instance uses the
same virtualization technology
2467.92 -> as any of our other instances
2470.83 -> uses VTX and VTD for isolation.
2473.35 -> But more importantly, it has no storage,
2475.81 -> it has no networking.
2477.55 -> The only thing you can talk to
2478.84 -> is it has thin straw between
itself and the parent instance,
2482.62 -> it's called a VSOC.
2485.11 -> Why is this useful?
2486.13 -> Well, that instance when it comes up,
2489.49 -> it actually makes up a
public private key pair.
2491.77 -> And the private key pair,
2492.85 -> the private key in that key
pair stays in the enclave,
2495.28 -> it never leaves the enclave.
2496.93 -> The public key is actually exported
2498.28 -> as part of an attestation report.
2499.9 -> So now you can do things like,
I can prove that the enclave
2503.32 -> is actually what you think it is.
2505.03 -> There is an attestation
report with measurements
2507.28 -> and you can actually say
2509.38 -> these are exactly the
measurements I expect
2511.09 -> because I know exactly
what the enclave has in it
2513.22 -> in terms of an application,
2514.69 -> and now you can do secure
things inside the enclave.
2518.41 -> So let me give you an example.
2520.54 -> Here's an example of
2521.8 -> a customer doing
multi-party collaboration.
2523.84 -> So imagine a credit card
company and a retailer
2528.46 -> and they wanna basically build
2529.66 -> some kind of analytics, right?
2530.95 -> So they have customers,
2532.12 -> they wanna look at
credit card transactions
2533.71 -> and see what people are
purchasing and so on and so forth,
2535.9 -> but they don't wanna share
that data with each other,
2538.12 -> they wanna keep the data
completely separate.
2540.04 -> So what happens is they
both will write applications
2542.77 -> that will eventually go into an enclave,
2544.84 -> they will build the enclave
image with the applications,
2547.18 -> they both will review the application
2548.71 -> and agree that it's okay, it's safe,
2550.96 -> and that they're not kind
of stomping on each other.
2553.54 -> And then once they build the application,
2554.98 -> they get a set of measurements
2556.57 -> and that is the expected measurements.
2558.43 -> So when the enclave launches,
2560.08 -> it gets a secure hash measurements out,
2562.06 -> they can verify it's the same measurement.
2563.98 -> Now each one of them can
encrypt the secret data
2568.12 -> that they want to send inside the enclave
2569.74 -> with the public key's enclave.
2571.63 -> They both can send their
all individual data,
2574.12 -> that data as it goes
to the parent instance
2576.13 -> and then eventually into the enclave,
2577.42 -> can only be decrypted by the enclave
2579.1 -> 'cause nobody else has the private key.
2581.35 -> And once the data is decrypted,
2582.61 -> it can be processed by the
application in the enclave
2584.89 -> and the results can come out.
2590.08 -> I'll touch upon the
next two really quickly.
2593.35 -> We also implemented, I think
we announced this last year,
2595.96 -> we also implemented UEFI Secure Boot.
2597.79 -> I'm sure you guys know
what UEFI Secure Boot is.
2600.94 -> If you're running on premises,
2602.65 -> more recently customers have had,
2604.99 -> operating systems that actually come up.
2606.94 -> There's a secure boot
chain, it actually measures,
2610 -> it actually verifies
2611.5 -> the signature of each
stage in the boot loader
2613.87 -> and grab like operating
system boot loader and so on.
2618.58 -> And if everything's okay,
2619.57 -> that actually boots into the
operating system and so on.
2622.69 -> So the reason we implemented this
2624.49 -> was a lot of customers said,
2625.397 -> "Hey, I've got UEFI
Secure Boot on premises.
2628.12 -> How do I bring my that capability to EC2?"
2632.86 -> Same thing with Nitro TPM,
2634.313 -> a TPM is a trusted platform module.
2636.4 -> We have Nitro, we have
TPMs on Nitro Controllers
2638.8 -> that I mentioned.
2639.85 -> But for instances, when
you launch an instance,
2642.82 -> we actually expose a TPM device.
2644.62 -> And so with that TPM device,
2645.79 -> you can do things like extend measurements
2648.07 -> as part of your boot process,
2649.69 -> then you can tie to things like,
2651.01 -> you can actually encrypt your EBS volumes
2652.87 -> in addition to the encryption we do,
2654.52 -> you can use things like BitLocker
2656.08 -> or LUKS Encryption if you're using Linux,
2660.13 -> and you can tie it to
the TPM's measurements.
2664.09 -> I also wanna share this paper
actually published last week
2666.28 -> if you look at the date on it,
2667.78 -> it talks about all kinds of
details about stuff I mentioned,
2671.02 -> and this is actually a wonderful read.
2675.55 -> The last thing I wanna cover
in the last 15 or so minutes
2678.97 -> is EC2 Bare Metal instances.
2684.49 -> So the reason I wanna cover this topic is,
2688.24 -> I am in customer conversations often where
2690.94 -> customers ask me questions like,
2693.07 -> should I use Nitro or
should I use Bare Metal?
2695.8 -> And I wanna clear that up.
2698.29 -> So the whole reason we
built EC2 Bare Metal
2702.1 -> is back in 2016, VMware
came to us and said,
2707.237 -> "Hey, we've got customers
On Prem, they use VMware,
2709.63 -> they use vSphere and NSX
and and VSAN and so on,
2714.4 -> and they have tooling around,
2716.02 -> all of the control pane
APIs that VMware exposes
2719.23 -> and all the operational
muscle that they've built,
2721.57 -> but they don't wanna manage
their infrastructure."
2723.34 -> So what we wanna do is we
wanna have those customers
2725.8 -> move to a public cloud like AWS,
2727.99 -> but we don't want have to have to,
2730.57 -> have them relearn EC2 APIs
and do all of that stuff.
2735.13 -> So we sat down with them
2736.09 -> and they basically laid out a vision
2738.16 -> for a managed software defined
data center as a service.
2743.95 -> Now, if you've been
following the Nitro story
2745.96 -> I've been telling you so far,
2747.55 -> notice how we offloaded
pretty much everything
2749.38 -> to the Nitro card?
2750.52 -> We got to the point where we said,
2751.847 -> "Do we even need a hypervisor?"
2753.82 -> The only thing that the hypervisor does
2755.62 -> is it carves up memory CPUs
2758.41 -> and basically protects
the underlying platform
2760.54 -> from writes from instances, right?
2762.427 -> But we have a Nitro
Security chip for that,
2764.26 -> we don't need a hypervisor,
2765.52 -> so let's get rid of the hypervisor.
2768.01 -> And that's what Bare Metal is,
2770.116 -> it's exactly the same thing
as a virtualized instance
2772.78 -> without the hypervisor
2773.613 -> and I'll show you what
that means in a minute.
2775.27 -> But there are lots of use cases
2776.44 -> that came out of this, right?
2777.85 -> The one I mentioned where
2779.89 -> you don't have to use our
hypervisor if you don't,
2782.5 -> you can launch an EC2 Bare Metal instance
2784.72 -> and bring your own hypervisor like ESXI.
2787.87 -> Customers also use it for clear
containers if you wanna use,
2790.45 -> if you wanna build containers
that are more secure
2793.33 -> than basic containers.
2795.28 -> But the one that I like the
most is the third bullet.
2799.15 -> Even if you launch a
c524xlarge or a c6i32x large,
2805.21 -> the full instance, the
full slaughter, right?
2808.96 -> You will not get exposed
2810.88 -> or the hypervisor will not expose
2812.98 -> all the performance
monitoring counters for you,
2814.75 -> there are some that are
kind of not fully exposed.
2817.72 -> And if you're doing things like
2819.07 -> performance measurements
of your applications
2820.84 -> run near instance,
2821.95 -> you need access to performance
monitoring counters on Intel,
2824.32 -> for example, on the Intel CPU.
2825.917 -> There are three types of
counters, software counters,
2828.4 -> hardware counters and memory counters.
2830.35 -> Things like TLB misses
and page cache misses and,
2834.97 -> what are my threads doing
in terms of hotspots and,
2840.07 -> and cycles that I'm spending
on things, et cetera.
2844.06 -> Well, when you're running on Bare Metal,
2845.41 -> you are running on Bare Metal,
2846.58 -> you are literally running on the CPU,
2848.32 -> there is no hypervisor
2849.19 -> so you get exposed to all the instances.
2851.26 -> And actually Intel has a
really nice paper on this
2853.57 -> where they talk about
2854.86 -> virtualized instances with Bare Metal.
2856.39 -> But just to put it in pictures,
2859.27 -> this is what happens when you
launch a C6I4xlarge instance.
2863.11 -> It is one of, in this case three instances
2865.54 -> on the physical box.
2867.07 -> You guys have already seen this picture,
2868.54 -> the Nitro Controller, the Nitro Cards,
2870.85 -> and you happen to be one of the instances,
2872.26 -> let's say Nitro instance one,
2875.53 -> I can also answer C6i32xlarge,
2877.39 -> which is the full machine, right?
2879.43 -> I'm occupying all these CPUs,
2881.44 -> the hypervisor doesn't use anything
2883.87 -> because it's just quiescent,
it's just sitting there.
2886.36 -> But roughly the picture looks
the same as the 4xlarge,
2889.09 -> except that it's all CPUs and all memory.
2892.21 -> What happens when you launch a Bare Metal
2894.1 -> is the hypervisor disappears,
2896.26 -> it's just that.
2897.58 -> Now if you think about what I said
2898.69 -> about how an instance is launched,
2900.19 -> that's exactly what happens here.
2901.387 -> The EC2 control pane is talking
to the Nitro Controller,
2904.309 -> the Nitro Controller at some
point says, turn on the CPU,
2908.1 -> I'm exposing EBSs and
NVMe controller to BIOS,
2910.84 -> BIOS comes up and says, I
need to boot from something,
2913.33 -> there is no SSD connected to the platform,
2915.64 -> the only choice I have is
that NVMe controller I see,
2918.37 -> and it boots your AMI.
2919.93 -> That's exactly what happens when you,
2921.73 -> and if you notice, if I go back one step,
2927.25 -> notice the specs on the
32xlarge, 128 VCPUs,
2931.014 -> 256 gigabytes of memory,
50 gigabits of network,
2934.27 -> 40 gigabits of EBS, that's
exactly what metal is.
2937.9 -> So it's exactly the spin specs,
2939.76 -> in fact, it's priced exactly
the same for that reason.
2942.79 -> The only thing is you
have to pick your use case
2944.59 -> and why you want it.
2947.11 -> So just as an example, I actually
launched one last Friday,
2950.56 -> this is our sixth generation
Ice Lake based metal instance.
2954.76 -> You can see I launched a
c6i metal from the console,
2957.76 -> that's my instance ID
and that's my public IP.
2960.88 -> I SSHed into it, I booted Amazon Linux.
2966.56 -> I ran an IMDs query, it's a
c61 metal, there's 128 VCPus,
2970.78 -> roughly 256 kilobytes of memory.
2973.6 -> The one thing is
2974.433 -> when we launch virtualized
instances with our hypervisor,
2976.66 -> we only expose a handful of
devices, PCI devices, right?
2980.23 -> But when you're on Bare
Metal, you see everything.
2982.9 -> So there's a bazillion devices,
2984.34 -> you can see all kinds of Intel devices.
2987.25 -> The three that are most important are,
2989.32 -> the 80 to 50 that we emulate,
2992.29 -> the EBS 0061 device and the ENA
2995.95 -> which is what you booted from,
2997.27 -> and that's your primary network interface.
3000.42 -> Lastly, EBS is exposed as NVMe,
3003.15 -> so I just, I installed the NVMe CLI
3006.33 -> and then I ran the identify
controller command,
3008.55 -> and you can see it says it's my EBS volume
3011.22 -> and I can do LS block and C,
so it looks pretty standard.
3016.2 -> A lot of times customers
come to us and say,
3017.587 -> "Should I use virtualized 32xlarge
3019.766 -> or should I use a Bare Metal?"
3021.09 -> Well, it depends.
3024.84 -> 32xlarge is awesome.
3026.4 -> Like I said, our hypervisor is super thin,
3028.71 -> the performance of the hypervisor
is practically Bare Metal.
3031.53 -> In fact, I pulled this picture
off of a blog from 2018
3035.31 -> that compares four HPC
workloads between C5 and C5N.
3040.077 -> C5N is our high networking instance, and,
3045.24 -> sorry, compared c5n18xlarge
with our C5N Metal
3050.1 -> to show the overhead of the hypervisor.
3052.29 -> The gray bars are normalized, that's what,
3056.503 -> and the purple bars are what is,
3058.41 -> what happens when you
run on the C5N18Xlarge.
3061.26 -> You can see that the
difference is roughly 1%
3063.75 -> between the hypervisor based instance
3065.79 -> and the metal instance.
3067.95 -> And at the bottom I have
this chart that shows
3070.05 -> kind of the specs of the
c5n18Xlarge and the C5N metal,
3074.13 -> they're virtually the same.
3076.2 -> In terms of like the actual
launch of an instance,
3078.93 -> it's exactly the same APIs,
3080.4 -> it's exactly the same AMIs,
3081.78 -> it's exactly the same instance lifecycle.
3084.33 -> What I mean by that is
3085.65 -> if you SSH into your Bare Metal Instance
3086.633 -> and say sudo shut down dash -h now,
3090.42 -> it's gonna behave exactly like you expect,
3092.13 -> like a virtualized instance,
It's gonna shut down.
3094.5 -> If you say sudo reboot, it's
gonna reboot and come back up.
3097.68 -> The way you stop your instance
3098.97 -> from the EC2 control
plane is exactly the same.
3101.88 -> The SLA is a security bar because
it's all running on Nitro,
3104.91 -> it's exactly the same.
3106.86 -> And you get elasticity so
you can actually launch
3109.5 -> EC2 Bare Metal instances up
3111.57 -> and actually terminate
instances and go back down,
3113.55 -> and it's completely on demand.
3115.65 -> It's not like you're reserving
3116.67 -> a machine for yourself somewhere.
3119.34 -> So which one should you use?
3121.29 -> Well, it depends on your use case.
3122.85 -> If your use case,
3123.87 -> in fact, a lot of times
you tell customers,
3125.1 -> if you're asking us this question,
3126.54 -> chances are you don't need a metal,
3128.22 -> you're fine with virtualized.
3130.05 -> If your use case is one where
3131.91 -> you want to bring your own hypervisor
3133.23 -> or you want to do some
deep performance analysis
3135.33 -> like I said, you probably want Bare Metal.
3139.32 -> One of the pain points with Bare Metal,
3141.24 -> in case you haven't caught
it, is when you actually say,
3145.157 -> AWS space EC2 space instance
type dash C5.metal for example,
3152.13 -> is it used to take like
six to eight minutes
3154.41 -> for that instance to come up
3155.58 -> to where you can SSH into that box.
3158.1 -> And this was a huge pain
point for our customers
3160.41 -> because they're like,
3161.243 -> "Well, when I launch a
virtualized instance,
3163.26 -> it comes up in 40 seconds.
3164.76 -> How come your Bare Metal
stuff takes so long?"
3166.56 -> Well, we worked on it
3168.06 -> and because we have a Nitro Controller
3170.25 -> and because we have system BIOS
3171.66 -> or the BIOS on platform
that is owned by us,
3174.96 -> we actually implemented a protocol
3176.28 -> between the Nitro controller
and the BIOS, that thing.
3180.78 -> And so what happens is,
3182.13 -> now if you think about BIOSes, right?
3183.69 -> System BIOSes has come up and
they initialize the platform,
3187.47 -> they initialize the memory DIMs,
3189 -> they initialize PCIe,
3190.47 -> then they look for a Bootable device,
3191.91 -> they look for any kind
of disc to boot from.
3194.31 -> Well what we told BIOS is, hold on,
3196.33 -> there is no device at the moment.
3198.27 -> When I get an instance launch
3199.5 -> and an EBS volume gets
attached, I will release you,
3201.87 -> then you go scan for the PCI
bus and look for an EBS volume.
3205.38 -> And so that's exactly
what that interface does,
3207.27 -> it's able to hold BIOS at a place
3209.13 -> where it's just ready to go,
3211.35 -> and as soon as we attach
that EBS volume, we say go.
3214.2 -> And so that effectively
reduces the launch time
3217.11 -> of an EC2 Bare Metal
instance to like 40 seconds.
3221.19 -> I, my C6i metal instance that
I launched, it came up in,
3224.31 -> yeah, it came up in 40 seconds,
3225.57 -> so it was a 90% reduction in launch time.
3229.44 -> This was a fun one;
3230.85 -> in 2019, a lot of customers
were coming to us saying,
3234.247 -> "You guys have Linux and
you guys have Windows,
3236.73 -> you guys had Linux and Windows forever.
3238.98 -> When are you gonna bring
MacOS to the cloud?"
3241.56 -> And the challenge we had was,
3242.91 -> in order to bring MacOS to the cloud,
3244.98 -> MacOS will only run on
Apple branded hardware.
3248.79 -> So the challenge was,
3249.623 -> how do you bring Apple branded
hardware into the cloud?
3251.19 -> Well, we have Nitro and
I was the lead engineer,
3255.42 -> I actually built this thing.
3257.25 -> We took a standard Apple
Mac Mini, it's not emulated,
3261.36 -> it's physically, I drove
to the Apple store,
3263.67 -> bought a Mac Mini and brought it a lab.
3266.1 -> We actually connected the Nitro
controller over Thunderbolt,
3269.91 -> we connected the HDMI port
and the USB Type-C port
3272.76 -> to emulate keyboard, video and mouse.
3275.46 -> And that's what it looks like.
3278.73 -> From an instance launch
perspective, same API.
3281.61 -> You just say dash dash
instance type Mac one dot metal
3285.72 -> and you're a Bare Metal customer
running on the Mac mini,
3287.73 -> physically on the Mac Mini.
3289.41 -> There were a ton of challenges,
3290.76 -> which I won't talk about right now,
3292.95 -> but we've been in production
for about 20 months
3295.62 -> and lots and lots of customers.
3303.15 -> This is a chart that I
won't go over completely,
3305.31 -> but the point of the chart is
that in terms of elasticity,
3309.21 -> scalability, flexibility, security,
3312 -> you should think about
EC2 Bare Metal instances
3313.98 -> exactly the same as virtualized.
3316.2 -> The only differences between
virtualized and Bare Metal
3318.24 -> are those asterisks.
3319.83 -> You can obviously scale horizontally
3321.36 -> 'cause you can launch
multiple Bare Metal instances.
3323.79 -> But there aren't multiple
sizes of Bare Metal instance,
3327.99 -> it's a full slot,
3328.89 -> it's a full machine that
you're getting, right?
3331.11 -> And then there is no hypervisor.
3332.73 -> That's the only difference
3333.66 -> between virtualized and Bare Metal.
3335.61 -> And if you compare that to
sort of legacy Bare Metal,
3337.53 -> and this is where the confusion comes in,
3338.79 -> when we talk to customers
about Bare Metal,
3340.68 -> customers automatically imagine
3342.69 -> that they're gonna send us a ticket
3344.13 -> and we're gonna reserve
some machines for them
3345.75 -> in some lab somewhere and give
them a private IP address.
3348.66 -> No, it's the same API,
you launch a machine,
3351.21 -> you terminate a machine a second later,
3352.71 -> you get billed for one
second, but it's Bare Metal.
3356.94 -> And so you don't have to
like plan and procure and
3359.58 -> you don't have to sort of
compromise on the elasticity
3363.27 -> that EC2 brings.
3368.13 -> Finally, my last slide; related breakouts.
3370.44 -> There are actually some
really cool sessions on
3373.14 -> things related to Nitro
and the silicon innovations
3377.46 -> where they'll talk about
3378.293 -> Inferentia and Graviton and Trainium.
3381.69 -> I think you should go listen
to some of these things.
3384.51 -> So that's it.
3386.497 -> (audience claps)
Source: https://www.youtube.com/watch?v=jAaqfeyvvSE