|
73 | 73 | </p>
|
74 | 74 | </tr>
|
75 | 75 | <aside class="notes">
|
76 |
| -A quick one about ericsson - 40% mobile traffic, erlang, bluetooth - NOT DONE YET , need to write it - advance to next slide - |
| 76 | +If you don't mind, I'd like to tell you a few things about Ericsson. We're NOT making phones! as most of the people think .... |
| 77 | +I can tell you that no matter where you are in the world, when you are connected to a mobile network and you access the internet, there is a high chance that your traffic goes through our stuff, radio base stations, servers running ericsson software etc... |
| 78 | +40% of all mobile traffic world wide goes through our stuff. |
| 79 | + |
| 80 | +And since we are at an Openstack meetup and talking about open source, it is probably good to mention that Ericsson has given to open source Erlang (Ericsson Language, or named after a Danish mathematician, whichever you prefer) |
| 81 | +In Openstack, RabbitMQ uses Erlang. |
| 82 | +Bluetooth comes from Ericsson too ... |
77 | 83 | </aside>
|
78 | 84 | </section>
|
79 | 85 | <!–– Slide6 ––>
|
|
94 | 100 |
|
95 | 101 | Some applications require high throughput and Ericsson's EPC is one notable example.
|
96 | 102 | EPC is the equivalent of formerly used GPRS, it is there to make mobile data traffic possible. It means you traverse it when surfing the internet from your mobile, or when watching youtube, Netflix, GoT, playing Pokemon?
|
97 |
| -The monthly mobile data traffic grew close to 88% between Q4 2017 and Q4 2018, this is mainly due to the increased traffic per smartphone in China. - advance to next slide - |
| 103 | +According to Ericsson Mobility Report, the monthly mobile data traffic grew close to 88% between Q4 2017 and Q4 2018, this is mainly due to the increased traffic per smartphone in China. |
| 104 | +According to the same report, mobile traffic is 50% video today and it will increase to 75% video in 2020, driven by, amongst others, AR/VR applications. |
| 105 | + |
| 106 | +This increase in number of devices using the mobile network and the traffic generated by them, it boils down to EPC will need to handle all this traffic. |
| 107 | +How to cope with this in a performant way, well, maybe smartNICs could have the answer. |
| 108 | +gtp tunnel to EPC VMs , descapsulate traffic inside the VM |
| 109 | +- advance to next slide - |
98 | 110 | </aside>
|
99 | 111 | </section>
|
100 | 112 | <!–– Slide7 ––>
|
|
163 | 175 | What security concerns are raised with introducing a smartNIC with linux running on it. I'm looking at you, Kim!
|
164 | 176 |
|
165 | 177 | When should you use a smartNIC?
|
166 |
| -(Intel info) If on your host you use more than 4CPUs for OVS, then you should switch to using smartNICs, it makes sense from a business point of view. - advance to next slide - |
| 178 | +(Intel info) If on your host you use more than 4CPUs for OVS, then you should switch to using smartNICs, it makes sense from a business point of view. |
| 179 | +(Also, smartNIC is a good idea if you need low latency and don't care so much about migration) |
| 180 | +- advance to next slide - |
167 | 181 | </aside>
|
168 | 182 | </section>
|
169 | 183 |
|
170 | 184 | <!–– Slide10 ––>
|
171 | 185 | <section> Openstack working with SmartNICs
|
172 | 186 | <aside class="notes">
|
173 |
| -Now the question is where are we in Openstack when it comes to integrating the new coming smartNICs? |
174 |
| -Work is done in several Openstack components, like ironic and neutron of course. |
| 187 | +Now the question is where are we in Openstack when it comes to integrating the wide range of smartNICs appearing on the market? |
| 188 | +Work is done in several Openstack projects, like ironic, nova and neutron of course. |
| 189 | + |
| 190 | +For instance when it comes to neutron, we need changes in the Neutron OVS driver and Neutron OVS agent in order to bind the Neutron port for the baremetal host with the smartNIC. |
| 191 | +This is needed so that neutron ovs agent can configure the OVS running on the smartNIC. |
| 192 | + |
| 193 | +We can have neutron ovs agent running locally on the smartNIC or remotely and manages the OVS bridges for all baremetal smartNICs. |
| 194 | + |
| 195 | +In ironic |
| 196 | +Steps: |
| 197 | +(https://specs.openstack.org/openstack/neutron-specs/specs/stein/neutron-ovs-agent-support-baremetal-with-smart-nic.html) |
| 198 | +1. Create Neutron port with smart-nic vnic_type , this is done in Neutron OVS ML2 driver |
| 199 | +2. local_link_information wiht info like smartNIC hostname , port ID, ssh public key, ovsdb ssl certificate |
| 200 | + |
| 201 | +Picture on the slide with vnic-type |
| 202 | +root@cic-1:~# openstack port create |
| 203 | +usage: openstack port create [-h] [-f {json,shell,table,value,yaml}] |
| 204 | + [-c COLUMN] [--max-width <integer>] [--fit-width] |
| 205 | + [--print-empty] [--noindent] [--prefix PREFIX] |
| 206 | + --network <network> [--description <description>] |
| 207 | + [--device <device-id>] |
| 208 | + [--mac-address <mac-address>] |
| 209 | + [--device-owner <device-owner>] |
| 210 | + [--vnic-type <vnic-type>] [--host <host-id>] |
| 211 | + [--dns-name dns-name] |
| 212 | + [--fixed-ip subnet=<subnet>,ip-address=<ip-address>] |
| 213 | + [--binding-profile <binding-profile>] |
| 214 | + [--enable | --disable] [--project <project>] |
| 215 | + [--project-domain <project-domain>] |
| 216 | + [--security-group <security-group> | --no-security-group] |
| 217 | + [--qos-policy <qos-policy>] |
| 218 | + [--enable-port-security | --disable-port-security] |
| 219 | + [--allowed-address ip-address=<ip-address>[,mac-address=<mac-address>]] |
| 220 | + [--tag <tag> | --no-tag] |
| 221 | + <name> |
| 222 | +--vnic-type <vnic-type> |
| 223 | +VNIC type for this port (direct | direct-physical | macvtap | normal | baremetal, default: normal) |
| 224 | + |
| 225 | +There are many interesting questions raised, like how do you know which smartNIC hostname belongs to which server. |
| 226 | +Ovs |
| 227 | + |
| 228 | + |
| 229 | +Ironic |
| 230 | +Is Openstack ready to use smartNICs? |
| 231 | +In Openstack we need to manage the smartNICs that are running full(y fledged) operating system inside the card. |
| 232 | + |
| 233 | + |
| 234 | +Nova: |
| 235 | +The smartNICs can do packet processing inside the NIC so in order to support this hw acceleration, nova needs some changes. |
| 236 | + |
| 237 | + |
| 238 | + |
| 239 | +Openstack Cybborg |
| 240 | + |
| 241 | + |
175 | 242 | Some smartNIC vendors use native virtio driver while other use proprietary
|
176 | 243 |
|
177 | 244 | https://specs.openstack.org/openstack/nova-specs/specs/pike/implemented/netronome-smartnic-enablement.html
|
|
181 | 248 | Neutron integration with SmartNICs - TO BE ADDED
|
182 | 249 | Openstack Cyborg for integrating FPGAs with openstack - TO BE ADDED
|
183 | 250 |
|
184 |
| -Is Openstack ready to use smartNICs? |
185 |
| -In Openstack we need to manage the smartNICs that are running full(y fledged) operating system inside the card. |
186 |
| - |
| 251 | + |
187 | 252 | - advance to next slide -
|
188 | 253 | </aside>
|
189 | 254 | </section>
|
190 | 255 |
|
191 | 256 | <!–– Slide11 ––>
|
192 | 257 | <section> Performance
|
193 | 258 | <aside class="notes">
|
| 259 | + |
| 260 | + |
| 261 | +If you care about latency and packet processing performance there are a few options. |
| 262 | + |
| 263 | +We basically need to overcome the limitations in the Linux kernel which is not ideal for "lots" of packet-processing. |
| 264 | + |
| 265 | +Why is the Linux kernel a problem when we talk about latency and performance ( with performance, I mean higher throughput at a lower CPU cost)? |
| 266 | +Well, the Linux kernel is monolithic, it's millions of lines of code. |
| 267 | +It contains lots of drivers which makes the Linux kernel work with any hw, not just your specific hw/smartNIC. |
| 268 | +It allows running many applications at the same time by using a time sharing layer. Resources like CPU, mem exposed by the kernel can be shared between all the processes running. |
| 269 | + |
| 270 | +The networking stack inside the Linux kernel limits how many packets per second it can process. |
| 271 | +Too many packets per second means CPUs get busy just receiving packets, then either the packets are dropped or we CPU starve the applications. |
| 272 | + |
| 273 | +To get better performance, one can choose to bypass the kernel, fully or partially. |
| 274 | +There are several kernel bypass options like: |
| 275 | +DPDK, (that would be the poster child of kernel bypass) |
| 276 | +Snabbswitch, |
| 277 | +PF_RING, |
| 278 | +Netmap. (I am personally more familiar with DPDK.) |
| 279 | + |
| 280 | +With kernel bypass, we move the NIC to the user-space. |
| 281 | +If the NIC is managed in the user-space, it means we skip things like context switching, networking layer processing, interrupts that happen in the kernel aka IRQ storms and do the packet-processing in the user-space. |
| 282 | +This is relevant at 10Gbps already. EPC today saturates 200Gbps already. |
| 283 | + |
| 284 | +NUMA awareness together with CPU isolation needs to be considered as well if we need high performance. |
| 285 | +Remember this is particularly interesting when using smartNICs, with a dual socket system using one smartNIC plugged in on PCIe slot, corresponding to one NUMA socket. |
| 286 | + |
| 287 | +Moving to userspace means losing the abstraction level the kernel provides for e.g. hw resources, it means you need to load own driver. |
| 288 | +Moving to userspace means the kernel space is skipped together with the good stuff too like networking functionality that needs to be reimplemented now. (like the whole TCP stack) |
| 289 | + |
| 290 | + |
| 291 | +How do you move a device from kernel space to user space, in case of DPDK? |
| 292 | + |
| 293 | +echo 0000:18:00.4 > /sys/bus/pci/devices/0000\:18\:00.4/driver/unbind |
| 294 | +echo 0000:18:00.3 > /sys/bus/pci/devices/0000\:18\:00.3/driver/unbind |
| 295 | +modprobe vfio |
| 296 | +modprobe vfio_pci |
| 297 | + |
| 298 | +mkdir -p /dev/hugepages/ |
| 299 | +mount -t hugetlbfs hugetlbfs /dev/hugepages/ |
| 300 | +echo 2048 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages |
| 301 | +cat /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages |
| 302 | + |
| 303 | +modprobe uio |
| 304 | +cd $RTE_SDK |
| 305 | +insmod x86_64-native-linuxapp-gcc/kmod/igb_uio.ko |
| 306 | + |
| 307 | +./usertools/dpdk-devbind.py -b igb_uio 18:00.2 18:00.3 |
| 308 | +./usertools/dpdk-devbind.py -s |
| 309 | +cd $RTE_SDK/$RTE_TARGET/app |
| 310 | + |
| 311 | + |
| 312 | +XDP |
| 313 | +Another way to achieve high performance would be partially bypassing the Linux kernel, for example using XDP. |
| 314 | + |
| 315 | +XDP DP (eXpress Data Path) is an eBPF based high performance data path merged in the Linux kernel. |
| 316 | + |
| 317 | +XDP (eXpress Data Path) is shipped with the kernel since version 4.8 and it is enabled by default, with CONFIG_BPF_SYSCALL. |
| 318 | + |
| 319 | +What the heck is eBPF ? |
| 320 | +eBPF stands for "enhanced Berkeley Packet Filter" it's a linux kernel technology |
| 321 | + which is an in-kernel virtual machine that was originally used for to run mini-filter programs efficiently, |
| 322 | + |
| 323 | +To check if XDP it is enabled in the kernel, it's simply grepping for it in the kernel config file |
| 324 | + |
| 325 | +┌─(ecrehar@elxahkpv4m2:pts/5)────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────(~/Downloads)─┐ |
| 326 | +└─(15:09:%)── grep CONFIG_BPF_SYSCALL /boot/config-4.15.0-46-generic ──(mån,06.03)─┘ |
| 327 | +CONFIG_BPF_SYSCALL=y |
| 328 | + |
| 329 | + |
| 330 | +XDP is a hook in the Linux kernel. |
| 331 | + |
| 332 | + |
194 | 333 | Jumping between kernel space and user space cost on performance - TO BE ADDED
|
195 |
| -Mention eBPF with XDP kernel hook, DPDK etc .. TO BE ADDED |
| 334 | +Mention eBPF with XDP kernel hook, DPDK, etc .. TO BE ADDED |
196 | 335 | Native VirtIO driver benefits - TO BE ADDED
|
197 | 336 | - advance to next slide -
|
198 | 337 | </aside>
|
|
201 | 340 | <section> smartNICs with Storage
|
202 | 341 | <aside class="notes">
|
203 | 342 | smartNICs with Storage - TO BE ADDED
|
| 343 | +Using smartNICs for NVMe termination |
204 | 344 | NVMe ov TCP , Roce v2
|
205 | 345 | - advance to next slide -
|
206 | 346 | </aside>
|
|
0 commit comments