summaryrefslogtreecommitdiffstats
path: root/doc/book-enea-nfv-access-reference-guide-intel/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc/book-enea-nfv-access-reference-guide-intel/doc')
-rw-r--r--doc/book-enea-nfv-access-reference-guide-intel/doc/benchmarks.xml1488
-rw-r--r--doc/book-enea-nfv-access-reference-guide-intel/doc/book.xml30
-rw-r--r--doc/book-enea-nfv-access-reference-guide-intel/doc/container_virtualization.xml137
-rw-r--r--doc/book-enea-nfv-access-reference-guide-intel/doc/dpdk.xml115
-rw-r--r--doc/book-enea-nfv-access-reference-guide-intel/doc/eltf_params_template.xml151
-rw-r--r--doc/book-enea-nfv-access-reference-guide-intel/doc/eltf_params_updated.xml165
-rw-r--r--doc/book-enea-nfv-access-reference-guide-intel/doc/hypervisor_virtualization.xml744
-rwxr-xr-xdoc/book-enea-nfv-access-reference-guide-intel/doc/images/edit_boot_params.pngbin7833 -> 0 bytes
-rwxr-xr-xdoc/book-enea-nfv-access-reference-guide-intel/doc/images/edit_boot_params.svg213
-rw-r--r--doc/book-enea-nfv-access-reference-guide-intel/doc/images/select-linux-kernel-in-grub2-boot-loader-on-ubuntu-14.04.pngbin6403 -> 0 bytes
-rw-r--r--doc/book-enea-nfv-access-reference-guide-intel/doc/images/select-linux-kernel-in-grub2-boot-loader-on-ubuntu-14.04.svg3
-rwxr-xr-xdoc/book-enea-nfv-access-reference-guide-intel/doc/images/virtual_network_functions.pngbin82611 -> 0 bytes
-rwxr-xr-xdoc/book-enea-nfv-access-reference-guide-intel/doc/images/virtual_network_functions.svg1569
-rw-r--r--doc/book-enea-nfv-access-reference-guide-intel/doc/ostree.xml209
-rw-r--r--doc/book-enea-nfv-access-reference-guide-intel/doc/overview.xml153
-rw-r--r--doc/book-enea-nfv-access-reference-guide-intel/doc/ovs.xml161
-rw-r--r--doc/book-enea-nfv-access-reference-guide-intel/doc/using_nfv_access_sdks.xml549
17 files changed, 0 insertions, 5687 deletions
diff --git a/doc/book-enea-nfv-access-reference-guide-intel/doc/benchmarks.xml b/doc/book-enea-nfv-access-reference-guide-intel/doc/benchmarks.xml
deleted file mode 100644
index 4063515..0000000
--- a/doc/book-enea-nfv-access-reference-guide-intel/doc/benchmarks.xml
+++ /dev/null
@@ -1,1488 +0,0 @@
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
3"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
4<chapter condition="hidden" id="benchmarks">
5 <title>Benchmarks</title>
6
7 <section id="hw-setup">
8 <title>Hardware Setup</title>
9
10 <para>The following table describes all the needed prequisites for an apt
11 hardware setup:</para>
12
13 <table>
14 <title>Hardware Setup</title>
15
16 <tgroup cols="2">
17 <colspec align="left" />
18
19 <thead>
20 <row>
21 <entry align="center">Item</entry>
22
23 <entry align="center">Description</entry>
24 </row>
25 </thead>
26
27 <tbody>
28 <row>
29 <entry align="left">Server Platform</entry>
30
31 <entry align="left">Supermicro X10SDV-4C-TLN2F
32 http://www.supermicro.com/products/motherboard/xeon/d/X10SDV-4C-TLN2F.cfm</entry>
33 </row>
34
35 <row>
36 <entry align="left">ARCH</entry>
37
38 <entry>x86-64</entry>
39 </row>
40
41 <row>
42 <entry align="left">Processor</entry>
43
44 <entry>1 x Intel Xeon D-1521 (Broadwell), 4 cores, 8
45 hyper-threaded cores per processor</entry>
46 </row>
47
48 <row>
49 <entry align="left">CPU freq</entry>
50
51 <entry>2.40 GHz</entry>
52 </row>
53
54 <row>
55 <entry align="left">RAM</entry>
56
57 <entry>16GB</entry>
58 </row>
59
60 <row>
61 <entry align="left">Network</entry>
62
63 <entry>Dual integrated 10G ports</entry>
64 </row>
65
66 <row>
67 <entry align="left">Storage</entry>
68
69 <entry>Samsung 850 Pro 128GB SSD</entry>
70 </row>
71 </tbody>
72 </tgroup>
73 </table>
74
75 <para>Generic tests configuration:</para>
76
77 <itemizedlist>
78 <listitem>
79 <para>All tests use one port, one core and one Rx/TX queue for fast
80 path traffic.</para>
81 </listitem>
82 </itemizedlist>
83 </section>
84
85 <section condition="hidden" id="use-cases">
86 <title>Use Cases</title>
87
88 <section id="docker-benchmarks">
89 <title>Docker related benchmarks</title>
90
91 <section id="fwd_traffic_dock">
92 <title>Forward traffic in Docker</title>
93
94 <para>Benchmarking traffic forwarding using testpmd in a Docker
95 container.</para>
96
97 <para>Pktgen is used to generate UDP traffic that will reach testpmd,
98 running in a Docker image. It will then be forwarded back to source on
99 the return trip (<emphasis role="bold">Forwarding</emphasis>).</para>
100
101 <para>This test measures:</para>
102
103 <itemizedlist>
104 <listitem>
105 <para>pktgen TX, RX in packets per second (pps) and Mbps</para>
106 </listitem>
107
108 <listitem>
109 <para>testpmd TX, RX in packets per second (pps)</para>
110 </listitem>
111
112 <listitem>
113 <para>divide testpmd RX / pktgen TX in pps to obtain throughput in
114 percentages (%)</para>
115 </listitem>
116 </itemizedlist>
117
118 <section id="usecase-one">
119 <title>Test Setup for Target 1</title>
120
121 <para>Start by following the steps below:</para>
122
123 <para>SSD boot using the following <literal>grub.cfg</literal>
124 entry: <programlisting>linux (hd0,gpt3)/boot/bzImage root=/dev/sda3 ip=dhcp nohz_full=1-7 /
125isolcpus=1-7 rcu-nocbs=1-7 rcu_nocb_poll intel_pstate=disable /
126clocksource=tsc tsc=reliable nohpet nosoftlockup intel_idle.max_cstate=0 /
127processor.max_cstate=0 mce=ignore_ce audit=0 nmi_watchdog=0 iommu=pt /
128intel_iommu=on hugepagesz=1GB hugepages=8 default_hugepagesz=1GB /
129hugepagesz=2M hugepages=2048 vfio_iommu_type1.allow_unsafe_interrupts=1</programlisting></para>
130
131 <para>Kill unnecessary services:<programlisting>killall ovsdb-server ovs-vswitchd
132rm -rf /etc/openvswitch/*
133mkdir -p /var/run/openvswitch</programlisting>Mount hugepages and configure
134 DPDK:<programlisting>mkdir -p /mnt/huge
135mount -t hugetlbfs nodev /mnt/huge
136modprobe igb_uio
137dpdk-devbind --bind=igb_uio 0000:03:00.0</programlisting>Run
138 pktgen:<programlisting>cd /usr/share/apps/pktgen/
139./pktgen -c 0xF -n 1 -- -P -m "[3:2].0"</programlisting>In the pktgen console
140 run:<programlisting>str</programlisting>To change framesize for
141 pktgen, from [64, 128, 256, 512]:<programlisting>set 0 size &amp;lt;number&amp;gt;</programlisting></para>
142 </section>
143
144 <section id="usecase-two">
145 <title>Test Setup for Target 2</title>
146
147 <para>Start by following the steps below:</para>
148
149 <para>SSD boot using the following <literal>grub.cfg</literal>
150 entry:</para>
151
152 <programlisting>linux (hd0,gpt3)/boot/bzImage root=/dev/sda3 ip=dhcp nohz_full=1-7 /
153isolcpus=1-7 rcu-nocbs=1-7 rcu_nocb_poll intel_pstate=disable /
154clocksource=tsc tsc=reliable nohpet nosoftlockup intel_idle.max_cstate=0 /
155processor.max_cstate=0 mce=ignore_ce audit=0 nmi_watchdog=0 iommu=pt /
156intel_iommu=on hugepagesz=1GB hugepages=8 default_hugepagesz=1GB /
157hugepagesz=2M hugepages=2048 vfio_iommu_type1.allow_unsafe_interrupts=1</programlisting>
158
159 <para>It is expected to have Docker/guest image on target. Configure
160 the OVS bridge:<programlisting># OVS old config clean-up
161killall ovsdb-server ovs-vswitchd
162rm -rf /etc/openvswitch/*
163mkdir -p /var/run/openvswitch
164
165# Mount hugepages and bind interfaces to dpdk
166mkdir -p /mnt/huge
167mount -t hugetlbfs nodev /mnt/huge
168modprobe igb_uio
169dpdk-devbind --bind=igb_uio 0000:03:00.0
170
171# configure openvswitch with DPDK
172export DB_SOCK=/var/run/openvswitch/db.sock
173ovsdb-tool create /etc/openvswitch/conf.db /
174/usr/share/openvswitch/vswitch.ovsschema
175ovsdb-server --remote=punix:$DB_SOCK /
176--remote=db:Open_vSwitch,Open_vSwitch,manager_options --pidfile --detach
177ovs-vsctl --no-wait init
178ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-lcore-mask=0x10
179ovs-vsctl --no-wait set Open_vSwitch . other_config:pmd-cpu-mask=0xc
180ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-socket-mem=2048
181ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true
182ovs-vswitchd unix:$DB_SOCK --pidfile --detach /
183--log-file=/var/log/openvswitch/ovs-vswitchd.log
184
185ovs-vsctl add-br ovsbr0 -- set bridge ovsbr0 datapath_type=netdev
186ovs-vsctl add-port ovsbr0 vhost-user1 /
187-- set Interface vhost-user1 type=dpdkvhostuser ofport_request=1
188ovs-vsctl add-port ovsbr0 dpdk0 -- set Interface /
189dpdk0 type=dpdk options:dpdk-devargs=0000:03:00.0 ofport_request=2
190
191# configure static flows
192ovs-ofctl del-flows ovsbr0
193ovs-ofctl add-flow ovsbr0 in_port=1,action=output:2
194ovs-ofctl add-flow ovsbr0 in_port=2,action=output:1</programlisting>Import a
195 Docker container:<programlisting>docker import enea-nfv-access-guest-qemux86-64.tar.gz el7_guest</programlisting>Start
196 the Docker container:<programlisting>docker run -it --rm -v /var/run/openvswitch/:/var/run/openvswitch/ /
197-v /mnt/huge:/mnt/huge el7_guest /bin/bash</programlisting>Start the testpmd
198 application in Docker:<programlisting>testpmd -c 0x30 -n 2 --file-prefix prog1 --socket-mem 512 --no-pci /
199--vdev=virtio_user0,path=/var/run/openvswitch/vhost-user1 /
200/usr/lib/librte_pmd_virtio.so.1.1 -- --burst 64 /
201--disable-rss -i --portmask=0x1 --coremask=0x20 --nb-cores=1 /
202--rxq=1 --txq=1 --txd=512 --rxd=512 --port-topology=chained</programlisting>To
203 start traffic <emphasis role="bold">forwarding</emphasis>, run the
204 following command in testpmd CLI:<programlisting>start</programlisting>To
205 start traffic but in <emphasis role="bold">termination</emphasis>
206 mode (no traffic sent on TX), run following command in testpmd
207 CLI:<programlisting>set fwd rxonly
208start</programlisting><table>
209 <title>Results in forwarding mode</title>
210
211 <tgroup cols="8">
212 <tbody>
213 <row>
214 <entry align="center"><emphasis
215 role="bold">Bytes</emphasis></entry>
216
217 <entry align="center"><emphasis role="bold">pktgen pps
218 TX</emphasis></entry>
219
220 <entry align="center"><emphasis role="bold">pktgen MBits/s
221 TX</emphasis></entry>
222
223 <entry align="center"><emphasis role="bold">pktgen pps
224 RX</emphasis></entry>
225
226 <entry align="center"><emphasis role="bold">pktgen MBits/s
227 RX</emphasis></entry>
228
229 <entry align="center"><emphasis role="bold">testpmd pps
230 RX</emphasis></entry>
231
232 <entry align="center"><emphasis role="bold">testpmd pps
233 TX</emphasis></entry>
234
235 <entry align="center"><emphasis role="bold">throughput
236 (%)</emphasis></entry>
237 </row>
238
239 <row>
240 <entry role="bold"><emphasis
241 role="bold">64</emphasis></entry>
242
243 <entry>14877658</entry>
244
245 <entry>9997</entry>
246
247 <entry>7832352</entry>
248
249 <entry>5264</entry>
250
251 <entry>7831250</entry>
252
253 <entry>7831250</entry>
254
255 <entry>52,65%</entry>
256 </row>
257
258 <row>
259 <entry><emphasis role="bold">128</emphasis></entry>
260
261 <entry>8441305</entry>
262
263 <entry>9994</entry>
264
265 <entry>7533893</entry>
266
267 <entry>8922</entry>
268
269 <entry>7535127</entry>
270
271 <entry>7682007</entry>
272
273 <entry>89,27%</entry>
274 </row>
275
276 <row>
277 <entry role="bold"><emphasis
278 role="bold">256</emphasis></entry>
279
280 <entry>4528831</entry>
281
282 <entry>9999</entry>
283
284 <entry>4528845</entry>
285
286 <entry>9999</entry>
287
288 <entry>4528738</entry>
289
290 <entry>4528738</entry>
291
292 <entry>100%</entry>
293 </row>
294 </tbody>
295 </tgroup>
296 </table><table>
297 <title>Results in termination mode</title>
298
299 <tgroup cols="4">
300 <tbody>
301 <row>
302 <entry align="center"><emphasis
303 role="bold">Bytes</emphasis></entry>
304
305 <entry align="center"><emphasis role="bold">pktgen pps
306 TX</emphasis></entry>
307
308 <entry align="center"><emphasis role="bold">testpmd pps
309 RX</emphasis></entry>
310
311 <entry align="center"><emphasis role="bold">throughput
312 (%)</emphasis></entry>
313 </row>
314
315 <row>
316 <entry role="bold"><emphasis
317 role="bold">64</emphasis></entry>
318
319 <entry>14877775</entry>
320
321 <entry>8060974</entry>
322
323 <entry>54,1%</entry>
324 </row>
325
326 <row>
327 <entry><emphasis role="bold">128</emphasis></entry>
328
329 <entry>8441403</entry>
330
331 <entry>8023555</entry>
332
333 <entry>95,0%</entry>
334 </row>
335
336 <row>
337 <entry role="bold"><emphasis
338 role="bold">256</emphasis></entry>
339
340 <entry>4528864</entry>
341
342 <entry>4528840</entry>
343
344 <entry>99,9%</entry>
345 </row>
346 </tbody>
347 </tgroup>
348 </table></para>
349 </section>
350 </section>
351
352 <section id="usecase-three-four">
353 <title>Forward traffic from Docker to another Docker on the same
354 host</title>
355
356 <para>Benchmark a combo test using testpmd running in two Docker
357 instances, one which Forwards traffic to the second one, which
358 Terminates it.</para>
359
360 <para>Packets are generated with pktgen and TX-d to the first testpmd,
361 which will RX and Forward them to the second testpmd, which will RX
362 and terminate them.</para>
363
364 <para>Measurements are made in:</para>
365
366 <itemizedlist>
367 <listitem>
368 <para>pktgen TX in pps and Mbits/s</para>
369 </listitem>
370
371 <listitem>
372 <para>testpmd TX and RX pps in Docker1</para>
373 </listitem>
374
375 <listitem>
376 <para>testpmd RX pps in Docker2</para>
377 </listitem>
378 </itemizedlist>
379
380 <para>Throughput found as a percent, by dividing Docker2 <emphasis
381 role="bold">testpmd RX pps</emphasis> by <emphasis role="bold">pktgen
382 TX pps</emphasis>.</para>
383
384 <section id="target-one-usecase-three">
385 <title>Test Setup for Target 1</title>
386
387 <para>Start by following the steps below:</para>
388
389 <para>SSD boot using the following <literal>grub.cfg</literal>
390 entry:</para>
391
392 <programlisting>linux (hd0,gpt3)/boot/bzImage root=/dev/sda3 ip=dhcp nohz_full=1-7 /
393isolcpus=1-7 rcu-nocbs=1-7 rcu_nocb_poll intel_pstate=disable /
394clocksource=tsc tsc=reliable nohpet nosoftlockup intel_idle.max_cstate=0 /
395processor.max_cstate=0 mce=ignore_ce audit=0 nmi_watchdog=0 iommu=pt /
396intel_iommu=on hugepagesz=1GB hugepages=8 default_hugepagesz=1GB /
397hugepagesz=2M hugepages=2048 vfio_iommu_type1.allow_unsafe_interrupts=1</programlisting>
398
399 <para>Configure DPDK:<programlisting>mkdir -p /mnt/huge
400mount -t hugetlbfs nodev /mnt/huge
401modprobe igb_uio
402dpdk-devbind --bind=igb_uio 0000:03:00.0</programlisting>Run
403 pktgen:<programlisting>cd /usr/share/apps/pktgen/
404./pktgen -c 0xF -n 1 -- -P -m "[3:2].0"</programlisting>Choose one of the
405 values from [64, 128, 256, 512] to change the packet
406 size:<programlisting>set 0 size &lt;number&gt;</programlisting></para>
407 </section>
408
409 <section id="target-two-usecase-four">
410 <title>Test Setup for Target 2</title>
411
412 <para>Start by following the steps below:</para>
413
414 <para>SSD boot using the following <literal>grub.cfg</literal>
415 entry:</para>
416
417 <programlisting>linux (hd0,gpt3)/boot/bzImage root=/dev/sda3 ip=dhcp nohz_full=1-7 /
418isolcpus=1-7 rcu-nocbs=1-7 rcu_nocb_poll intel_pstate=disable /
419clocksource=tsc tsc=reliable nohpet nosoftlockup intel_idle.max_cstate=0 /
420processor.max_cstate=0 mce=ignore_ce audit=0 nmi_watchdog=0 /
421iommu=pt intel_iommu=on hugepagesz=1GB hugepages=8 default_hugepagesz=1GB /
422hugepagesz=2M hugepages=2048 vfio_iommu_type1.allow_unsafe_interrupts=1</programlisting>
423
424 <para><programlisting>killall ovsdb-server ovs-vswitchd
425rm -rf /etc/openvswitch/*
426mkdir -p /var/run/openvswitch</programlisting>Configure DPDK:<programlisting>mkdir -p /mnt/huge
427mount -t hugetlbfs nodev /mnt/huge
428modprobe igb_uio
429dpdk-devbind --bind=igb_uio 0000:03:00.0</programlisting>Configure the OVS
430 bridge:<programlisting>export DB_SOCK=/var/run/openvswitch/db.sock
431ovsdb-tool create /etc/openvswitch/conf.db /
432/usr/share/openvswitch/vswitch.ovsschema
433ovsdb-server --remote=punix:$DB_SOCK /
434--remote=db:Open_vSwitch,Open_vSwitch,manager_options --pidfile --detach
435ovs-vsctl --no-wait init
436ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-lcore-mask=0x10
437ovs-vsctl --no-wait set Open_vSwitch . other_config:pmd-cpu-mask=0xcc
438ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-socket-mem=2048
439ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true
440ovs-vswitchd unix:$DB_SOCK --pidfile --detach /
441--log-file=/var/log/openvswitch/ovs-vswitchd.log
442ovs-vsctl add-br ovsbr0 -- set bridge ovsbr0 datapath_type=netdev
443ovs-vsctl add-port ovsbr0 vhost-user1 -- set Interface /
444vhost-user1 type=dpdkvhostuser ofport_request=1
445ovs-vsctl add-port ovsbr0 vhost-user2 -- set Interface /
446vhost-user2 type=dpdkvhostuser ofport_request=2
447ovs-vsctl add-port ovsbr0 dpdk0 -- set Interface dpdk0 /
448type=dpdk options:dpdk-devargs=0000:03:00.0 ofport_request=3
449ovs-ofctl del-flows ovsbr0
450ovs-ofctl add-flow ovsbr0 in_port=3,action=output:2
451ovs-ofctl add-flow ovsbr0 in_port=2,action=output:1</programlisting>Import a
452 Docker container:<programlisting>docker import enea-nfv-access-guest-qemux86-64.tar.gz el7_guest</programlisting>Start
453 the first Docker:<programlisting>docker run -it --rm --cpuset-cpus=4,5 /
454-v /var/run/openvswitch/:/var/run/openvswitch/ /
455-v /mnt/huge:/mnt/huge el7_guest /bin/bash</programlisting>Start the testpmd
456 application in Docker1:<programlisting>testpmd -c 0x30 -n 2 --file-prefix prog1 --socket-mem 512 --no-pci /
457--vdev=virtio_user0,path=/var/run/openvswitch/vhost-user1 /
458/usr/lib/librte_pmd_virtio.so.1.1 -- --burst 64 /
459--disable-rss -i --portmask=0x1 --coremask=0x20 --nb-cores=1 /
460--rxq=1 --txq=1 --txd=512 --rxd=512 --port-topology=chained</programlisting>Configure
461 it in termination mode:<programlisting>set fwd rxonly</programlisting>Run
462 the testpmd application:<programlisting>start</programlisting>Open a
463 new console to the host and start the second Docker
464 instance:<programlisting>docker run -it --rm --cpuset-cpus=0,1 -v /var/run/openvswitch/:/var/run/openvswitch/ /
465-v /mnt/huge:/mnt/huge el7_guest /bin/bash</programlisting>In the second
466 container start testpmd:<programlisting>testpmd -c 0x0F --file-prefix prog2 --socket-mem 512 --no-pci /
467--vdev=virtio_user0,path=/var/run/openvswitch/vhost-user2 /
468/usr/lib/librte_pmd_virtio.so.1.1 -- -i</programlisting>Run the TestPmd
469 application in the second Docker:<programlisting>testpmd -c 0x3 -n 2 --file-prefix prog2 --socket-mem 512 --no-pci /
470--vdev=virtio_user0,path=/var/run/openvswitch/vhost-user2 /
471/usr/lib/librte_pmd_virtio.so.1.1 -- --burst 64 /
472--disable-rss -i --portmask=0x1 --coremask=0x2 --nb-cores=1 --rxq=1 /
473--txq=1 --txd=512 --rxd=512 --port-topology=chained</programlisting>In the
474 testpmd shell, run:<programlisting>start</programlisting>Start
475 pktgen traffic by running the following command in pktgen
476 CLI:<programlisting>start 0</programlisting>To record traffic
477 results:<programlisting>show port stats 0</programlisting>This
478 should be used in testpmd applications.</para>
479
480 <table>
481 <title>Results</title>
482
483 <tgroup cols="5">
484 <tbody>
485 <row>
486 <entry align="center"><emphasis
487 role="bold">Bytes</emphasis></entry>
488
489 <entry align="center"><emphasis role="bold">Target 1 -
490 pktgen pps TX</emphasis></entry>
491
492 <entry align="center"><emphasis role="bold">Target 2 -
493 (forwarding) testpmd pps RX</emphasis></entry>
494
495 <entry align="center"><emphasis role="bold">Target 2 -
496 (forwarding) testpmd pps TX</emphasis></entry>
497
498 <entry align="center"><emphasis role="bold">Target 2 -
499 (termination) testpmd pps RX</emphasis></entry>
500 </row>
501
502 <row>
503 <entry role="bold"><emphasis
504 role="bold">64</emphasis></entry>
505
506 <entry>14877713</entry>
507
508 <entry>5031270</entry>
509
510 <entry>5031214</entry>
511
512 <entry>5031346</entry>
513 </row>
514
515 <row>
516 <entry><emphasis role="bold">128</emphasis></entry>
517
518 <entry>8441271</entry>
519
520 <entry>4670165</entry>
521
522 <entry>4670165</entry>
523
524 <entry>4670261</entry>
525 </row>
526
527 <row>
528 <entry role="bold"><emphasis
529 role="bold">256</emphasis></entry>
530
531 <entry>4528844</entry>
532
533 <entry>4490268</entry>
534
535 <entry>4490268</entry>
536
537 <entry>4490234</entry>
538 </row>
539
540 <row>
541 <entry><emphasis role="bold">512</emphasis></entry>
542
543 <entry>2349458</entry>
544
545 <entry>2349553</entry>
546
547 <entry>2349553</entry>
548
549 <entry>2349545</entry>
550 </row>
551 </tbody>
552 </tgroup>
553 </table>
554 </section>
555 </section>
556
557 <section id="pxe-config-docker">
558 <title>SR-IOV in in Docker</title>
559
560 <para>PCI passthrough tests using pktgen and testpmd in Docker.</para>
561
562 <para>pktgen[DPDK]Docker - PHY - Docker[DPDK] testpmd</para>
563
564 <para>Measurements:</para>
565
566 <itemizedlist>
567 <listitem>
568 <para>RX packets per second in testpmd (with testpmd configured in
569 rxonly mode).</para>
570 </listitem>
571 </itemizedlist>
572
573 <section id="target-setup">
574 <title>Test Setup</title>
575
576 <para>Boot Enea NFV Access from SSD:<programlisting>linux (hd0,gpt3)/boot/bzImage root=/dev/sda3 ip=dhcp nohz_full=1-7 /
577isolcpus=1-7 rcu-nocbs=1-7 rcu_nocb_poll intel_pstate=disable clocksource=tsc /
578tsc=reliable nohpet nosoftlockup intel_idle.max_cstate=0 processor.max_cstate=0 /
579mce=ignore_ce audit=0 nmi_watchdog=0 iommu=pt intel_iommu=on hugepagesz=1GB /
580hugepages=8 default_hugepagesz=1GB hugepagesz=2M hugepages=2048 /
581vfio_iommu_type1.allow_unsafe_interrupts=1l</programlisting>Allow unsafe
582 interrupts:<programlisting>echo 1 &gt; /sys/module/vfio_iommu_type1/parameters/allow_unsafe_interrupts</programlisting>Configure
583 DPDK:<programlisting>mkdir -p /mnt/huge
584mount -t hugetlbfs nodev /mnt/huge
585dpdk-devbind.py --bind=ixgbe 0000:03:00.0
586ifconfig eno3 192.168.1.2
587echo 2 &gt; /sys/class/net/eno3/device/sriov_numvfs
588modprobe vfio-pci
589dpdk-devbind.py --bind=vfio-pci 0000:03:10.0
590dpdk-devbind.py --bind=vfio-pci 0000:03:10.2</programlisting>Start two docker
591 containers:<programlisting>docker run --privileged -it --rm -v /mnt/huge:/mnt/huge/ /
592--device /dev/vfio/vfio el7_guest /bin/bash
593docker run --privileged -it --rm -v /mnt/huge:/mnt/huge/ /
594--device /dev/vfio/vfio el7_guest /bin/bash</programlisting>In the first
595 container start pktgen:<programlisting>cd /usr/share/apps/pktgen/
596./pktgen -c 0x1f -w 0000:03:10.0 -n 1 --file-prefix pg1 /
597--socket-mem 1024 -- -P -m "[3:4].0"</programlisting>In the pktgen prompt set
598 the destination MAC address:<programlisting>set mac 0 XX:XX:XX:XX:XX:XX
599str</programlisting>In the second container start testpmd:<programlisting>testpmd -c 0x7 -n 1 -w 0000:03:10.2 -- -i --portmask=0x1 /
600--txd=256 --rxd=256 --port-topology=chained</programlisting>In the testpmd
601 prompt set <emphasis role="bold">forwarding</emphasis>
602 rxonly:<programlisting>set fwd rxonly
603start</programlisting><table>
604 <title>Results</title>
605
606 <tgroup cols="5">
607 <tbody>
608 <row>
609 <entry align="center"><emphasis
610 role="bold">Bytes</emphasis></entry>
611
612 <entry align="center"><emphasis role="bold">pktgen pps
613 TX</emphasis></entry>
614
615 <entry align="center"><emphasis role="bold">testpmd pps
616 RX</emphasis></entry>
617
618 <entry align="center"><emphasis role="bold">pktgen MBits/s
619 TX</emphasis></entry>
620
621 <entry align="center"><emphasis role="bold">throughput
622 (%)</emphasis></entry>
623 </row>
624
625 <row>
626 <entry role="bold"><emphasis
627 role="bold">64</emphasis></entry>
628
629 <entry>14204211</entry>
630
631 <entry>14204561</entry>
632
633 <entry>9545</entry>
634
635 <entry>100</entry>
636 </row>
637
638 <row>
639 <entry><emphasis role="bold">128</emphasis></entry>
640
641 <entry>8440340</entry>
642
643 <entry>8440201</entry>
644
645 <entry>9993</entry>
646
647 <entry>99.9</entry>
648 </row>
649
650 <row>
651 <entry role="bold"><emphasis
652 role="bold">256</emphasis></entry>
653
654 <entry>4533828</entry>
655
656 <entry>4533891</entry>
657
658 <entry>10010</entry>
659
660 <entry>100</entry>
661 </row>
662
663 <row>
664 <entry><emphasis role="bold">512</emphasis></entry>
665
666 <entry>2349886</entry>
667
668 <entry>2349715</entry>
669
670 <entry>10000</entry>
671
672 <entry>99.9</entry>
673 </row>
674 </tbody>
675 </tgroup>
676 </table></para>
677 </section>
678 </section>
679 </section>
680
681 <section id="vm-benchmarks">
682 <title>VM related benchmarks</title>
683
684 <section id="usecase-four">
685 <title>Forward/termination traffic in one VM</title>
686
687 <para>Benchmarking traffic (UDP) forwarding and termination using
688 testpmd in a virtual machine.</para>
689
690 <para>The Pktgen application is used to generate traffic that will
691 reach testpmd running on a virtual machine, and be forwarded back to
692 source on the return trip. With the same setup a second measurement
693 will be done with traffic termination in the virtual machine.</para>
694
695 <para>This test case measures:</para>
696
697 <itemizedlist>
698 <listitem>
699 <para>pktgen TX, RX in packets per second (pps) and Mbps</para>
700 </listitem>
701
702 <listitem>
703 <para>testpmd TX, RX in packets per second (pps)</para>
704 </listitem>
705
706 <listitem>
707 <para>divide <emphasis role="bold">testpmd RX</emphasis> by
708 <emphasis role="bold">pktgen TX</emphasis> in pps to obtain the
709 throughput in percentages (%)</para>
710 </listitem>
711 </itemizedlist>
712
713 <section id="targetone-usecasefour">
714 <title>Test Setup for Target 1</title>
715
716 <para>Start with the steps below:</para>
717
718 <para>SSD boot using the following <literal>grub.cfg
719 </literal>entry: <programlisting>linux (hd0,gpt3)/boot/bzImage root=/dev/sda3 ip=dhcp nohz_full=1-7 /
720isolcpus=1-7 rcu-nocbs=1-7 rcu_nocb_poll intel_pstate=disable /
721clocksource=tsc tsc=reliable nohpet nosoftlockup intel_idle.max_cstate=0 /
722processor.max_cstate=0 mce=ignore_ce audit=0 nmi_watchdog=0 iommu=pt /
723intel_iommu=on hugepagesz=1GB hugepages=8 default_hugepagesz=1GB /
724hugepagesz=2M hugepages=2048 vfio_iommu_type1.allow_unsafe_interrupts=1</programlisting></para>
725
726 <para>Kill unnecessary services: <programlisting>killall ovsdb-server ovs-vswitchd
727rm -rf /etc/openvswitch/*
728mkdir -p /var/run/openvswitch</programlisting>Configure DPDK:<programlisting>mkdir -p /mnt/huge
729mount -t hugetlbfs nodev /mnt/huge
730modprobe igb_uio
731dpdk-devbind --bind=igb_uio 0000:03:00.0</programlisting>Run
732 pktgen:<programlisting>cd /usr/share/apps/pktgen/
733./pktgen -c 0x7 -n 4 --proc-type auto --socket-mem 256 /
734-w 0000:03:00.0 -- -P -m "[1:2].0"</programlisting>Set pktgen frame size to
735 use from [64, 128, 256, 512]:<programlisting>set 0 size 64</programlisting></para>
736 </section>
737
738 <section id="targettwo-usecasefive">
739 <title>Test Setup for Target 2</title>
740
741 <para>Start by following the steps below:</para>
742
743 <para>SSD boot using the following <literal>grub.cfg</literal>
744 entry: <programlisting>linux (hd0,gpt3)/boot/bzImage root=/dev/sda3 ip=dhcp nohz_full=1-7 /
745isolcpus=1-7 rcu-nocbs=1-7 rcu_nocb_poll intel_pstate=disable /
746clocksource=tsc tsc=reliable nohpet nosoftlockup intel_idle.max_cstate=0 /
747processor.max_cstate=0 mce=ignore_ce audit=0 nmi_watchdog=0 iommu=pt /
748intel_iommu=on hugepagesz=1GB hugepages=8 default_hugepagesz=1GB /
749hugepagesz=2M hugepages=2048 vfio_iommu_type1.allow_unsafe_interrupts=1</programlisting>Kill
750 unnecessary services: <programlisting>killall ovsdb-server ovs-vswitchd
751rm -rf /etc/openvswitch/*
752mkdir -p /var/run/openvswitch</programlisting>Configure DPDK:<programlisting>mkdir -p /mnt/huge
753mount -t hugetlbfs nodev /mnt/huge
754modprobe igb_uio
755dpdk-devbind --bind=igb_uio 0000:03:00.0</programlisting>Configure
756 OVS:<programlisting>export DB_SOCK=/var/run/openvswitch/db.sock
757ovsdb-tool create /etc/openvswitch/conf.db /
758/usr/share/openvswitch/vswitch.ovsschema
759ovsdb-server --remote=punix:$DB_SOCK /
760--remote=db:Open_vSwitch,Open_vSwitch,manager_options --pidfile --detach
761ovs-vsctl --no-wait init
762ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-lcore-mask=0x10
763ovs-vsctl --no-wait set Open_vSwitch . other_config:pmd-cpu-mask=0xc
764ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-socket-mem=2048
765ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true
766ovs-vswitchd unix:$DB_SOCK --pidfile --detach /
767--log-file=/var/log/openvswitch/ovs-vswitchd.log
768
769ovs-vsctl add-br ovsbr0 -- set bridge ovsbr0 datapath_type=netdev
770ovs-vsctl add-port ovsbr0 vhost-user1 /
771-- set Interface vhost-user1 type=dpdkvhostuser -- set Interface /
772vhost-user1 ofport_request=2
773ovs-vsctl add-port ovsbr0 dpdk0 -- set Interface dpdk0 /
774type=dpdk options:dpdk-devargs=0000:03:00.0 /
775-- set Interface dpdk0 ofport_request=1
776chmod 777 /var/run/openvswitch/vhost-user1
777
778ovs-ofctl del-flows ovsbr0
779ovs-ofctl add-flow ovsbr0 in_port=1,action=output:2
780ovs-ofctl add-flow ovsbr0 in_port=2,action=output:1</programlisting>Launch
781 QEMU:<programlisting>taskset -c 0,1 qemu-system-x86_64 -cpu host,+invtsc,migratable=no /
782-M q35 -smp cores=2,sockets=1 -vcpu 0,affinity=0 -vcpu 1,affinity=1 /
783-enable-kvm -nographic -realtime mlock=on -kernel /mnt/qemu/bzImage /
784-drive file=/mnt/qemu/enea-nfv-access-guest-qemux86-64.ext4,/
785if=virtio,format=raw -m 4096 -object memory-backend-file,id=mem,/
786size=4096M,mem-path=/mnt/huge,share=on -numa node,memdev=mem /
787-mem-prealloc -chardev socket,id=char0,path=/var/run/openvswitch/vhost-user1 /
788-netdev type=vhost-user,id=mynet1,chardev=char0,vhostforce /
789-device virtio-net-pci,mac=52:54:00:00:00:01,netdev=mynet1,/
790mrg_rxbuf=on,rx_queue_size=1024,csum=off,gso=off,guest_tso4=off,/
791guest_tso6=off,guest_ecn=off -append 'root=/dev/vda console=ttyS0 /
792hugepagesz=2M hugepages=1024 isolcpus=1 nohz_full=1 rcu_nocbs=1 /
793irqaffinity=0 rcu_nocb_poll intel_pstate=disable intel_idle.max_cstate=0 /
794processor.max_cstate=0 mce=ignore_ce audit=0'</programlisting>Inside QEMU,
795 configure DPDK: <programlisting>mkdir -p /mnt/huge
796mount -t hugetlbfs nodev /mnt/huge
797modprobe igb_uio
798dpdk-devbind --bind=igb_uio 0000:00:02.0</programlisting>Inside QEMU, run
799 testpmd: <programlisting>testpmd -c 0x3 -n 2 librte_pmd_virtio.so.1.1 /
800-- --burst 64 --disable-rss -i --portmask=0x1 /
801--coremask=0x2 --nb-cores=1 --rxq=1 --txq=1 --txd=512 --rxd=512 /
802--port-topology=chained</programlisting>For the <emphasis
803 role="bold">Forwarding test</emphasis>, start testpmd
804 directly:<programlisting>start</programlisting>For the <emphasis
805 role="bold">Termination test</emphasis>, set testpmd to only
806 receive, then start it:<programlisting>set fwd rxonly
807start</programlisting>On target 1, you may start pktgen traffic
808 now:<programlisting>start 0</programlisting>On target 2, use this
809 command to refresh the testpmd display and note the highest
810 values:<programlisting>show port stats 0</programlisting>To stop
811 traffic from pktgen, in order to choose a different frame
812 size:<programlisting>stop 0</programlisting>To clear numbers in
813 testpmd:<programlisting>clear port stats
814show port stats 0</programlisting><table>
815 <title>Results in forwarding mode</title>
816
817 <tgroup cols="8">
818 <tbody>
819 <row>
820 <entry align="center"><emphasis
821 role="bold">Bytes</emphasis></entry>
822
823 <entry align="center"><emphasis role="bold">pktgen pps
824 RX</emphasis></entry>
825
826 <entry align="center"><emphasis role="bold">pktgen pps
827 TX</emphasis></entry>
828
829 <entry align="center"><emphasis role="bold">testpmd pps
830 RX</emphasis></entry>
831
832 <entry align="center"><emphasis role="bold">testpmd pps
833 TX</emphasis></entry>
834
835 <entry align="center"><emphasis role="bold">pktgen MBits/s
836 RX</emphasis></entry>
837
838 <entry align="center"><emphasis role="bold">pktgen MBits/s
839 TX</emphasis></entry>
840
841 <entry align="center"><emphasis role="bold">throughput
842 (%)</emphasis></entry>
843 </row>
844
845 <row>
846 <entry role="bold"><emphasis
847 role="bold">64</emphasis></entry>
848
849 <entry>7926325</entry>
850
851 <entry>14877576</entry>
852
853 <entry>7926515</entry>
854
855 <entry>7926515</entry>
856
857 <entry>5326</entry>
858
859 <entry>9997</entry>
860
861 <entry>53.2</entry>
862 </row>
863
864 <row>
865 <entry><emphasis role="bold">128</emphasis></entry>
866
867 <entry>7502802</entry>
868
869 <entry>8441253</entry>
870
871 <entry>7785983</entry>
872
873 <entry>7494959</entry>
874
875 <entry>8883</entry>
876
877 <entry>9994</entry>
878
879 <entry>88.8</entry>
880 </row>
881
882 <row>
883 <entry role="bold"><emphasis
884 role="bold">256</emphasis></entry>
885
886 <entry>4528631</entry>
887
888 <entry>4528782</entry>
889
890 <entry>4529515</entry>
891
892 <entry>4529515</entry>
893
894 <entry>9999</entry>
895
896 <entry>9999</entry>
897
898 <entry>99.9</entry>
899 </row>
900 </tbody>
901 </tgroup>
902 </table><table>
903 <title>Results in termination mode</title>
904
905 <tgroup cols="5">
906 <tbody>
907 <row>
908 <entry align="center"><emphasis
909 role="bold">Bytes</emphasis></entry>
910
911 <entry align="center"><emphasis role="bold">pktgen pps
912 TX</emphasis></entry>
913
914 <entry align="center"><emphasis role="bold">testpmd pps
915 RX</emphasis></entry>
916
917 <entry align="center"><emphasis role="bold">pktgen MBits/s
918 TX</emphasis></entry>
919
920 <entry align="center"><emphasis role="bold">throughput
921 (%)</emphasis></entry>
922 </row>
923
924 <row>
925 <entry role="bold"><emphasis
926 role="bold">64</emphasis></entry>
927
928 <entry>14877764</entry>
929
930 <entry>8090855</entry>
931
932 <entry>9997</entry>
933
934 <entry>54.3</entry>
935 </row>
936
937 <row>
938 <entry><emphasis role="bold">128</emphasis></entry>
939
940 <entry>8441309</entry>
941
942 <entry>8082971</entry>
943
944 <entry>9994</entry>
945
946 <entry>95.7</entry>
947 </row>
948
949 <row>
950 <entry role="bold"><emphasis
951 role="bold">256</emphasis></entry>
952
953 <entry>4528867</entry>
954
955 <entry>4528780</entry>
956
957 <entry>9999</entry>
958
959 <entry>99.9</entry>
960 </row>
961 </tbody>
962 </tgroup>
963 </table></para>
964 </section>
965 </section>
966
967 <section id="usecase-six">
968 <title>Forward traffic between two VMs</title>
969
970 <para>Benchmark a combo test using two virtual machines, the first
971 with traffic forwarding to the second, which terminates it.</para>
972
973 <para>Measurements are made in:</para>
974
975 <itemizedlist>
976 <listitem>
977 <para>pktgen TX in pps and Mbits/s</para>
978 </listitem>
979
980 <listitem>
981 <para>testpmd TX and RX pps in VM1</para>
982 </listitem>
983
984 <listitem>
985 <para>testpmd RX pps in VM2</para>
986 </listitem>
987
988 <listitem>
989 <para>throughput in percents, by dividing<emphasis role="bold">
990 VM2 testpmd RX pps</emphasis> by <emphasis role="bold">pktgen TX
991 pps</emphasis></para>
992 </listitem>
993 </itemizedlist>
994
995 <section id="targetone-usecase-five">
996 <title>Test Setup for Target 1</title>
997
998 <para>Start by doing the following:</para>
999
1000 <para>SSD boot using the following <literal>grub.cfg</literal>
1001 entry: <programlisting>linux (hd0,gpt3)/boot/bzImage root=/dev/sda3 ip=dhcp nohz_full=1-7 /
1002isolcpus=1-7 rcu-nocbs=1-7 rcu_nocb_poll intel_pstate=disable /
1003clocksource=tsc tsc=reliable nohpet nosoftlockup intel_idle.max_cstate=0 /
1004processor.max_cstate=0 mce=ignore_ce audit=0 nmi_watchdog=0 iommu=pt /
1005intel_iommu=on hugepagesz=1GB hugepages=8 default_hugepagesz=1GB /
1006hugepagesz=2M hugepages=2048 vfio_iommu_type1.allow_unsafe_interrupts=1</programlisting>Kill
1007 Services:<programlisting>killall ovsdb-server ovs-vswitchd
1008rm -rf /etc/openvswitch/*
1009mkdir -p /var/run/openvswitch</programlisting>Configure DPDK:<programlisting>mkdir -p /mnt/huge
1010mount -t hugetlbfs nodev /mnt/huge
1011modprobe igb_uio
1012dpdk-devbind --bind=igb_uio 0000:03:00.0</programlisting>Run
1013 pktgen:<programlisting>cd /usr/share/apps/pktgen/
1014./pktgen -c 0x7 -n 4 --proc-type auto --socket-mem 256 /
1015-w 0000:03:00.0 -- -P -m "[1:2].0"</programlisting>Set pktgen frame size to
1016 use from [64, 128, 256, 512]:<programlisting>set 0 size 64</programlisting></para>
1017 </section>
1018
1019 <section id="targettwo-usecase-six">
1020 <title>Test Setup for Target 2</title>
1021
1022 <para>Start by doing the following:</para>
1023
1024 <para>SSD boot using the following <literal>grub.cfg</literal>
1025 entry: <programlisting>linux (hd0,gpt3)/boot/bzImage root=/dev/sda3 ip=dhcp nohz_full=1-7 /
1026isolcpus=1-7 rcu-nocbs=1-7 rcu_nocb_poll intel_pstate=disable /
1027clocksource=tsc tsc=reliable nohpet nosoftlockup intel_idle.max_cstate=0 /
1028processor.max_cstate=0 mce=ignore_ce audit=0 nmi_watchdog=0 iommu=pt /
1029intel_iommu=on hugepagesz=1GB hugepages=8 default_hugepagesz=1GB /
1030hugepagesz=2M hugepages=2048 vfio_iommu_type1.allow_unsafe_interrupts=1</programlisting>Kill
1031 Services:<programlisting>killall ovsdb-server ovs-vswitchd
1032rm -rf /etc/openvswitch/*
1033mkdir -p /var/run/openvswitch</programlisting>Configure DPDK:<programlisting>mkdir -p /mnt/huge
1034mount -t hugetlbfs nodev /mnt/huge
1035modprobe igb_uio
1036dpdk-devbind --bind=igb_uio 0000:03:00.0</programlisting>Configure
1037 OVS:<programlisting>export DB_SOCK=/var/run/openvswitch/db.sock
1038ovsdb-tool create /etc/openvswitch/conf.db /
1039/usr/share/openvswitch/vswitch.ovsschema
1040ovsdb-server --remote=punix:$DB_SOCK /
1041--remote=db:Open_vSwitch,Open_vSwitch,manager_options --pidfile --detach
1042ovs-vsctl --no-wait init
1043ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-lcore-mask=0x10
1044ovs-vsctl --no-wait set Open_vSwitch . other_config:pmd-cpu-mask=0xc
1045ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-socket-mem=2048
1046ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true
1047ovs-vswitchd unix:$DB_SOCK --pidfile /
1048--detach --log-file=/var/log/openvswitch/ovs-vswitchd.log
1049
1050
1051ovs-vsctl add-br ovsbr0 -- set bridge ovsbr0 datapath_type=netdev
1052ovs-vsctl add-port ovsbr0 dpdk0 /
1053-- set Interface dpdk0 type=dpdk options:dpdk-devargs=0000:03:00.0 ofport_request=1
1054ovs-vsctl add-port ovsbr0 vhost-user1 /
1055-- set Interface vhost-user1 type=dpdkvhostuser ofport_request=2
1056ovs-vsctl add-port ovsbr0 vhost-user2 /
1057-- set Interface vhost-user2 type=dpdkvhostuser ofport_request=3
1058
1059
1060ovs-ofctl del-flows ovsbr0
1061ovs-ofctl add-flow ovsbr0 in_port=1,action=output:2
1062ovs-ofctl add-flow ovsbr0 in_port=2,action=output:3</programlisting>Launch
1063 first QEMU instance, VM1:<programlisting>taskset -c 0,1 qemu-system-x86_64 -cpu host,+invtsc,migratable=no -M q35 /
1064-smp cores=2,sockets=1 -vcpu 0,affinity=0 -vcpu 1,affinity=1 -enable-kvm /
1065-nographic -realtime mlock=on -kernel /home/root/qemu/bzImage /
1066-drive file=/home/root/qemu/enea-nfv-access-guest-qemux86-64.ext4,/
1067if=virtio,format=raw -m 2048 -object memory-backend-file,id=mem,/
1068size=2048M,mem-path=/mnt/huge,share=on -numa node,memdev=mem /
1069-mem-prealloc -chardev socket,id=char0,path=/var/run/openvswitch/vhost-user1 /
1070-netdev type=vhost-user,id=mynet1,chardev=char0,vhostforce /
1071-device virtio-net-pci,mac=52:54:00:00:00:01,netdev=mynet1,/
1072mrg_rxbuf=on,rx_queue_size=1024,csum=off,gso=off,guest_tso4=off,/
1073guest_tso6=off,guest_ecn=off -append 'root=/dev/vda console=ttyS0 /
1074hugepagesz=2M hugepages=512 isolcpus=1 nohz_full=1 rcu_nocbs=1 /
1075irqaffinity=0 rcu_nocb_poll intel_pstate=disable intel_idle.max_cstate=0 /
1076processor.max_cstate=0 mce=ignore_ce audit=0'</programlisting>Connect to
1077 Target 2 through a new SSH session and run a second QEMU instance
1078 (to get its own console, separate from instance VM1). We shall call
1079 this VM2:<programlisting>taskset -c 4,5 qemu-system-x86_64 -cpu host,+invtsc,migratable=no /
1080-M q35 -smp cores=2,sockets=1 -vcpu 0,affinity=4 -vcpu 1,affinity=5 /
1081-enable-kvm -nographic -realtime mlock=on -kernel /home/root/qemu2/bzImage /
1082-drive file=/home/root/qemu2/enea-nfv-access-guest-qemux86-64.ext4,/
1083if=virtio,format=raw -m 2048 -object memory-backend-file,id=mem,size=2048M,/
1084mem-path=/mnt/huge,share=on -numa node,memdev=mem -mem-prealloc /
1085-chardev socket,id=char1,path=/var/run/openvswitch/vhost-user2 /
1086-netdev type=vhost-user,id=mynet1,chardev=char1,vhostforce /
1087-device virtio-net-pci,mac=52:54:00:00:00:02,netdev=mynet1,/
1088mrg_rxbuf=on,rx_queue_size=1024,csum=off,gso=off,guest_tso4=off,/
1089guest_tso6=off,guest_ecn=off -append 'root=/dev/vda console=ttyS0 /
1090hugepagesz=2M hugepages=512 isolcpus=1 nohz_full=1 rcu_nocbs=1 /
1091irqaffinity=0 rcu_nocb_poll intel_pstate=disable intel_idle.max_cstate=0 /
1092processor.max_cstate=0 mce=ignore_ce audit=0'</programlisting>Configure DPDK
1093 inside VM1:<programlisting>mkdir -p /mnt/huge
1094mount -t hugetlbfs nodev /mnt/huge
1095modprobe igb_uio
1096dpdk-devbind --bind=igb_uio 0000:00:02.0</programlisting>Run testpmd inside
1097 VM1:<programlisting>testpmd -c 0x3 -n 2 librte_pmd_virtio.so.1.1 /
1098-- --burst 64 --disable-rss -i /
1099--portmask=0x1 --coremask=0x2 --nb-cores=1 --rxq=1 /
1100--txq=1 --txd=512 --rxd=512 --port-topology=chained</programlisting>Start
1101 testpmd inside VM1:<programlisting>start</programlisting>Configure
1102 DPDK inside VM2:<programlisting>mkdir -p /mnt/huge
1103mount -t hugetlbfs nodev /mnt/huge
1104modprobe igb_uio
1105dpdk-devbind --bind=igb_uio 0000:00:02.0</programlisting>Run testpmd inside
1106 VM2:<programlisting>testpmd -c 0x3 -n 2 librte_pmd_virtio.so.1.1 /
1107-- --burst 64 --disable-rss -i --portmask=0x1 /
1108--coremask=0x2 --nb-cores=1 --rxq=1 --txq=1 --txd=512 /
1109--rxd=512 --port-topology=chained</programlisting>Set VM2 for termination and
1110 start testpmd:<programlisting>set fwd rxonly
1111start</programlisting>On target 1, start pktgen traffic:<programlisting>start 0</programlisting>Use
1112 this command to refresh testpmd display in VM1 and VM2 and note the
1113 highest values:<programlisting>show port stats 0</programlisting>To
1114 stop traffic from pktgen, in order to choose a different frame
1115 size:<programlisting>stop 0</programlisting>To clear numbers in
1116 testpmd:<programlisting>clear port stats
1117show port stats 0</programlisting>For VM1, we record the stats relevant for
1118 <emphasis role="bold">forwarding</emphasis>:</para>
1119
1120 <itemizedlist>
1121 <listitem>
1122 <para>RX, TX in pps</para>
1123 </listitem>
1124 </itemizedlist>
1125
1126 <para>Only Rx-pps and Tx-pps numbers are important here, they change
1127 every time stats are displayed as long as there is traffic. Run the
1128 command a few times and pick the best (maximum) values seen.</para>
1129
1130 <para>For VM2, we record the stats relevant for <emphasis
1131 role="bold">termination</emphasis>:</para>
1132
1133 <itemizedlist>
1134 <listitem>
1135 <para>RX in pps (TX will be 0)</para>
1136 </listitem>
1137 </itemizedlist>
1138
1139 <para>For pktgen, we record only the TX side, because flow is
1140 terminated, with no RX traffic reaching pktgen:</para>
1141
1142 <itemizedlist>
1143 <listitem>
1144 <para>TX in pps and Mbit/s</para>
1145 </listitem>
1146 </itemizedlist>
1147
1148 <table>
1149 <title>Results in forwarding mode</title>
1150
1151 <tgroup cols="7">
1152 <tbody>
1153 <row>
1154 <entry align="center"><emphasis
1155 role="bold">Bytes</emphasis></entry>
1156
1157 <entry align="center"><emphasis role="bold">pktgen pps
1158 TX</emphasis></entry>
1159
1160 <entry align="center"><emphasis role="bold">VM1 testpmd pps
1161 RX</emphasis></entry>
1162
1163 <entry align="center"><emphasis role="bold">VM1 testpmd pps
1164 TX</emphasis></entry>
1165
1166 <entry align="center"><emphasis role="bold">VM2 testpmd pps
1167 RX</emphasis></entry>
1168
1169 <entry align="center"><emphasis role="bold">pktgen MBits/s
1170 TX</emphasis></entry>
1171
1172 <entry align="center"><emphasis role="bold">throughput
1173 (%)</emphasis></entry>
1174 </row>
1175
1176 <row>
1177 <entry role="bold"><emphasis
1178 role="bold">64</emphasis></entry>
1179
1180 <entry>14877757</entry>
1181
1182 <entry>7712835</entry>
1183
1184 <entry>6024320</entry>
1185
1186 <entry>6015525</entry>
1187
1188 <entry>9997</entry>
1189
1190 <entry>40.0</entry>
1191 </row>
1192
1193 <row>
1194 <entry><emphasis role="bold">128</emphasis></entry>
1195
1196 <entry>8441333</entry>
1197
1198 <entry>7257432</entry>
1199
1200 <entry>5717540</entry>
1201
1202 <entry>5716752</entry>
1203
1204 <entry>9994</entry>
1205
1206 <entry>67.7</entry>
1207 </row>
1208
1209 <row>
1210 <entry role="bold"><emphasis
1211 role="bold">256</emphasis></entry>
1212
1213 <entry>4528865</entry>
1214
1215 <entry>4528717</entry>
1216
1217 <entry>4528717</entry>
1218
1219 <entry>4528621</entry>
1220
1221 <entry>9999</entry>
1222
1223 <entry>99.9</entry>
1224 </row>
1225 </tbody>
1226 </tgroup>
1227 </table>
1228 </section>
1229 </section>
1230
1231 <section id="pxe-config-vm">
1232 <title>SR-IOV in Virtual Machines</title>
1233
1234 <para>PCI passthrough tests using pktgen and testpmd in virtual
1235 machines.</para>
1236
1237 <para>pktgen[DPDK]VM - PHY - VM[DPDK] testpmd.</para>
1238
1239 <para>Measurements:</para>
1240
1241 <itemizedlist>
1242 <listitem>
1243 <para>pktgen to testpmd in <emphasis
1244 role="bold">forwarding</emphasis> mode.</para>
1245 </listitem>
1246
1247 <listitem>
1248 <para>pktgen to testpmd in <emphasis
1249 role="bold">termination</emphasis> mode.</para>
1250 </listitem>
1251 </itemizedlist>
1252
1253 <section id="test-setup-target-four">
1254 <title>Test Setup</title>
1255
1256 <para>SSD boot using the following <literal>grub.cfg</literal>
1257 entry: <programlisting>linux (hd0,gpt3)/boot/bzImage root=/dev/sda3 ip=dhcp nohz_full=1-7 /
1258isolcpus=1-7 rcu-nocbs=1-7 rcu_nocb_poll intel_pstate=disable /
1259clocksource=tsc tsc=reliable nohpet nosoftlockup intel_idle.max_cstate=0 /
1260processor.max_cstate=0 mce=ignore_ce audit=0 nmi_watchdog=0 iommu=pt /
1261intel_iommu=on hugepagesz=1GB hugepages=8 default_hugepagesz=1GB /
1262hugepagesz=2M hugepages=2048 vfio_iommu_type1.allow_unsafe_interrupts=1</programlisting>Stop
1263 other services and mount hugepages: <programlisting>systemctl stop openvswitch
1264mkdir -p /mnt/huge
1265mount -t hugetlbfs hugetlbfs /mnt/huge</programlisting>Configure SR-IOV
1266 interfaces:<programlisting>/usr/share/usertools/dpdk-devbind.py --bind=ixgbe 0000:03:00.0
1267echo 2 &gt; /sys/class/net/eno3/device/sriov_numvfs
1268ifconfig eno3 10.0.0.1
1269modprobe vfio_pci
1270/usr/share/usertools/dpdk-devbind.py --bind=vfio-pci 0000:03:10.0
1271/usr/share/usertools/dpdk-devbind.py --bind=vfio-pci 0000:03:10.2
1272ip link set eno3 vf 0 mac 0c:c4:7a:E5:0F:48
1273ip link set eno3 vf 1 mac 0c:c4:7a:BF:52:E7</programlisting>Launch two QEMU
1274 instances: <programlisting>taskset -c 4,5 qemu-system-x86_64 -cpu host,+invtsc,migratable=no -M /
1275q35 -smp cores=2,sockets=1 -vcpu 0,affinity=4 -vcpu 1,affinity=5 -enable-kvm /
1276-nographic -kernel /mnt/qemu/bzImage /
1277-drive file=/mnt/qemu/enea-nfv-access-guest-qemux86-64.ext4,if=virtio,/
1278format=raw -m 4096 -object memory-backend-file,id=mem,size=4096M,mem-path=/mnt/huge,/
1279share=on -numa node,memdev=mem -mem-prealloc -device vfio-pci,host=03:10.0 /
1280-append 'root=/dev/vda console=ttyS0 hugepagesz=2M hugepages=1024 /
1281isolcpus=1 nohz_full=1 rcu_nocbs=1 irqaffinity=0 rcu_nocb_poll /
1282intel_pstate=disable intel_idle.max_cstate=0 /
1283processor.max_cstate=0 mce=ignore_ce audit=0'
1284
1285
1286taskset -c 2,3 qemu-system-x86_64 -cpu host,+invtsc,migratable=no -M /
1287q35 -smp cores=2,sockets=1 -vcpu 0,affinity=2 -vcpu 1,affinity=3 -enable-kvm /
1288-nographic -kernel /mnt/qemu/bzImage /
1289-drive file=/mnt/qemu/enea-nfv-access-guest-qemux86-64.ext4,if=virtio,/
1290format=raw -m 4096 -object memory-backend-file,id=mem,size=4096M,mem-path=/mnt/huge,/
1291share=on -numa node,memdev=mem -mem-prealloc -device vfio-pci,host=03:10.2 /
1292-append 'root=/dev/vda console=ttyS0 hugepagesz=2M hugepages=1024 /
1293isolcpus=1 nohz_full=1 rcu_nocbs=1 irqaffinity=0 rcu_nocb_poll /
1294intel_pstate=disable intel_idle.max_cstate=0 processor.max_cstate=0 /
1295mce=ignore_ce audit=0'</programlisting>In the first VM, mount hugepages and
1296 start pktgen:<programlisting>mkdir -p /mnt/huge &amp;&amp; \
1297mount -t hugetlbfs hugetlbfs /mnt/huge
1298modprobe igb_uio
1299/usr/share/usertools/dpdk-devbind.py --bind=igb_uio 0000:00:03.0
1300cd /usr/share/apps/pktgen
1301./pktgen -c 0x3 -- -P -m "1.0"</programlisting>In the pktgen console set the
1302 MAC of the destination and start generating
1303 packages:<programlisting>set mac 0 0C:C4:7A:BF:52:E7
1304str</programlisting>In the second VM, mount hugepages and start
1305 testpmd:<programlisting>mkdir -p /mnt/huge &amp;&amp; \
1306mount -t hugetlbfs hugetlbfs /mnt/huge
1307modprobe igb_uio
1308/usr/share/usertools/dpdk-devbind.py --bind=igb_uio 0000:00:03.0
1309testpmd -c 0x3 -n 2 -- -i --txd=512 --rxd=512 --port-topology=chained /
1310--eth-peer=0,0c:c4:7a:e5:0f:48</programlisting>In order to enable <emphasis
1311 role="bold">forwarding</emphasis> mode, in the testpmd console,
1312 run:<programlisting>set fwd mac
1313start</programlisting>In order to enable <emphasis
1314 role="bold">termination</emphasis> mode, in the testpmd console,
1315 run:<programlisting>set fwd rxonly
1316start</programlisting><table>
1317 <title>Results in forwarding mode</title>
1318
1319 <tgroup cols="5">
1320 <tbody>
1321 <row>
1322 <entry align="center"><emphasis
1323 role="bold">Bytes</emphasis></entry>
1324
1325 <entry align="center"><emphasis role="bold">VM1 pktgen pps
1326 TX</emphasis></entry>
1327
1328 <entry align="center"><emphasis role="bold">VM1 pktgen pps
1329 RX</emphasis></entry>
1330
1331 <entry align="center"><emphasis role="bold">VM2 testpmd
1332 pps RX</emphasis></entry>
1333
1334 <entry align="center"><emphasis role="bold">VM2 testpmd
1335 pps TX</emphasis></entry>
1336 </row>
1337
1338 <row>
1339 <entry role="bold"><emphasis
1340 role="bold">64</emphasis></entry>
1341
1342 <entry>7102096</entry>
1343
1344 <entry>7101897</entry>
1345
1346 <entry>7103853</entry>
1347
1348 <entry>7103793</entry>
1349 </row>
1350
1351 <row>
1352 <entry><emphasis role="bold">128</emphasis></entry>
1353
1354 <entry>5720016</entry>
1355
1356 <entry>5720256</entry>
1357
1358 <entry>5722081</entry>
1359
1360 <entry>5722083</entry>
1361 </row>
1362
1363 <row>
1364 <entry role="bold"><emphasis
1365 role="bold">256</emphasis></entry>
1366
1367 <entry>3456619</entry>
1368
1369 <entry>3456164</entry>
1370
1371 <entry>3456319</entry>
1372
1373 <entry>3456321</entry>
1374 </row>
1375
1376 <row>
1377 <entry role="bold"><emphasis
1378 role="bold">512</emphasis></entry>
1379
1380 <entry>1846671</entry>
1381
1382 <entry>1846628</entry>
1383
1384 <entry>1846652</entry>
1385
1386 <entry>1846657</entry>
1387 </row>
1388
1389 <row>
1390 <entry role="bold"><emphasis
1391 role="bold">1024</emphasis></entry>
1392
1393 <entry>940799</entry>
1394
1395 <entry>940748</entry>
1396
1397 <entry>940788</entry>
1398
1399 <entry>940788</entry>
1400 </row>
1401
1402 <row>
1403 <entry role="bold"><emphasis
1404 role="bold">1500</emphasis></entry>
1405
1406 <entry>649594</entry>
1407
1408 <entry>649526</entry>
1409
1410 <entry>649563</entry>
1411
1412 <entry>649563</entry>
1413 </row>
1414 </tbody>
1415 </tgroup>
1416 </table><table>
1417 <title>Results in termination mode</title>
1418
1419 <tgroup cols="3">
1420 <tbody>
1421 <row>
1422 <entry align="center"><emphasis
1423 role="bold">Bytes</emphasis></entry>
1424
1425 <entry align="center"><emphasis role="bold">VM1 pktgen pps
1426 TX</emphasis></entry>
1427
1428 <entry align="center"><emphasis role="bold">VM2 testpmd
1429 RX</emphasis></entry>
1430 </row>
1431
1432 <row>
1433 <entry role="bold"><emphasis
1434 role="bold">64</emphasis></entry>
1435
1436 <entry>14202904</entry>
1437
1438 <entry>14203944</entry>
1439 </row>
1440
1441 <row>
1442 <entry><emphasis role="bold">128</emphasis></entry>
1443
1444 <entry>8434766</entry>
1445
1446 <entry>8437525</entry>
1447 </row>
1448
1449 <row>
1450 <entry role="bold"><emphasis
1451 role="bold">256</emphasis></entry>
1452
1453 <entry>4532131</entry>
1454
1455 <entry>4532348</entry>
1456 </row>
1457
1458 <row>
1459 <entry><emphasis role="bold">512</emphasis></entry>
1460
1461 <entry>2349344</entry>
1462
1463 <entry>2349032</entry>
1464 </row>
1465
1466 <row>
1467 <entry><emphasis role="bold">1024</emphasis></entry>
1468
1469 <entry>1197293</entry>
1470
1471 <entry>1196699</entry>
1472 </row>
1473
1474 <row>
1475 <entry><emphasis role="bold">1500</emphasis></entry>
1476
1477 <entry>822321</entry>
1478
1479 <entry>822276</entry>
1480 </row>
1481 </tbody>
1482 </tgroup>
1483 </table></para>
1484 </section>
1485 </section>
1486 </section>
1487 </section>
1488</chapter> \ No newline at end of file
diff --git a/doc/book-enea-nfv-access-reference-guide-intel/doc/book.xml b/doc/book-enea-nfv-access-reference-guide-intel/doc/book.xml
deleted file mode 100644
index cec06b6..0000000
--- a/doc/book-enea-nfv-access-reference-guide-intel/doc/book.xml
+++ /dev/null
@@ -1,30 +0,0 @@
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
3"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
4<!ENTITY % local.common.attrib "xml:base CDATA #IMPLIED">
5]>
6<book id="book_enea_nfv_access_reference_guide_intel">
7 <title><trademark class="registered">Enea</trademark> NFV Access Reference Guide</title>
8 <subtitle>Release Version
9 <xi:include href="eltf_params_updated.xml" xpointer="element(EneaLinux_REL_VER/1)"
10 xmlns:xi="http://www.w3.org/2001/XInclude" /></subtitle>
11 <!-- OLINKDBPATH_USED_BY_XMLMIND ../../s_docbuild/olinkdb -->
12 <xi:include href="../../s_docbuild/template/docsrc_common/bookinfo_userdoc.xml"
13 xmlns:xi="http://www.w3.org/2001/XInclude" />
14 <xi:include href="overview.xml"
15 xmlns:xi="http://www.w3.org/2001/XInclude" />
16 <xi:include href="dpdk.xml"
17 xmlns:xi="http://www.w3.org/2001/XInclude" />
18 <xi:include href="ovs.xml"
19 xmlns:xi="http://www.w3.org/2001/XInclude" />
20 <xi:include href="hypervisor_virtualization.xml"
21 xmlns:xi="http://www.w3.org/2001/XInclude" />
22 <xi:include href="container_virtualization.xml"
23 xmlns:xi="http://www.w3.org/2001/XInclude" />
24 <xi:include href="ostree.xml"
25 xmlns:xi="http://www.w3.org/2001/XInclude" />
26 <xi:include href="benchmarks.xml"
27 xmlns:xi="http://www.w3.org/2001/XInclude" />
28 <!-- <xi:include href="using_nfv_access_sdks.xml"
29 xmlns:xi="http://www.w3.org/2001/XInclude" />-->
30</book>
diff --git a/doc/book-enea-nfv-access-reference-guide-intel/doc/container_virtualization.xml b/doc/book-enea-nfv-access-reference-guide-intel/doc/container_virtualization.xml
deleted file mode 100644
index 06bfbb4..0000000
--- a/doc/book-enea-nfv-access-reference-guide-intel/doc/container_virtualization.xml
+++ /dev/null
@@ -1,137 +0,0 @@
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
3"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
4<chapter id="container-virtualization">
5 <title>Container Virtualization</title>
6
7 <section id="docker">
8 <title>Docker</title>
9
10 <para>Docker is an open-source project that automates the deployment of
11 applications inside software containers, by providing an additional layer
12 of abstraction and automation of operating-system-level virtualization on
13 Linux.</para>
14
15 <para>The software container mechanism uses resource isolation features
16 inside the Linux kernel, such as cgroups and kernel namespaces to allow
17 multiple containers to run within a single Linux instance, avoiding the
18 overhead of starting and maintaining virtual machines.</para>
19
20 <para>Containers are lightweight and include everything needed to run
21 themselves: code, runtime, system tools, system libraries and settings.
22 The main advantage provided by containers is that the encapsulated
23 software is isolated from its surroundings. For example, differences
24 between development and staging environments can be kept separate in order
25 to reduce conflicts between teams running different software on the same
26 infrastructure.</para>
27
28 <para>For a better understanding of what Docker is and how it works, the
29 official documentation provided on the Docker website should be consulted:
30 <ulink
31 url="https://docs.docker.com/">https://docs.docker.com/</ulink>.</para>
32
33 <section id="launch-docker-container">
34 <title>Launching a Docker container</title>
35
36 <para>Docker provides a hello-world container which checks whether your
37 system is running the daemon correctly. This container can be launched
38 by simply running:</para>
39
40 <programlisting>docker run hello-world</programlisting>
41
42 <para>If your installation is working correctly, the following message
43 should be outputted:<programlisting>Hello from Docker!</programlisting></para>
44 </section>
45
46 <section id="run-enfv-guest-image">
47 <title>Run a guest image inside Docker</title>
48
49 <para>Guest images can be run inside Docker as in any other container.
50 You can find an example below of how to configure and run a guest image.
51 Before starting a guest image, a root filesystem has to be imported in
52 Docker:</para>
53
54 <programlisting>docker import guest-qemux86-64.tar.gz guest</programlisting>
55
56 <para>To check that the Docker image has been imported successfully,
57 run:</para>
58
59 <programlisting>docker images</programlisting>
60
61 <para>Finally, start a container with <literal>bash</literal> running as
62 the shell, by running:</para>
63
64 <programlisting>docker run -it guest /bin/bash</programlisting>
65 </section>
66
67 <section id="attach-ext-resources-docker-containers">
68 <title>Attach external resources to Docker containers</title>
69
70 <para>Any system resource present on the host machine can be attached or
71 accessed by a Docker container.</para>
72
73 <para>Typically, if a file or folder on the host machine needs to be
74 attached to a container, that container should be launched with the
75 <literal>-v</literal> parameter. For example, to attach the
76 <literal>roots</literal> home folder to a container, the command line
77 for Docker should have the following format:</para>
78
79 <programlisting>docker run -it -v /home/root:/home/host_root/ guest /bin/bash</programlisting>
80
81 <para>To check that folders have been properly passed from the host to
82 the container, create a file in the source folder on the host root
83 filesystem and check for its existence inside the containers destination
84 location.</para>
85
86 <section id="attach-vhost-descriptors">
87 <title>Attach vhost file descriptors</title>
88
89 <para>If OVS is running on the host and vhost file descriptors need to
90 be passed to the container, this can be done by either mapping the
91 folder where all the file descriptors are located or mapping the file
92 descriptor itself:</para>
93
94 <itemizedlist>
95 <listitem>
96 <para>Mapping the folder can be done as exemplified above:</para>
97
98 <programlisting>docker run -it --rm -v /var/run/openvswitch/:/var/run/openvswitch/ guest /bin/bash</programlisting>
99 </listitem>
100
101 <listitem>
102 <para>Mapping a file descriptor is done in a similar way, but the
103 <literal>-v</literal> flag needs to point directly to it:</para>
104
105 <programlisting>docker run -it --rm -v /var/run/openvswitch/vhost-user1 guest /bin/bash</programlisting>
106 </listitem>
107 </itemizedlist>
108 </section>
109
110 <section id="attach-hugepages-mount-folders">
111 <title>Attach hugepages mount folders</title>
112
113 <para>Hugepages mount folders can also be accessed by a container
114 similarly to how a plain folder is mapped, as shown in 1.3.</para>
115
116 <para>For example, if the host system has hugepages mounted in the
117 <literal>/mnt/huge</literal> location, a container can also access
118 hugepages by being launched with:</para>
119
120 <programlisting>docker run -it -v /mnt/huge guest /bin/bash</programlisting>
121 </section>
122
123 <section id="access-pci-bus">
124 <title>Access the PCI bus</title>
125
126 <para>If the host machine has multiple SRIOV instances created, a
127 container can access the instances by being given privileged access to
128 the host system. Unlike folders, PCI devices do not have to be mounted
129 explicitly in order to be accessed and will be available to the
130 container if the <literal>--privileged</literal> flag is passed to the
131 command line:</para>
132
133 <programlisting>docker run --privileged -it guest /bin/bash</programlisting>
134 </section>
135 </section>
136 </section>
137</chapter>
diff --git a/doc/book-enea-nfv-access-reference-guide-intel/doc/dpdk.xml b/doc/book-enea-nfv-access-reference-guide-intel/doc/dpdk.xml
deleted file mode 100644
index 523a2d5..0000000
--- a/doc/book-enea-nfv-access-reference-guide-intel/doc/dpdk.xml
+++ /dev/null
@@ -1,115 +0,0 @@
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
3"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
4<chapter id="dpdk">
5 <title>Data Plane Development Kit</title>
6
7 <para>The Intel Data Plane Development Kit (DPDK) is a set of user-space
8 libraries and drivers that provides a programming framework for high-speed
9 packet processing applications. The DPDK includes a number of Poll Mode
10 Drivers that enable direct packet transfer between the physical NIC and
11 user-space without using interrupts, bypassing the Linux kernel network
12 stack entirely.</para>
13
14 <para>In order to take advantage of DPDK, Linux <ulink
15 url="https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt">huge
16 pages</ulink> must be enabled in the system.</para>
17
18 <para>For DPDK documentation, see <ulink
19 url="http://dpdk.org/doc/guides-18.02/index.html">http://dpdk.org/doc/guides-18.02/index.html</ulink></para>
20
21 <section id="pktgen">
22 <title>Pktgen</title>
23
24 <para>In addition to DPDK, Enea NFV Access includes Pktgen, a software
25 traffic generator that is powered by the DPDK packet processing framework.
26 Pktgen can act as a transmitter or receiver and is capable of generating
27 10Gbit wire rate traffic with 64 byte frames.</para>
28
29 <para>Pktgen is installed in <literal>/usr/share/apps/pktgen/</literal>
30 and needs to be executed from this directory.</para>
31
32 <para>For Pktgen documentation, see <ulink
33 url="http://pktgen-dpdk.readthedocs.io">http://pktgen-dpdk.readthedocs.io</ulink></para>
34 </section>
35
36 <section id="dpdk-setup">
37 <title>DPDK setup instructions</title>
38
39 <para>The following setup instructions apply to both host and
40 guest.</para>
41
42 <orderedlist>
43 <listitem>
44 <para>To make the hugepage memory available for DPDK, it must be
45 mounted:</para>
46
47 <programlisting>$ mkdir /mnt/huge
48mount -t hugetlbfs nodev /mnt/huge</programlisting>
49 </listitem>
50
51 <listitem>
52 <para>Load the vfio-pci kernel module:</para>
53
54 <programlisting>$ modprobe vfio-pci</programlisting>
55 </listitem>
56
57 <listitem>
58 <para>Bind the device to the vfio-pci driver:</para>
59
60 <para><programlisting>$ dpdk-devbind --bind=vfio-pci &lt;PCI device number&gt;</programlisting>The
61 DPDK provides the dpdk-devbind tool to help binding/unbinding devices
62 from specific drivers. See <ulink
63 url="http://dpdk.org/doc/guides-18.02/tools/devbind.html">http://dpdk.org/doc/guides-18.02/tools/devbind.html</ulink>
64 for more information.</para>
65 </listitem>
66 </orderedlist>
67
68 <para>To print the current status of all known network
69 interfaces:<programlisting>$ dpdk-devbind --status</programlisting></para>
70
71 <para>At this point the system is ready to run DPDK applications.</para>
72 </section>
73
74 <section id="dpdk-example-test-setup">
75 <title>DPDK example test setup</title>
76
77 <para>This is a simple DPDK test setup using two boards connected
78 back-to-back. One board generates traffic using the Pktgen application,
79 and the other board runs the DPDK testpmd example to forward packets back
80 on the same interface.</para>
81
82 <programlisting>Pktgen [DPDK] - Board 1 PHY &lt;--&gt; Board 2 PHY - [DPDK] testpmd</programlisting>
83
84 <orderedlist>
85 <listitem>
86 <para>Setup DPDK on both boards, following the instructions in <xref
87 linkend="dpdk-setup" />.</para>
88 </listitem>
89
90 <listitem>
91 <para>On board 1, start the Pktgen application:</para>
92
93 <programlisting>cd /usr/share/apps/pktgen/
94./pktgen -c 0x7 -n 4 --socket-mem 1024 -- -P -m "[1:2].0"</programlisting>
95
96 <para>In the Pktgen console, run:</para>
97
98 <programlisting>start 0</programlisting>
99
100 <para>The Pktgen output will display the traffic configuration and
101 statistics.</para>
102 </listitem>
103
104 <listitem>
105 <para>On board 2, start the testpmd application:</para>
106
107 <programlisting>testpmd -c 0x7 -n 4 -- --txd=512 --rxd=512 --port-topology=chained</programlisting>
108
109 <para>For more information, refer to the testpmd application user
110 guide: <ulink
111 url="http://dpdk.org/doc/guides-18.02/testpmd_app_ug/index.html">http://dpdk.org/doc/guides-18.02/testpmd_app_ug/index.html</ulink>.</para>
112 </listitem>
113 </orderedlist>
114 </section>
115</chapter>
diff --git a/doc/book-enea-nfv-access-reference-guide-intel/doc/eltf_params_template.xml b/doc/book-enea-nfv-access-reference-guide-intel/doc/eltf_params_template.xml
deleted file mode 100644
index eaa7ebd..0000000
--- a/doc/book-enea-nfv-access-reference-guide-intel/doc/eltf_params_template.xml
+++ /dev/null
@@ -1,151 +0,0 @@
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
3"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
4<section id="eltf_created_params">
5 <title>File with Parameters in the Book Auto-updated by ELFT</title>
6
7 <note>
8 <para>See the <emphasis
9 role="bold">eltf_params_updated_template_howto_use.txt</emphasis> text
10 file for description of how to create the final <emphasis
11 role="bold">eltf_params_updated.xml</emphasis> from this template and for
12 all <emphasis role="bold">REQUIREMENTS</emphasis>. Use the command
13 "<emphasis role="bold">make eltf</emphasis>" to extract a full list of all
14 ELTF variables, which always begins with ELTF_ and don't only rely on the
15 howto text file list! The plan is that ELTF will auto-update this when
16 needed.</para>
17 </note>
18
19 <section id="host_prereq">
20 <title>Common Parameters</title>
21
22 <bridgehead>A programlisting, ID
23 "eltf-prereq-apt-get-commands-host"</bridgehead>
24
25 <para id="eltf-prereq-apt-get-commands-host"><programlisting>ELTF_PL_HOST_PREREQ</programlisting></para>
26
27 <bridgehead>A programlisting, ID
28 "eltf-getting-repo-install-command"</bridgehead>
29
30 <para id="eltf-getting-repo-install-command"><programlisting>ELTF_PL_GET_REPO</programlisting></para>
31
32 <bridgehead>Several phrase elements, various IDs. Ensure EL_REL_VER is
33 correct also compared to the "previous" REL VER in pardoc-distro.xml
34 "prev_baseline".</bridgehead>
35
36 <para id="EneaLinux_REL_VER"><phrase>ELTF_EL_REL_VER</phrase></para>
37
38 <para id="Yocto_VER"><phrase>ELTF_YOCTO_VER</phrase></para>
39
40 <para id="Yocto_NAME"><phrase>ELTF_YOCTO_NAME</phrase></para>
41
42 <para id="ULINK_YOCTO_PROJECT_DOWNLOAD"><ulink
43 url="ELTF_YOCTO_PROJ_DOWNLOAD_URL">ELTF_YOCTO_PROJ_DOWNLOAD_TXTURL</ulink></para>
44
45 <para id="ULINK_ENEA_LINUX_URL"><ulink
46 url="ELTF_EL_DOWNLOAD_URL">ELTF_EL_DOWNLOAD_TXTURL</ulink></para>
47
48 <bridgehead>A programlisting, ID "eltf-repo-cloning-enea-linux". Use
49 $MACHINE/default.xml as parameter, where MACHINE is one of the target
50 directory names in the manifest.</bridgehead>
51
52 <para id="eltf-repo-cloning-enea-linux"><programlisting>ELTF_PL_CLONE_W_REPO</programlisting></para>
53
54 <bridgehead>A table with ONE row, only the row with ID
55 "eltf-eclipse-version-row" is included in the book. MANUALLY BOTH in the
56 template.xml and in the updated.xml, set condition hidden on the
57 &lt;row&gt;, if eclipse is not in the release.</bridgehead>
58
59 <informaltable>
60 <tgroup cols="1">
61 <tbody>
62 <row id="eltf-eclipse-version-row">
63 <entry>Eclipse version ELTF_ECLIPSE_VERSION plus command line
64 development tools are included in this Enea NFV Access release.</entry>
65 </row>
66 </tbody>
67 </tgroup>
68 </informaltable>
69
70 <bridgehead>Below is one big section with title "Supported Targets with
71 Parameters". The entire section is included completely in the book via ID
72 "eltf-target-tables-section" and shall be LAST in the template. The
73 template contains ONE target subsection. COPY/APPEND it, if multiple
74 targets exist in the release and optionally add rows with additional
75 target parameters in each target subsection table.</bridgehead>
76 </section>
77
78 <section id="eltf-target-tables-section">
79 <title>Supported Targets with Parameters</title>
80
81 <para>The tables below describes the target(s) supported in this Enea
82 NFV Access release.</para>
83
84 <section id="eltf-target-table-ELTF_T_MANIFEST_DIR">
85 <title>MACHINE ELTF_T_MANIFEST_DIR - Information</title>
86
87 <para><informaltable>
88 <tgroup cols="2">
89 <colspec colwidth="6*" />
90
91 <colspec colwidth="9*" />
92
93 <tbody>
94 <row>
95 <entry>Target official name</entry>
96
97 <entry>ELTF_T_NAME</entry>
98 </row>
99
100 <row>
101 <entry>Architecture and Description</entry>
102
103 <entry>ELTF_T_ARC_DESC</entry>
104 </row>
105
106 <row>
107 <entry>Link to target datasheet</entry>
108
109 <entry>See <ulink
110 url="ELTF_T_DS_URL">ELTF_T_DS_TXTURL</ulink></entry>
111 </row>
112
113 <row>
114 <entry>Poky version</entry>
115
116 <entry>ELTF_T_POKY_VER</entry>
117 </row>
118
119 <row>
120 <entry>GCC version</entry>
121
122 <entry>ELTF_T_GCC_VER</entry>
123 </row>
124
125 <row>
126 <entry>Linux Kernel Version</entry>
127
128 <entry>ELTF_T_KERN_VER</entry>
129 </row>
130
131 <row>
132 <entry>Supported Drivers</entry>
133
134 <entry>ELTF_T_DRIVERS</entry>
135 </row>
136
137 <row>
138 <entry>Enea rpm folder for downloading RPM packages for this
139 target</entry>
140
141 <entry><ulink
142 url="ELTF_T_EL_RPM_URL">ELTF_T_EL_RPM_TXTURL</ulink></entry>
143 </row>
144 </tbody>
145 </tgroup>
146 </informaltable></para>
147 </section>
148
149 <!-- ELTFADD_MORE_TARGET_SECTIONS_BELOW_IF_NEEDED -->
150 </section>
151</section> \ No newline at end of file
diff --git a/doc/book-enea-nfv-access-reference-guide-intel/doc/eltf_params_updated.xml b/doc/book-enea-nfv-access-reference-guide-intel/doc/eltf_params_updated.xml
deleted file mode 100644
index f5dcbb9..0000000
--- a/doc/book-enea-nfv-access-reference-guide-intel/doc/eltf_params_updated.xml
+++ /dev/null
@@ -1,165 +0,0 @@
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
3"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
4<section id="eltf_created_params">
5 <title>File with Parameters in the Book Auto-updated by ELFT</title>
6
7 <note>
8 <para>See the <emphasis
9 role="bold">eltf_params_updated_template_howto_use.txt</emphasis> text
10 file for description of how to create the final <emphasis
11 role="bold">eltf_params_updated.xml</emphasis> from this template and for
12 all <emphasis role="bold">REQUIREMENTS</emphasis>. Use the command
13 "<emphasis role="bold">make eltf</emphasis>" to extract a full list of all
14 ELTF variables, which always begins with ELTF_ and don't only rely on the
15 howto text file list! The plan is that ELTF will auto-update this when
16 needed.</para>
17 </note>
18
19 <section id="host_prereq">
20 <title>Common Parameters</title>
21
22 <bridgehead>A programlisting, ID
23 "eltf-prereq-apt-get-commands-host"</bridgehead>
24
25 <para id="eltf-prereq-apt-get-commands-host"><programlisting># Host Ubuntu 14.04.5 LTS 64bit
26sudo apt-get -y update
27sudo apt-get -y install sed wget subversion git-core coreutils unzip texi2html \
28 texinfo libsdl1.2-dev docbook-utils fop gawk python-pysqlite2 diffstat \
29 make gcc build-essential xsltproc g++ desktop-file-utils chrpath \
30 libgl1-mesa-dev libglu1-mesa-dev autoconf automake groff libtool xterm \
31 libxml-parser-perl</programlisting></para>
32
33 <bridgehead>A programlisting, ID
34 "eltf-getting-repo-install-command"</bridgehead>
35
36 <para id="eltf-getting-repo-install-command"><programlisting>mkdir -p ~/bin
37curl https://storage.googleapis.com/git-repo-downloads/repo &gt; ~/bin/repo
38chmod a+x ~/bin/repo
39export PATH=~/bin:$PATH</programlisting></para>
40
41 <bridgehead>Several phrase elements, various IDs. Ensure EL_REL_VER is
42 correct also compared to the "previous" REL VER in pardoc-distro.xml
43 "prev_baseline".</bridgehead>
44
45 <para id="EneaLinux_REL_VER"><phrase>2.2</phrase></para>
46
47 <para id="Yocto_VER"><phrase>2.4</phrase></para>
48
49 <para id="Yocto_NAME"><phrase>rocko</phrase></para>
50
51 <para id="ULINK_YOCTO_PROJECT_DOWNLOAD"><ulink
52 url="http://www.yoctoproject.org/downloads/core/rocko/242">http://www.yoctoproject.org/downloads/core/rocko/242</ulink></para>
53
54 <para id="ULINK_ENEA_LINUX_URL"><ulink
55 url="https://linux.enea.com/6">https://linux.enea.com/6</ulink></para>
56
57 <bridgehead>A programlisting, ID "eltf-repo-cloning-enea-linux". Use
58 $MACHINE/default.xml as parameter, where MACHINE is one of the target
59 directory names in the manifest.</bridgehead>
60
61 <para id="eltf-repo-cloning-enea-linux"><programlisting>mkdir enea-linux
62cd enea-linux
63repo init -u git@git.enea.com:linux/manifests/el_manifests-virtualization.git \
64 -b refs/tags/EL6 -m $MACHINE/default.xml
65repo sync</programlisting></para>
66
67 <bridgehead>A table with ONE row, only the row with ID
68 "eltf-eclipse-version-row" is included in the book. MANUALLY in book, set
69 condition hidden if eclipse is not in the release. Do this both in
70 template.xml and updated.xml.</bridgehead>
71
72 <informaltable>
73 <tgroup cols="1">
74 <tbody>
75 <row condition="hidden" id="eltf-eclipse-version-row">
76 <entry>Eclipse version 4.3 (Mars) plus command line development
77 tools are included in this Enea NFV Access release.</entry>
78 </row>
79 </tbody>
80 </tgroup>
81 </informaltable>
82
83 <bridgehead>Below is one big section with title "Supported Targets with
84 Parameters". The entire section is included completely in the book via ID
85 "eltf-target-tables-section" and shall be LAST in the template. The
86 template contains ONE target subsection. COPY/APPEND it, if multiple
87 targets exist in the release and optionally add rows with additional
88 target parameters in each target subsection table.</bridgehead>
89 </section>
90
91 <section id="eltf-target-tables-section">
92 <title>Supported Reference Boards with Parameters</title>
93
94 <para>The tables below describes the target(s) supported in this Enea NFV
95 Access release.</para>
96
97 <section id="eltf-target-table-p2041rdb">
98 <title>MACHINE p2041rdb - Information</title>
99
100 <para><informaltable>
101 <tgroup cols="2">
102 <colspec colwidth="6*" />
103
104 <colspec colwidth="9*" />
105
106 <tbody>
107 <row>
108 <entry>Target official name</entry>
109
110 <entry>P2041RDB</entry>
111 </row>
112
113 <row>
114 <entry>Architecture and Description</entry>
115
116 <entry>Power, e500mc</entry>
117 </row>
118
119 <row>
120 <entry>Link to target datasheet</entry>
121
122 <entry>See <ulink
123 url="http://www.nxp.com/products/microcontrollers-and-processors/power-architecture-processors/qoriq-power-architecture-processors/p2041-qoriq-reference-design-board:RDP2041BOARD">link
124 to NXP's datasheet</ulink></entry>
125 </row>
126
127 <row>
128 <entry>Poky version</entry>
129
130 <entry>Git-commit-id:
131 75ca53211488a3e268037a44ee2a7ac5c7181bd2</entry>
132 </row>
133
134 <row>
135 <entry>GCC version</entry>
136
137 <entry>5.3</entry>
138 </row>
139
140 <row>
141 <entry>Linux Kernel Version</entry>
142
143 <entry>3.12</entry>
144 </row>
145
146 <row>
147 <entry>Supported Drivers</entry>
148
149 <entry>Ethernet, I2C, SPI, PCI Express, USB, Flash,
150 SD/SDHC/SDXC, RTC</entry>
151 </row>
152
153 <row>
154 <entry>Enea rpm folder for downloading RPM packages for this
155 target</entry>
156
157 <entry><ulink
158 url="https://linux.enea.com/6/p2041rgb/rpm">https://linux.enea.com/6/p2041rgb/rpm</ulink></entry>
159 </row>
160 </tbody>
161 </tgroup>
162 </informaltable></para>
163 </section>
164 </section>
165</section>
diff --git a/doc/book-enea-nfv-access-reference-guide-intel/doc/hypervisor_virtualization.xml b/doc/book-enea-nfv-access-reference-guide-intel/doc/hypervisor_virtualization.xml
deleted file mode 100644
index cf712b4..0000000
--- a/doc/book-enea-nfv-access-reference-guide-intel/doc/hypervisor_virtualization.xml
+++ /dev/null
@@ -1,744 +0,0 @@
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
3"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
4<chapter id="hypervisor_virt">
5 <title>Hypervisor Virtualization</title>
6
7 <para>The KVM, Kernel-based Virtual Machine, is a virtualization
8 infrastructure for the Linux kernel which turns it into a hypervisor. KVM
9 requires a processor with a hardware virtualization extension.</para>
10
11 <para>KVM uses QEMU, an open source machine emulator and virtualizer, to
12 virtualize a complete system. With KVM it is possible to run multiple guests
13 of a variety of operating systems, each with a complete set of virtualized
14 hardware.</para>
15
16 <section id="launch_virt_machine">
17 <title>Launching a Virtual Machine</title>
18
19 <para>QEMU can make use of KVM when running a target architecture that is
20 the same as the host architecture. For instance, when running
21 qemu-system-x86_64 on an x86-64 compatible processor (containing
22 virtualization extensions Intel VT or AMD-V), you can take advantage of
23 the KVM acceleration, giving you benefit for your host and your guest
24 system.</para>
25
26 <para>Enea NFV Access includes an optimizied version of QEMU with KVM-only
27 support. To use KVM pass<command> --enable-kvm</command> to QEMU.</para>
28
29 <para>The following is an example of starting a guest:</para>
30
31 <programlisting>taskset -c 0,1 qemu-system-x86_64 \
32-cpu host -M q35 -smp cores=2,sockets=1 \
33-vcpu 0,affinity=0 -vcpu 1,affinity=1 \
34-enable-kvm -nographic \
35-kernel bzImage \
36-drive file=enea-nfv-access-guest-qemux86-64.ext4,if=virtio,format=raw \
37-append 'root=/dev/vda console=ttyS0,115200' \
38-m 4096 \
39-object memory-backend-file,id=mem,size=4096M,mem-path=/dev/hugepages,share=on \
40-numa node,memdev=mem -mem-prealloc</programlisting>
41 </section>
42
43 <section id="qemu_boot">
44 <title>Main QEMU boot options</title>
45
46 <para>Below are detailed all the pertinent boot options for the QEMU
47 emulator:</para>
48
49 <itemizedlist>
50 <listitem>
51 <para>SMP - at least 2 cores should be enabled in order to isolate
52 application(s) running in virtual machine(s) on specific cores for
53 better performance.</para>
54
55 <programlisting>-smp cores=2,threads=1,sockets=1 \</programlisting>
56 </listitem>
57
58 <listitem>
59 <para>CPU affinity - associate virtual CPUs with physical CPUs and
60 optionally assign a default real time priority to the virtual CPU
61 process in the host kernel. This option allows you to start qemu vCPUs
62 on isolated physical CPUs.</para>
63
64 <programlisting>-vcpu 0,affinity=0 \</programlisting>
65 </listitem>
66
67 <listitem>
68 <para>Hugepages - KVM guests can be deployed with huge page memory
69 support in order to reduce memory consumption and improve performance,
70 by reducing CPU cache usage. By using huge pages for a KVM guest, less
71 memory is used for page tables and TLB (Translation Lookaside Buffer)
72 misses are reduced, thereby significantly increasing performance,
73 especially for memory-intensive situations.</para>
74
75 <programlisting>-object memory-backend-file,id=mem,size=4096M,mem-path=/dev/hugepages,share=on \</programlisting>
76 </listitem>
77
78 <listitem>
79 <para>Memory preallocation - preallocate huge pages at startup time
80 can improve performance but it may affect the qemu boot time.</para>
81
82 <programlisting>-mem-prealloc \</programlisting>
83 </listitem>
84
85 <listitem>
86 <para>Enable realtime characteristics - run qemu with realtime
87 features. While that mildly implies that "-realtime" alone might do
88 something, it's just an identifier for options that are partially
89 realtime. If you're running in a realtime or low latency environment,
90 you don't want your pages to be swapped out and mlock does that, thus
91 mlock=on. If you want VM density, then you may want swappable VMs,
92 thus mlock=off.</para>
93
94 <programlisting>-realtime mlock=on \</programlisting>
95 </listitem>
96 </itemizedlist>
97
98 <para>If the hardware does not have an IOMMU (known as "Intel VT-d" on
99 Intel-based machines and "AMD I/O Virtualization Technology" on AMD-based
100 machines), it will not be possible to assign devices in KVM.
101 Virtualization Technology features (VT-d, VT-x, etc.) must be enabled from
102 BIOS on the host target before starting a virtual machine.</para>
103 </section>
104
105 <section id="net_in_guest">
106 <title>Networking in guest</title>
107
108 <section id="vhost-user-support">
109 <title>Using vhost-user support</title>
110
111 <para>The goal of vhost-user is to implement a Virtio transport, staying
112 as close as possible to the vhost paradigm of using shared memory,
113 ioeventfds and irqfds. A UNIX domain socket based mechanism allows the
114 set up of resources used by a number of Vrings shared between two
115 userspace processes, which will be placed in shared memory.</para>
116
117 <para>To run QEMU with the vhost-user backend, you have to provide the
118 named UNIX domain socket which needs to be already opened by the
119 backend:</para>
120
121 <programlisting>-object memory-backend-file,id=mem,size=4096M,mem-path=/dev/hugepages,share=on \
122-chardev socket,id=char0,path=/var/run/openvswitch/vhost-user1 \
123-netdev type=vhost-user,id=mynet1,chardev=char0,vhostforce \
124-device virtio-net-pci,netdev=mynet1,mac=52:54:00:00:00:01 \</programlisting>
125
126 <para>The vHost User standard uses a client-server model. The server
127 creates and manages the vHost User sockets and the client connects to
128 the sockets created by the server. It is recommended to use QEMU as
129 server so the vhost-user client can be restarted without affecting the
130 server, otherwise if the server side dies all clients need to be
131 restarted.</para>
132
133 <para>Using vhost-user in QEMU as server will offer the flexibility to
134 stop and start the virtual machine with no impact on virtual switch from
135 the host (vhost-user-client).</para>
136
137 <programlisting>-chardev socket,id=char0,path=/var/run/openvswitch/vhost-user1,server \</programlisting>
138 </section>
139
140 <section id="tap-interface">
141 <title>Using TAP Interfaces</title>
142
143 <para>QEMU can use TAP interfaces to provide full networking capability
144 for the guest OS:</para>
145
146 <programlisting>-netdev tap,id=net0,ifname=tap0,script=no,downscript=no \
147-device virtio-net-pci,netdev=net0,mac=22:EA:FB:A8:25:AE \</programlisting>
148 </section>
149
150 <section id="vfio-passthrough">
151 <title>VFIO passthrough VF (SR-IOV) to guest</title>
152
153 <para>KVM hypervisor support for attaching PCI devices on the host
154 system to guests. PCI passthrough allows guests to have exclusive access
155 to PCI devices for a range of tasks. PCI passthrough allows PCI devices
156 to appear and behave as if they were physically attached to the guest
157 operating system.</para>
158
159 <para>Preparing an Intel system for PCI passthrough:</para>
160
161 <itemizedlist>
162 <listitem>
163 <para>Enable the Intel VT-d extensions in BIOS</para>
164 </listitem>
165
166 <listitem>
167 <para>Activate Intel VT-d in the kernel by using
168 <literal>intel_iommu=on</literal> as a kernel boot parameter</para>
169 </listitem>
170
171 <listitem>
172 <para>Allow unsafe interrupts in case the system doesn't support
173 interrupt remapping. This can be done using
174 <literal>vfio_iommu_type1.allow_unsafe_interrupts=1</literal> as a
175 boot kernel parameter.</para>
176 </listitem>
177 </itemizedlist>
178
179 <para>Create guest with direct passthrough via VFIO framework like
180 so:</para>
181
182 <programlisting>-device vfio-pci,host=0000:03:10.2 \</programlisting>
183
184 <para>On the host, one or more Virtual Functions (VFs) must be created in
185 order to be allocated for a guest network to access, before starting
186 QEMU:</para>
187
188 <programlisting>$ echo 2 &gt; /sys/class/net/eno3/device/sriov_numvfs
189$ modprobe vfio_pci
190$ dpdk-devbind --bind=vfio-pci 0000:03:10.2</programlisting>
191 </section>
192
193 <section id="multiqueue">
194 <title>Multi-queue</title>
195
196 <para>In order to ensure that network performance scales as the number
197 of vCPUs increases, multi-queue support can be used in QEMU.</para>
198
199 <section id="qemu-multiqueue-support">
200 <title>QEMU multi queue support configuration</title>
201
202 <programlisting>-chardev socket,id=char0,path=/var/run/openvswitch/vhost-user1 \
203-netdev type=vhost-user,id=net0,chardev=char0,queues=2 \
204-device virtio-net-pci,netdev=net0,mac=22:EA:FB:A8:25:AE,mq=on,vectors=6
205where vectors is calculated as: 2 + 2 * queues number.</programlisting>
206 </section>
207
208 <section id="inside-guest">
209 <title>Inside guest</title>
210
211 <para>Linux kernel virtio-net driver (one queue is enabled by
212 default):</para>
213
214 <programlisting>$ ethtool -L combined 2 eth0
215DPDK Virtio PMD
216$ testpmd -c 0x7 -- -i --rxq=2 --txq=2 --nb-cores=2 ...</programlisting>
217
218 <para>For QEMU documentation please see: <ulink
219 url="https://qemu.weilnetz.de/doc/qemu-doc.html">https://qemu.weilnetz.de/doc/qemu-doc.html</ulink>.</para>
220 </section>
221 </section>
222 </section>
223
224 <section id="libvirt">
225 <title>Libvirt</title>
226
227 <para>One way to manage guests in Enea NFV Access is by using
228 <literal>libvirt</literal>. Libvirt is used in conjunction with a daemon
229 (<literal>libvirtd</literal>) and a command line utility (virsh) to manage
230 virtualized environments.</para>
231
232 <para>The libvirt library is a hypervisor-independent virtualization API
233 and toolkit that is able to interact with the virtualization capabilities
234 of a range of operating systems. Libvirt provides a common, generic and
235 stable layer to securely manage domains on a node. As nodes may be
236 remotely located, libvirt provides all methods required to provision,
237 create, modify, monitor, control, migrate and stop the domains, within the
238 limits of hypervisor support for these operations.</para>
239
240 <para>The libvirt daemon runs on the Enea NFV Access host. All tools built
241 on libvirt API connect to the daemon to request the desired operation, and
242 to collect information about the configuration and resources of the host
243 system and guests. <literal>virsh</literal> is a command line interface
244 tool for managing guests and the hypervisor. The virsh tool is built on
245 the libvirt management API.</para>
246
247 <para><emphasis role="bold">Major functionality provided by
248 libvirt</emphasis></para>
249
250 <para>The following is a summary from the libvirt <ulink
251 url="http://wiki.libvirt.org/page/FAQ#What_is_libvirt.3F">home
252 page</ulink> describing the major libvirt features:</para>
253
254 <itemizedlist>
255 <listitem>
256 <para><emphasis role="bold">VM management:</emphasis> Various domain
257 lifecycle operations such as start, stop, pause, save, restore, and
258 migrate. Hotplug operations for many device types including disk and
259 network interfaces, memory, and cpus.</para>
260 </listitem>
261
262 <listitem>
263 <para><emphasis role="bold">Remote machine support:</emphasis> All
264 libvirt functionality is accessible on any machine running the libvirt
265 daemon, including remote machines. A variety of network transports are
266 supported for connecting remotely, with the simplest being
267 <literal>SSH</literal>, which requires no extra explicit
268 configuration. For more information, see: <ulink
269 url="http://libvirt.org/remote.html">http://libvirt.org/remote.html</ulink>.</para>
270 </listitem>
271
272 <listitem>
273 <para><emphasis role="bold">Network interface management:</emphasis>
274 Any host running the libvirt daemon can be used to manage physical and
275 logical network interfaces. Enumerate existing interfaces, as well as
276 configure (and create) interfaces, bridges, vlans, and bond devices.
277 For more details see: <ulink
278 url="https://fedorahosted.org/netcf/">https://fedorahosted.org/netcf/</ulink>.</para>
279 </listitem>
280
281 <listitem>
282 <para><emphasis role="bold">Virtual NAT and Route based
283 networking:</emphasis> Any host running the libvirt daemon can manage
284 and create virtual networks. Libvirt virtual networks use firewall
285 rules to act as a router, providing VMs transparent access to the host
286 machines network. For more information, see: <ulink
287 url="http://libvirt.org/archnetwork.html">http://libvirt.org/archnetwork.html</ulink>.</para>
288 </listitem>
289
290 <listitem>
291 <para><emphasis role="bold">Storage management:</emphasis> Any host
292 running the libvirt daemon can be used to manage various types of
293 storage: create file images of various formats (raw, qcow2, etc.),
294 mount NFS shares, enumerate existing LVM volume groups, create new LVM
295 volume groups and logical volumes, partition raw disk devices, mount
296 iSCSI shares, and much more. For more details, see: <ulink
297 url="http://libvirt.org/storage.html">http://libvirt.org/storage.html</ulink>.</para>
298 </listitem>
299
300 <listitem>
301 <para><emphasis role="bold">Libvirt Configuration:</emphasis> A
302 properly running libvirt requires that the following elements be in
303 place:</para>
304
305 <itemizedlist>
306 <listitem>
307 <para>Configuration files, located in the directory
308 <literal>/etc/libvirt</literal>. They include the daemon's
309 configuration file <literal>libvirtd.conf</literal>, and
310 hypervisor-specific configuration files, like
311 <literal>qemu.conf</literal> for the QEMU.</para>
312 </listitem>
313
314 <listitem>
315 <para>A running libvirtd daemon. The daemon is started
316 automatically in Enea NFV Access host.</para>
317 </listitem>
318
319 <listitem>
320 <para>Configuration files for the libvirt domains, or guests, to
321 be managed by the KVM host. The specifics for guest domains shall
322 be defined in an XML file of a format specified at <ulink
323 url="http://libvirt.org/formatdomain.html">http://libvirt.org/formatdomain.html</ulink>.
324 XML formats for other structures are specified at <ulink type=""
325 url="http://libvirt.org/format.html">http://libvirt.org/format.html</ulink>.</para>
326 </listitem>
327 </itemizedlist>
328 </listitem>
329 </itemizedlist>
330
331 <section id="boot-kvm-guest">
332 <title>Booting a KVM Guest</title>
333
334 <para>There are several ways to boot a KVM guest. Here we describe how
335 to boot using a raw image. A direct kernel boot can be performed by
336 transferring the guest kernel and the file system files to the host and
337 specifying a <literal>&lt;kernel&gt;</literal> and an
338 <literal>&lt;initrd&gt;</literal> element inside the
339 <literal>&lt;os&gt;</literal> element of the guest XML file, as in the
340 following example:</para>
341
342 <programlisting>&lt;os&gt;
343 &lt;kernel&gt;bzImage&lt;/kernel&gt;
344&lt;/os&gt;
345&lt;devices&gt;
346 &lt;disk type='file' device='disk'&gt;
347 &lt;driver name='qemu' type='raw' cache='none'/&gt;
348 &lt;source file='enea-nfv-access-guest-qemux86-64.ext4'/&gt;
349 &lt;target dev='vda' bus='virtio'/&gt;
350 &lt;/disk&gt;
351&lt;/devices&gt;</programlisting>
352 </section>
353
354 <section id="start-guest">
355 <title>Starting a Guest</title>
356
357 <para>Command <command>virsh create</command> starts a guest:</para>
358
359 <programlisting>virsh create example-guest-x86.xml</programlisting>
360
361 <para>If further configurations are needed before the guest is reachable
362 through <literal>ssh</literal>, a console can be started using command
363 <command>virsh console</command>. The example below shows how to start a
364 console where kvm-example-guest is the name of the guest defined in the
365 guest XML file:</para>
366
367 <programlisting>virsh console kvm-example-guest</programlisting>
368
369 <para>This requires that the guest domain has a console configured in
370 the guest XML file:</para>
371
372 <programlisting>&lt;os&gt;
373 &lt;cmdline&gt;console=ttyS0,115200&lt;/cmdline&gt;
374&lt;/os&gt;
375&lt;devices&gt;
376 &lt;console type='pty'&gt;
377 &lt;target type='serial' port='0'/&gt;
378 &lt;/console&gt;
379&lt;/devices&gt;</programlisting>
380 </section>
381
382 <section id="isolation">
383 <title>Isolation</title>
384
385 <para>It may be desirable to isolate execution in a guest, to a specific
386 guest core. It might also be desirable to run a guest on a specific host
387 core.</para>
388
389 <para>To pin the virtual CPUs of the guest to specific cores, configure
390 the <literal>&lt;cputune&gt;</literal> contents as follows:</para>
391
392 <orderedlist>
393 <listitem>
394 <para>First explicitly state on which host core each guest core
395 shall run, by mapping <literal>vcpu</literal> to
396 <literal>cpuset</literal> in the <literal>&lt;vcpupin&gt;</literal>
397 tag.</para>
398 </listitem>
399
400 <listitem>
401 <para>In the <literal>&lt;cputune&gt;</literal> tag it is further
402 possible to specify on which CPU the emulator shall run by adding
403 the cpuset to the <literal>&lt;emulatorpin&gt;</literal> tag.</para>
404
405 <programlisting>&lt;vcpu placement='static'&gt;2&lt;/vcpu&gt;
406&lt;cputune&gt;
407 &lt;vcpupin vcpu='0' cpuset='2'/&gt;
408 &lt;vcpupin vcpu='1' cpuset='3'/&gt;
409 &lt;emulatorpin cpuset="2"/&gt;
410&lt;/cputune&gt;</programlisting>
411
412 <para><literal>libvirt</literal> will group all threads belonging to
413 a qemu instance into cgroups that will be created for that purpose.
414 It is possible to supply a base name for those cgroups using the
415 <literal>&lt;resource&gt;</literal> tag:</para>
416
417 <programlisting>&lt;resource&gt;
418 &lt;partition&gt;/rt&lt;/partition&gt;
419&lt;/resource&gt;</programlisting>
420 </listitem>
421 </orderedlist>
422 </section>
423
424 <section id="network-libvirt">
425 <title>Networking using libvirt</title>
426
427 <para>Command <command>virsh net-create</command> starts a network. If
428 any networks are listed in the guest XML file, those networks must be
429 started before the guest is started. As an example, if the network is
430 defined in a file named example-net.xml, it is started as
431 follows:</para>
432
433 <programlisting>virsh net-create example-net.xml
434&lt;network&gt;
435 &lt;name&gt;sriov&lt;/name&gt;
436 &lt;forward mode='hostdev' managed='yes'&gt;
437 &lt;pf dev='eno3'/&gt;
438 &lt;/forward&gt;
439&lt;/network&gt;</programlisting>
440
441 <para><literal>libvirt</literal> is a virtualization API that supports
442 virtual network creation. These networks can be connected to guests and
443 containers by referencing the network in the guest XML file. It is
444 possible to have a virtual network persistently running on the host by
445 starting the network with command <command>virsh net-define</command>
446 instead of the previously mentioned <command>virsh
447 net-create</command>.</para>
448
449 <para>An example for the sample network defined in
450 <literal>meta-vt/recipes-example/virt-example/files/example-net.xml</literal>:</para>
451
452 <programlisting>virsh net-define example-net.xml</programlisting>
453
454 <para>Command <command>virsh net-autostart</command> enables a
455 persistent network to start automatically when the libvirt daemon
456 starts:</para>
457
458 <programlisting>virsh net-autostart example-net</programlisting>
459
460 <para>Guest configuration file (xml) must be updated to access newly
461 created network like so:</para>
462
463 <programlisting> &lt;interface type='network'&gt;
464 &lt;source network='sriov'/&gt;
465 &lt;/interface&gt;</programlisting>
466
467 <para>The following presented here are a few modes of network access
468 from guest using <command>virsh</command>:</para>
469
470 <itemizedlist>
471 <listitem>
472 <para><emphasis role="bold">vhost-user interface</emphasis></para>
473
474 <para>See the Open vSwitch chapter on how to create vhost-user
475 interface using Open vSwitch. Currently there is no Open vSwitch
476 support for networks that are managed by libvirt (e.g. NAT). As of
477 now, only bridged networks are supported (those where the user has
478 to manually create the bridge).</para>
479
480 <programlisting> &lt;interface type='vhostuser'&gt;
481 &lt;mac address='00:00:00:00:00:01'/&gt;
482 &lt;source type='unix' path='/var/run/openvswitch/vhost-user1' mode='client'/&gt;
483 &lt;model type='virtio'/&gt;
484 &lt;driver queues='1'&gt;
485 &lt;host mrg_rxbuf='off'/&gt;
486 &lt;/driver&gt;
487 &lt;/interface&gt;</programlisting>
488 </listitem>
489
490 <listitem>
491 <para><emphasis role="bold">PCI passthrough
492 (SR-IOV)</emphasis></para>
493
494 <para>KVM hypervisor support for attaching PCI devices on the host
495 system to guests. PCI passthrough allows guests to have exclusive
496 access to PCI devices for a range of tasks. PCI passthrough allows
497 PCI devices to appear and behave as if they were physically attached
498 to the guest operating system.</para>
499
500 <para>Preparing an Intel system for PCI passthrough is done like
501 so:</para>
502
503 <itemizedlist>
504 <listitem>
505 <para>Enable the Intel VT-d extensions in BIOS</para>
506 </listitem>
507
508 <listitem>
509 <para>Activate Intel VT-d in the kernel by using
510 <literal>intel_iommu=on</literal> as a kernel boot
511 parameter</para>
512 </listitem>
513
514 <listitem>
515 <para>Allow unsafe interrupts in case the system doesn't support
516 interrupt remapping. This can be done using
517 <literal>vfio_iommu_type1.allow_unsafe_interrupts=1</literal> as
518 a boot kernel parameter.</para>
519 </listitem>
520 </itemizedlist>
521
522 <para>VFs must be created on the host before starting the
523 guest:</para>
524
525 <programlisting>$ echo 2 &gt; /sys/class/net/eno3/device/sriov_numvfs
526$ modprobe vfio_pci
527$ dpdk-devbind.py --bind=vfio-pci 0000:03:10.0
528 &lt;interface type='hostdev' managed='yes'&gt;
529 &lt;source&gt;
530 &lt;address type='pci' domain='0x0' bus='0x03' slot='0x10' function='0x0'/&gt;
531 &lt;/source&gt;
532 &lt;mac address='52:54:00:6d:90:02'/&gt;
533 &lt;/interface&gt;</programlisting>
534 </listitem>
535
536 <listitem>
537 <para><emphasis role="bold">Bridge interface</emphasis></para>
538
539 <para>In case an OVS bridge exists on host, it can be used to
540 connect the guest:</para>
541
542 <programlisting> &lt;interface type='bridge'&gt;
543 &lt;mac address='52:54:00:71:b1:b6'/&gt;
544 &lt;source bridge='ovsbr0'/&gt;
545 &lt;virtualport type='openvswitch'/&gt;
546 &lt;address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/&gt;
547 &lt;/interface&gt;</programlisting>
548
549 <para>For further details on the network XML format, see <ulink
550 url="http://libvirt.org/formatnetwork.html">http://libvirt.org/formatnetwork.html</ulink>.</para>
551 </listitem>
552 </itemizedlist>
553 </section>
554
555 <section id="libvirt-guest-config-ex">
556 <title>Libvirt guest configuration examples</title>
557
558 <section id="guest-config-vhost-user-interface">
559 <title>Guest configuration with vhost-user interface</title>
560
561 <programlisting>&lt;domain type='kvm'&gt;
562 &lt;name&gt;vm_vhost&lt;/name&gt;
563 &lt;uuid&gt;4a9b3f53-fa2a-47f3-a757-dd87720d9d1d&lt;/uuid&gt;
564 &lt;memory unit='KiB'&gt;4194304&lt;/memory&gt;
565 &lt;currentMemory unit='KiB'&gt;4194304&lt;/currentMemory&gt;
566 &lt;memoryBacking&gt;
567 &lt;hugepages&gt;
568 &lt;page size='1' unit='G' nodeset='0'/&gt;
569 &lt;/hugepages&gt;
570 &lt;/memoryBacking&gt;
571 &lt;vcpu placement='static'&gt;2&lt;/vcpu&gt;
572 &lt;cputune&gt;
573 &lt;shares&gt;4096&lt;/shares&gt;
574 &lt;vcpupin vcpu='0' cpuset='4'/&gt;
575 &lt;vcpupin vcpu='1' cpuset='5'/&gt;
576 &lt;emulatorpin cpuset='4,5'/&gt;
577 &lt;/cputune&gt;
578 &lt;os&gt;
579 &lt;type arch='x86_64' machine='pc'&gt;hvm&lt;/type&gt;
580 &lt;kernel&gt;/mnt/qemu/bzImage&lt;/kernel&gt;
581 &lt;cmdline&gt;root=/dev/vda console=ttyS0,115200&lt;/cmdline&gt;
582 &lt;boot dev='hd'/&gt;
583 &lt;/os&gt;
584 &lt;features&gt;
585 &lt;acpi/&gt;
586 &lt;apic/&gt;
587 &lt;/features&gt;
588 &lt;cpu mode='host-model'&gt;
589 &lt;model fallback='allow'/&gt;
590 &lt;topology sockets='2' cores='1' threads='1'/&gt;
591 &lt;numa&gt;
592 &lt;cell id='0' cpus='0-1' memory='4194304' unit='KiB' memAccess='shared'/&gt;
593 &lt;/numa&gt;
594 &lt;/cpu&gt;
595 &lt;on_poweroff&gt;destroy&lt;/on_poweroff&gt;
596 &lt;on_reboot&gt;restart&lt;/on_reboot&gt;
597 &lt;on_crash&gt;destroy&lt;/on_crash&gt;
598 &lt;devices&gt;
599 &lt;emulator&gt;/usr/bin/qemu-system-x86_64&lt;/emulator&gt;
600 &lt;disk type='file' device='disk'&gt;
601 &lt;driver name='qemu' type='raw' cache='none'/&gt;
602 &lt;source file='/mnt/qemu/enea-nfv-access-guest-qemux86-64.ext4'/&gt;
603 &lt;target dev='vda' bus='virtio'/&gt;
604 &lt;/disk&gt;
605 &lt;interface type='vhostuser'&gt;
606 &lt;mac address='00:00:00:00:00:01'/&gt;
607 &lt;source type='unix' path='/var/run/openvswitch/vhost-user1' mode='client'/&gt;
608 &lt;model type='virtio'/&gt;
609 &lt;driver queues='1'&gt;
610 &lt;host mrg_rxbuf='off'/&gt;
611 &lt;/driver&gt;
612 &lt;/interface&gt;
613 &lt;serial type='pty'&gt;
614 &lt;target port='0'/&gt;
615 &lt;/serial&gt;
616 &lt;console type='pty'&gt;
617 &lt;target type='serial' port='0'/&gt;
618 &lt;/console&gt;
619 &lt;/devices&gt;
620&lt;/domain&gt;</programlisting>
621 </section>
622
623 <section id="guest-config-pci-passthrough">
624 <title>Guest configuration with PCI passthrough</title>
625
626 <programlisting>&lt;domain type='kvm'&gt;
627 &lt;name&gt;vm_sriov1&lt;/name&gt;
628 &lt;uuid&gt;4a9b3f53-fa2a-47f3-a757-dd87720d9d1d&lt;/uuid&gt;
629 &lt;memory unit='KiB'&gt;4194304&lt;/memory&gt;
630 &lt;currentMemory unit='KiB'&gt;4194304&lt;/currentMemory&gt;
631 &lt;memoryBacking&gt;
632 &lt;hugepages&gt;
633 &lt;page size='1' unit='G' nodeset='0'/&gt;
634 &lt;/hugepages&gt;
635 &lt;/memoryBacking&gt;
636 &lt;vcpu&gt;2&lt;/vcpu&gt;
637 &lt;os&gt;
638 &lt;type arch='x86_64' machine='q35'&gt;hvm&lt;/type&gt;
639 &lt;kernel&gt;/mnt/qemu/bzImage&lt;/kernel&gt;
640 &lt;cmdline&gt;root=/dev/vda console=ttyS0,115200&lt;/cmdline&gt;
641 &lt;boot dev='hd'/&gt;
642 &lt;/os&gt;
643 &lt;features&gt;
644 &lt;acpi/&gt;
645 &lt;apic/&gt;
646 &lt;/features&gt;
647 &lt;cpu mode='host-model'&gt;
648 &lt;model fallback='allow'/&gt;
649 &lt;topology sockets='1' cores='2' threads='1'/&gt;
650 &lt;numa&gt;
651 &lt;cell id='0' cpus='0' memory='4194304' unit='KiB' memAccess='shared'/&gt;
652 &lt;/numa&gt;
653 &lt;/cpu&gt;
654 &lt;on_poweroff&gt;destroy&lt;/on_poweroff&gt;
655 &lt;on_reboot&gt;restart&lt;/on_reboot&gt;
656 &lt;on_crash&gt;destroy&lt;/on_crash&gt;
657 &lt;devices&gt;
658 &lt;emulator&gt;/usr/bin/qemu-system-x86_64&lt;/emulator&gt;
659 &lt;disk type='file' device='disk'&gt;
660 &lt;driver name='qemu' type='raw' cache='none'/&gt;
661 &lt;source file='/mnt/qemu/enea-nfv-access-guest-qemux86-64.ext4'/&gt;
662 &lt;target dev='vda' bus='virtio'/&gt;
663 &lt;/disk&gt;
664 &lt;interface type='hostdev' managed='yes'&gt;
665 &lt;source&gt;
666 &lt;address type='pci' domain='0x0' bus='0x03' slot='0x10' function='0x0'/&gt;
667 &lt;/source&gt;
668 &lt;mac address='52:54:00:6d:90:02'/&gt;
669 &lt;/interface&gt;
670 &lt;serial type='pty'&gt;
671 &lt;target port='0'/&gt;
672 &lt;/serial&gt;
673 &lt;console type='pty'&gt;
674 &lt;target type='serial' port='0'/&gt;
675 &lt;/console&gt;
676 &lt;/devices&gt;
677&lt;/domain&gt;</programlisting>
678 </section>
679
680 <section id="guest-config-bridge-interface">
681 <title>Guest configuration with bridge interface</title>
682
683 <programlisting>&lt;domain type='kvm'&gt;
684 &lt;name&gt;vm_bridge&lt;/name&gt;
685 &lt;uuid&gt;4a9b3f53-fa2a-47f3-a757-dd87720d9d1d&lt;/uuid&gt;
686 &lt;memory unit='KiB'&gt;4194304&lt;/memory&gt;
687 &lt;currentMemory unit='KiB'&gt;4194304&lt;/currentMemory&gt;
688 &lt;memoryBacking&gt;
689 &lt;hugepages&gt;
690 &lt;page size='1' unit='G' nodeset='0'/&gt;
691 &lt;/hugepages&gt;
692 &lt;/memoryBacking&gt;
693 &lt;vcpu placement='static'&gt;2&lt;/vcpu&gt;
694 &lt;cputune&gt;
695 &lt;shares&gt;4096&lt;/shares&gt;
696 &lt;vcpupin vcpu='0' cpuset='4'/&gt;
697 &lt;vcpupin vcpu='1' cpuset='5'/&gt;
698 &lt;emulatorpin cpuset='4,5'/&gt;
699 &lt;/cputune&gt;
700 &lt;os&gt;
701 &lt;type arch='x86_64' machine='q35'&gt;hvm&lt;/type&gt;
702 &lt;kernel&gt;/mnt/qemu/bzImage&lt;/kernel&gt;
703 &lt;cmdline&gt;root=/dev/vda console=ttyS0,115200&lt;/cmdline&gt;
704 &lt;boot dev='hd'/&gt;
705 &lt;/os&gt;
706 &lt;features&gt;
707 &lt;acpi/&gt;
708 &lt;apic/&gt;
709 &lt;/features&gt;
710 &lt;cpu mode='host-model'&gt;
711 &lt;model fallback='allow'/&gt;
712 &lt;topology sockets='2' cores='1' threads='1'/&gt;
713 &lt;numa&gt;
714 &lt;cell id='0' cpus='0-1' memory='4194304' unit='KiB' memAccess='shared'/&gt;
715 &lt;/numa&gt;
716 &lt;/cpu&gt;
717 &lt;on_poweroff&gt;destroy&lt;/on_poweroff&gt;
718 &lt;on_reboot&gt;restart&lt;/on_reboot&gt;
719 &lt;on_crash&gt;destroy&lt;/on_crash&gt;
720 &lt;devices&gt;
721 &lt;emulator&gt;/usr/bin/qemu-system-x86_64&lt;/emulator&gt;
722 &lt;disk type='file' device='disk'&gt;
723 &lt;driver name='qemu' type='raw' cache='none'/&gt;
724 &lt;source file='/mnt/qemu/enea-nfv-access-guest-qemux86-64.ext4'/&gt;
725 &lt;target dev='vda' bus='virtio'/&gt;
726 &lt;/disk&gt;
727 &lt;interface type='bridge'&gt;
728 &lt;mac address='52:54:00:71:b1:b6'/&gt;
729 &lt;source bridge='ovsbr0'/&gt;
730 &lt;virtualport type='openvswitch'/&gt;
731 &lt;address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/&gt;
732 &lt;/interface&gt;
733 &lt;serial type='pty'&gt;
734 &lt;target port='0'/&gt;
735 &lt;/serial&gt;
736 &lt;console type='pty'&gt;
737 &lt;target type='serial' port='0'/&gt;
738 &lt;/console&gt;
739 &lt;/devices&gt;
740&lt;/domain&gt;</programlisting>
741 </section>
742 </section>
743 </section>
744</chapter>
diff --git a/doc/book-enea-nfv-access-reference-guide-intel/doc/images/edit_boot_params.png b/doc/book-enea-nfv-access-reference-guide-intel/doc/images/edit_boot_params.png
deleted file mode 100755
index 5e1d009..0000000
--- a/doc/book-enea-nfv-access-reference-guide-intel/doc/images/edit_boot_params.png
+++ /dev/null
Binary files differ
diff --git a/doc/book-enea-nfv-access-reference-guide-intel/doc/images/edit_boot_params.svg b/doc/book-enea-nfv-access-reference-guide-intel/doc/images/edit_boot_params.svg
deleted file mode 100755
index f43ce97..0000000
--- a/doc/book-enea-nfv-access-reference-guide-intel/doc/images/edit_boot_params.svg
+++ /dev/null
@@ -1,213 +0,0 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<!-- Created with Inkscape (http://www.inkscape.org/) -->
3
4<svg
5 xmlns:dc="http://purl.org/dc/elements/1.1/"
6 xmlns:cc="http://creativecommons.org/ns#"
7 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8 xmlns:svg="http://www.w3.org/2000/svg"
9 xmlns="http://www.w3.org/2000/svg"
10 xmlns:xlink="http://www.w3.org/1999/xlink"
11 xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
12 xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
13 id="svg2985"
14 version="1.1"
15 inkscape:version="0.48.4 r9939"
16 width="802"
17 height="602"
18 sodipodi:docname="edit_boot_params.png">
19 <metadata
20 id="metadata2991">
21 <rdf:RDF>
22 <cc:Work
23 rdf:about="">
24 <dc:format>image/svg+xml</dc:format>
25 <dc:type
26 rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
27 <dc:title></dc:title>
28 </cc:Work>
29 </rdf:RDF>
30 </metadata>
31 <defs
32 id="defs2989" />
33 <sodipodi:namedview
34 pagecolor="#ffffff"
35 bordercolor="#666666"
36 borderopacity="1"
37 objecttolerance="10"
38 gridtolerance="10"
39 guidetolerance="10"
40 inkscape:pageopacity="0"
41 inkscape:pageshadow="2"
42 inkscape:window-width="640"
43 inkscape:window-height="480"
44 id="namedview2987"
45 showgrid="false"
46 inkscape:zoom="0.37780549"
47 inkscape:cx="401"
48 inkscape:cy="301"
49 inkscape:window-x="0"
50 inkscape:window-y="0"
51 inkscape:window-maximized="0"
52 inkscape:current-layer="svg2985" />
53 <image
54 width="802"
55 height="602"
56 xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyIAAAJaCAYAAADTS/NGAAAABHNCSVQICAgIfAhkiAAAIABJREFU
57eJzt3V3Sq7jBLlD7VI8otxnmHlPG5XORcn80QUgg9PDjtapS6f1ihBAC6zHIfv/58+fz73//+wUA
58AJDwn//85/XX6/V6/etf/zq7LgAAwI/48+fP6/+dXQkAAOD3CCIAAECcIAIAAMQJIgAAQJwgAgAA
59xAkiAABAnCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJ
60IgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIA
61AECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABA
62nCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJIgAAQJwg
63AgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIAIA
64AMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADE
65CSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAki
66AABAnCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxP11dgUAEj6fzz/+/X6///H377/nf6stP2r7
67c1vrV1qffkttvLV9p2UsrVtbDvBE7ogAjzcduJcCQGlAP3r700HnWv1Kete/k8/nE9+v+bHb077z
68Y13qe08+dgBLBBHg0UoD/rXXnrV9rmcaPvaYH/952KgtB3gyj2YBP+nsMHD29u9ImwE8iyACQFHp
69saGlOStTS68vzYNomYOxNoeid/sAnMOjWQCvazwSM50DsWeg3Lv+HrU5FNN/Ly1vnYNRe5xu7/Z7
709nfvunuXAzyNOyLAz6gNbte+hSqx/drfa6aD7O/A+4pq9bpqvdMhD+DpBBHgZ5x916PlK3uvHiJK
719rbpdJ/nf7+SI0LIXQMYwCiCCMDE6LsiT3XkAP1qYcydEIAxzBEBuJCz79rwT1tCyBm/cwJwZ4II
728GhnD+zP3n6v+byT6d9KtgzI7zp43/qDk62/G+LuC/BLPJoFPN7SPITWgd4RcxjWtl8b0Na2P/37
73qK+nnT6uVprg31q/retP110qJzXHpCV4rH35wFqQqy0HeCpBBPgJW76hammgeNXtpwate+vQUr/e
7412ydBL41RB7BRHWA/+XRLAAAIE4QAQAA4gQRAAAgThABAADiBBEAACBOEAEAAOIEEQAAIE4QAQAA
754gQRAAAgThABAADiBBEAACBOEAEAAOIEEQAAIE4QAQAA4gQRAAAgThABAADiBBEAACBOEAEAAOIE
76EQAAIE4QAQAA4gQRAAAgThABAADiBBEAACBOEAEAAOIEEQAAIE4QAQAA4gQRAAAgThABAADiBBEA
77ACBOEAEAAOIEEQAAIO6vsyvwaz6fz9lVAAB4pPf7fXYV2EAQOYkTBQDgGD7ovSePZgEAAHGCCAAA
78ECeIAAAAcYIIAAAQJ4gAAABxgggAABAniAAAAHGCCAAAECeIAAAAcYIIAAAQJ4jwUz6fz+vz+Zxd
79DYA41z/gav46uwJkfT6f1/v9Prsal/J9Y562y/Rva2/c0+Wl9bfW5ReOT619Ssunx2JkO/Ucv68t
806y71se/6e+vya45o+9Ft/CvnN0Ard0R+iE/C1pXaZzpweL/fwwYS3+0//Tj1DKyvPojbU79pe0z7
8117ydnt4veu3tG6k+1XL83LEAfo0gws9oGQC3DgKOHrwYdP6fs+8ApLc/MtzC19nnFcASQYSfcfSA
8276iy5gOEJ4cRg6F9ntwn+D8jQ6nAC1yROSI3sfYMeW35fFnp0/f5fIi18lvmU2xdf15G6/6dIf2s
83d8/xTyw/ylpQWRuEb5lj0bKNtbkp8/L31O9OA8I95/d0eW39Pef/6Mcja9vfsrx2/W3ddmv7l9oQ
844IrcEbmB2jPkLc+Yr81zmL5+af21so9Yv7bftf07Sku5ZzzD3Xv8Ry9PaA0PI+rXUn5t4Lelblcb
85RNbO7y1zXLYcn97rxx4jzo/a9Xf691KdvuW1bP9q/QdgjTsiN3X1N5m99Ttrjsa03LU6jBwIbSmz
86tv+97TO6/CW1T4pH9/kt2yl9Yp2sw55y5866jpS269EzgN8iiNzAd3Bcezxh5Jt4b9kt63/3c+kR
87hJb9Txqx7dqjHr3WBqNr7XvF9l8y8lPy3v3fcgdwdN+6qtL5/3oJKABPJYjcxFLomM9TGDXYKD1j
88n1p/uu60zFHzNGp3Re5qra1q7Tu6/Y8YhPes2/Jo1fz1rfvf0v89TlN2xPUDgGsyRwQ6rT2zzT8Z
89TP6vlv6iTwHwRILIDeyZIF1b54xJ13vdoa6lCbqj9B7f6fKz+8qINpvWeXpslrZV2/5Z/e/qfZ79
907nBNA0gQRG5gPpCaD5xqy5fKWVo+LWOt/NIdgPl/l+q/9VPx1v0bpbZ/X6XHmHr1Hv/Ry3v2Z+vr
91l45FS/16HmHc2j61+pX2f1r+WjlXU2uf1vOntfy19uvZznQb0+2mrr9761/qfwB3YI7ITRz1LUZ7
92yym9qbZuu3X90mB+5CBsqey9A9c99axtv6Xcs5dv1dt/ti5fe01i+z3nzxUCSK0/bpl/tLa89fxv
93OWe2SJ0fe9tpS3sII8CduCMCADflTghwZ4IIhzzSAEBebQ4UwJV5NAtvWgA35hoO3JU7IgAAQJwg
94AgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIAIA
95AMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADE
96/XV2BbiPz+fz93+/3+8Ta9Lvuy/v93vTfq299grt8/l8Frc9rdvX93XTttiyne86yf0u7d/S6771
976a3fUtvtLevpWo9PSzmv13nn2J5zYrre1nXXzs8rWdq/K1z37iDRTrXzb+/52dI/e/u+vvO73BGh
98WesAsDRwu4r5hW/LBbD02nmZZ7RBaZvTun3/N//72vo1qTeQs+o3bbOlf/NfiT5/9XbvGeSVzs+t
99ZY08Dkv7d/VjchWJD2l6ltfWW+ufV3j/474EEehUCjZXuRgfPXC++idYV68f684+funtC7bcWe/7
10039XeL8kTRDjU1d9Uzx7kXJU3A7i/q19/AebMEeEwpWdEa8/rl27rrs1hGBUoWueAHG2+3aU2q7Xf
101vKwRA5Ja2bU+MNW6fMv+7anf2nHdMh/l+/q1/loqt1ZGzxyClvkyqeOzpa6lZWvrrdWvZU5Uy9yU
102efl76jfy3JyXf9R8qZbr357+dUT9jui/o86PFkec3/N/t56ftffXb7tM55cc3X+XtsHvcEeEw5Qu
103INML3p5noOevH31Xo+UZ2JK9z3V/y14ahNbab+schpHtt1S/2jPGLXNYjpqjUep/020f1S6l8ufL
104ase/dw5Brf+MPj7fAcbS/1q1hoc97bNl2y3HcMmWuu09P/def1uOz5Y67ek/a/WrOaL/1tqnp/wj
1056r92fGrn3xHXz2mdtn4gADXuiHAL009Mvv8etZ250dtMGvVp9RUcNYA7oo2uLnkMW7dVuxsxus57
106Bttb1zuyDkdp/XBla7sc8bq97l7+WdtaMw8jR9dr+h5/lX0mQxCBA135Anr1IHEFPW30fSOd3tWY
107l3tE3Vg2qn3mH4JM/96qpW7Oz2s64vi3uMv5vRYY9F32EES4hemb9J0/NTlrsNG73asPko6o36h9
108LD1qtdVV275mbX9Lj8nsMfLYL92lab0GtRz/M8+vluPz63qO/95tTLe1dZ2rajnP7vz+zj6CCD/l
109Fy90LYOcqweN0X59/0fSpuvO7nuOz7WdfXzO7p88n8nqXN78Qnj0ZNRea5MXz9IyGXjPZMqrmO7f
1100+/2LNk62TttS/1GtP/SfLLSHLPa9s9q6ysf316j2/TI8s84/r3bbJlUftQ+Hf3+d7X3d8ZzR4Rm
1110wvD0h2F2vKSpYnoI+9azMuvXfBKzwhP69cymb60rFT+kulrauWsHZ+Weu2xVL/aM9atz2Af8YUF
112a+231D5r8z2O6t+149/7jHrtvLzS8VlSO/9a6jc9jlvrtbd9SvUrXd96B14t19+1/l9S27+918/R
1139dvaf0eXXzo+R81BqZ1/peVHXH963v9AEKFZ7QKytnzpotj676Vyey9mW8tv2d5R7bP2xr5nGz31
114alme2kbpdb31O7Lu87t2pTLW/l0KRHsljt/W121dZ2QfPaN/164/exyxH3vWO+r6ueV1W9frOT5H
115lF97TaoPtJ4De0LRUdeQra/l/gQRHq/lE7sz+aTotzn+wFW4HpFmjgic7HvBrz3DPv9vnqF2/KHH
1161a8fV6/f032vO64/nMUdEbiAxG17rssxZpSr962r1+/ptD9nE0R4PBdaAIDr8WgWAAAQJ4gAAABx
117Hs26mdpkstpk57npRNnSsqVyjvoO+KSr169F7fdbever9tste3/b5Yj+tWU7zg8AuD53RG6k9o0i
118LV9TO//fdL3S3+evWdpWbfkVXGHwt/bDUS3rLjlqv3r7V229nv61ZTt7l//6+QEAaYLITYwaJL5e
119r38MrtbKnv9Y2/fvteWw5oj+4/wAgPvxaNZN1AYvBjf3kLor82vfB+/8AID7EUS4hNoz+PPlS8ve
1207/eu5/DX5g1MyyyV37r90rLW8tfqu2V56fWl9VuXl/bpu1/T+SW/EpAAgDKPZv2QpV9QLb3u9apP
121uF1bd2u9vtsrPYNfW/b9W+k1PWrlt26/NPhuKX+67tqjQqVQUPpfS/lbtl8y3aeWvneGq54fAPBU
1227oj8gNKAae0bmO7+ifXZ9T9z+/Ntn90WX/MwcrV6TT39/ACAKxBE+FvLIKs2AOsZoF31k/K7udIg
123f8nSo1rTZVd19vkBAE8jiPB6va7xSW/r40ZCSdnSIL/ldzLu4qx+eoXzAwCeRhDBIOvhzj6ud+9f
124d68/AFyVyeo/YO+P6JXuRGz93YRknX/FWvscceeoZcL2iC8DmP5/8quO73Z+AMATuCNyEz1fsTp9
125XGdq7etl5+ZlLD3bv7Z8Ta1+S2VPHz+arrc2P6L0utL2a2Ustf2e7bcqtfGRgWDPMa61X0v/a+k/
126W76t6knnBwA8lSByE72TYHsm2B5VhyPLng9ie7fROuhcKmPE9mtf9XtUnbau11qv1q8uPmLbvev2
127ln1UHQDg13g0C2Z8at1H+wEALdwR4ect3f2YDqJ7H6l6ulr7AQAsEUT4eR6p6aN9AIA9PJoFAADE
128CSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAki
129AABAnCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJIgAA
130QJwgAgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIAAECc
131IAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCAC
132AADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAA
133xAkiAABAnCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJ
134IgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIA
135AECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABA
136nCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJIgAAQJwg
137AgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIAIA
138AMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADE
139CSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAki
140AABAnCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJIgAA
141QJwgAgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIAAECc
142IAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCAC
143AADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAA
144xAkiAABAnCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJ
145IgAAQJwgAgAAxAkiAABA3F9nV+BXfT6fs6sAAACnEUTC3u/32VUAAIDTeTQLAACIE0QAAIA4QQQA
146AIgTRAAAgDhBBAAAiBNEAACAOEEEAACIE0QAAIA4QQQAAIgTRAAAgDhBBAAAiBNEAACAOEEEAACI
147E0QAAIA4QQQAAIgTRAAAgDhBBAAAiBNEAACAOEEEAACIE0QAAIA4QQQAAIgTRAAAgDhBBAAAiBNE
148AACAOEEEAACIE0QAAIA4QQQAAIgTRAAAgDhBBAAAiBNEAACAuL/OrgDn+3w+r9fr9Xq/36t/e6rv
149vi650/5P92NLvfeux3a9bf35fByjG+s9fiPO1dL1b6n8pfpvWb+1HqP6uPMHrscdEf72fSNYG5h/
150Pp/V5S3b6Fl/hOkb0/v9vu0bVUu9l9r/rvt7R7W2Xjs/Ws6bs8+vs7d/ZUe0y5nnaun9oXT93Lq/
151e69frfRLuCZBBBYYnAO/Yh4m5uZ3yA3qgaN4NIt/qL3B9A7Q7zTAv1NdW7Xu0y89mncldz+/zt4+
1522y0ds7XHdN/v9993JtLHW/+C5xFEaFZ6hnf6RrX2nG9t/XkZ80/fav8urb/V/A22pfza405LAW9t
153/aUyerU+g92yf7Uy1ra9tP7a8pb+Nbr8mpb2qYX81n0r9e+e8/OIc6j13C+9prXs+fpbrhdLdezt
154X63lz8vaen79+l2Ivf3rqPYHxvBoFn+bfuK1trz09+8AvvQG0DN5cY89629ZZ/7GWNr36Rvf0mtq
155y4/S+gz2/LW99evd/1r/Gl1+7/4tbWvJ2vnVMo9p7/k5r//eIF96/ej+01qv0v739q+W8teO31H9
1565wqmcziOruve/nVE+wPjuCPCP5z9RndG+Jiaf6p5dPnT7WxZXtruiOOV6ANb93/r8iu5yyAyqbct
157rt6WR9bvKv2n5do3HcSf8ejWvB5nrQ+0E0S4jG8IqIWBUetPy9lafu/2pp8kLtUj+cZYGkDs3ceW
158/TvClkefRvAJ6rLe45/qP2e7ev9ZuotwBfoX3JsgAp1Kz6RvsXQH5IxPFKdvyvNt99QlsX9n30Ux
159cCnrPf5XOT9GetK+pOlfcF/miEDBlT71A6hZ+mQf4MoEEViQeIxnOhn2SoOHljs7W+q8Z/9626S2
160/ug2v3v5Rxp9LO/o7P75JL3XF20N5xJEaLb0LS6J9UsTII9685jXa2u5tfrNl8//Xlu+dz9al9f2
161t7d+vftfq2uqfY/av9K+bNnPpfofdX7tVdp+uv+sXR9q2x/RP5f2Y0v5rf3n+9o9/brn2l66fqau
162X639a2/7A2OZI8LiBbf1b6VlW9ZfmpRdK680kbu0/potcwv21G/rNvbau42WYzX6W2i29K2jy19a
163vnV/jzi+va/pOT+PmIjcewz3lr20fEtf713viGvNlec31a4PRwf6Pcv3zgXZuj5wPHdEAH6YR1MA
164OIsgAvDDlh79edInxHsf+QFgPI9mAfy4JwWPubMfewKgzB0RAAAgThABAADiBBEAACDOHBEuY+m7
1654feU8bRnvksTaO+2n/P9KP2OQ8+xXyv7rlp+m2L+2lLbltbbUpej2zZ53EZeH/Tvfbb89srSsp5t
166Pakd4a7cEeEyet8UWr7x5o5fVTr/zv61N+ermg6QS/Xv3Z+nDipKx39urf3WfoSv1aj+ljpuI88X
167/Xu/Wv+et+3ePtxyjIA8QQQYaulT+qcOqlJKg7Ula78kTT/9+3it4bt3G44TnM+jWfwUbzzX4Vj0
168WRr4ChfXoX/30X7wGwQRXq9X/RncteXzZ5dLj4FMl83L76lf6RGItU+NWz5R3lL/o55h3uOI+vUu
16971E7fkf0n5btL+1v6zZ6+89WyblQLefXiGf4j+qfrdeHUc7u30t12Fr+k/v3d3tzyeMDv8yjWVSf
170wd37jO7SG+6e53Nr25/fYi/dcq89W79W/lr9j3qGea/e+o06/lvqv3b8evtPy/an5e0NIXv7zxa9
171c5z2rFs7Pkf2jxH9s/X6MMrZ/bv3+Fytf+8JktMy14Lh6P0D/pc7Iiza+0bt4vxfowY6rZ/I9W6/
172tv7ZnwZu3X6pX37L+X7amfq0fG/5BkG/4ej+3Vv+VqP6997zc3o344h9P/v6B08iiHCY78V+fgv7
173KFcdfM0HsdO/j9jWXmuDlbX6J/dvlDvVtUXvQI9nedpxXdqf9CN1QIYgwm1c+Q1oXrfvwP1Kdd5y
174B2Ve/zvsX4/5c+BP2jfaGexek+MCz2WOCAT1PuP/JNqBJ9O/jyGEwLMJIiy6+oC5Vr9k/a/eVkum
175dR7dlkvPfbdMSE0ev9fr9T93f+52TEt6J+MvuWOfnzqy/lfv31fc/hHuXn/gvzyaRXSOwNpk6/kb
176+dbt1yYc95ZfsmX93jZbemSotrz3+B5x/JfKaD1+tf2bLmt53dFq7dNbr5b1174JaKmOe9qmVMbo
17768NR/bP1+nBE22zZ/uj+Pfr6lujf89dttbaN0fsHrBNEeL1efd+SNL+or71+7zc9bXnTHFH+0qBi
178y/o9eo7NUWWkvmmmJ7wdOYF7z7fy7FnWW/bRr9lbxuh9PKp/XvE4je7fvevW1j/72I/ehuABY3k0
179CwAAiBNEGG7Ls9MAAPwGj2YxnFvbAADMuSMCAADECSIAAECcIAIAAMSZIwITa78DMHLdO1v7AoK1
180Hwdc+z2UpeWtdRnZ9nc/xqPr31v+1X+n4ezjf4f2GX3+rV03Uuf+dFul6998+bRu07/V1oenc0cE
181JkZ/V/8TftF4bv47Mms/FDddvvRtaqXlLRLtWjvGVz++owc3Pe1z5Xb7OnNwePX2GV2/Mwfsa9en
1820vWvtT1614e7E0SAw20ZHJTe0AHO5voEY3k0C4J+6Q0s8UvVV3PHOidpH55CX4ZjCCK8Xq/+5/Nr
183cwDWls+f8Z1/AlVbXqt/6Xnc2hyFo5W23VK/ljkWrduer9/aPlu2Nf/08PtIzvfvR76Jz/etpX/s
184qUOtf2ztW1vqd3b/3jPHZ62MtX0bcfzObL/e87vWPlv+vbT93vN/9PFrKX/ptUef/1e15/1xunxL
185/1j6N/TyaBav12v9+f2a2hyAljkCa+W2LF8re/q3ljkKo5TKrtVvb/t91dZvaZ9WLRM3jw5883kp
18683/3tt+8jLV61Nbde3zP7N9b5/iUrPX/0cfvzPbrPb9r7dO7/d7zf/Tx27r/R18/t5he3/aea0e9
187F23pX99/j24fWOKOCEPsvYj2hpOeba7VuTbAfpq9+zX/VG2pzPndkasbEVJrZfVuqzQQHOGMT0iT
1882zrj+I929vZHGb1fa3fWjqhH7zVSeOCOBBFer9c1LmDfQWxpMLu2fHT9r/DGfYVj1KJlkH23MNJj
189ur/zv7e6wrE/qw5Pab+aO9Txzo5o39rdgjOvbbX3T/2LqxJEKD4Dehd3r3+rXxi0P9X82G0ZrFyl
190f5/Z/57QfjXO77F+vX1/ff+5LnNEgCGmzygfOd8E4KquHnhHGjEHkOcTRBjCBWmsq7fv1onE83V6
1919+1K7bOnLleq/5LR9ZuWf/W2GKG2z1dvk2T/GL3+E4PF1fsPv0UQoThBbs+FeulbP2rLr1b/rz2D
192x7V195bd23619XsDwHz90rP8a/VfOgZb+0fp22CObr+vtXlK0//uPT9q/bt2/Hr799b6lcrfUs+1
1938nuPX/r6sPX4lPavtX229o+jjDp+tfJr+3TE9teuT73bL10/R70/jjx/pt+6Ba3MEeH1epXf9Pau
194v2X50oB06W+l5SP+vcdRbdDy7622bPvIso9+zd4yzt7Hnr6xtLx0fuwtv3f90X3g6Ponrw9HHp/W
1959untH3v3d9TxWyun5W/pa8uW7R/Zt1vfH2t1SLxfwpc7IgAAQJwgAgAAxAkiAABAnCACAADECSIA
196AECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABA
197nCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJIgAAQJwg
198AgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIAIA
199AMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADE
200CSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIALPwcpVAAABlElEQVQAAMQJ
201IgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIA
202AECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABA
203nCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJIgAAQJwg
204AgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIAIA
205AMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADE
206CSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABAnCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAki
207AABAnCACAADECSIAAECcIAIAAMQJIgAAQJwgAgAAxAkiAABA3F+v1+v158+fs+sBAAD8kP8PqJM5
208YoCUyU4AAAAASUVORK5CYII=
209"
210 id="image2993"
211 x="0"
212 y="0" />
213</svg>
diff --git a/doc/book-enea-nfv-access-reference-guide-intel/doc/images/select-linux-kernel-in-grub2-boot-loader-on-ubuntu-14.04.png b/doc/book-enea-nfv-access-reference-guide-intel/doc/images/select-linux-kernel-in-grub2-boot-loader-on-ubuntu-14.04.png
deleted file mode 100644
index c28d643..0000000
--- a/doc/book-enea-nfv-access-reference-guide-intel/doc/images/select-linux-kernel-in-grub2-boot-loader-on-ubuntu-14.04.png
+++ /dev/null
Binary files differ
diff --git a/doc/book-enea-nfv-access-reference-guide-intel/doc/images/select-linux-kernel-in-grub2-boot-loader-on-ubuntu-14.04.svg b/doc/book-enea-nfv-access-reference-guide-intel/doc/images/select-linux-kernel-in-grub2-boot-loader-on-ubuntu-14.04.svg
deleted file mode 100644
index 319bf7e..0000000
--- a/doc/book-enea-nfv-access-reference-guide-intel/doc/images/select-linux-kernel-in-grub2-boot-loader-on-ubuntu-14.04.svg
+++ /dev/null
@@ -1,3 +0,0 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid meet" viewBox="0 0 640 640" width="640" height="640"><defs><path d="M0 93L640 93L640 547L0 547L0 93Z" id="b4lgbdl3I5"></path><clipPath id="clipbKzvApRlV"><use xlink:href="#b4lgbdl3I5" opacity="1"></use></clipPath></defs><g><g><g><g clip-path="url(#clipbKzvApRlV)" opacity="1"><image xlink:href="data:image/png;base64,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" x="0" y="0" width="640" height="454" transform="matrix(1 0 0 1 1.1368683772161603e-13 93.00000000000006)"></image></g></g></g></g></svg> \ No newline at end of file
diff --git a/doc/book-enea-nfv-access-reference-guide-intel/doc/images/virtual_network_functions.png b/doc/book-enea-nfv-access-reference-guide-intel/doc/images/virtual_network_functions.png
deleted file mode 100755
index 4c926e5..0000000
--- a/doc/book-enea-nfv-access-reference-guide-intel/doc/images/virtual_network_functions.png
+++ /dev/null
Binary files differ
diff --git a/doc/book-enea-nfv-access-reference-guide-intel/doc/images/virtual_network_functions.svg b/doc/book-enea-nfv-access-reference-guide-intel/doc/images/virtual_network_functions.svg
deleted file mode 100755
index f888174..0000000
--- a/doc/book-enea-nfv-access-reference-guide-intel/doc/images/virtual_network_functions.svg
+++ /dev/null
@@ -1,1569 +0,0 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<!-- Created with Inkscape (http://www.inkscape.org/) -->
3
4<svg
5 xmlns:dc="http://purl.org/dc/elements/1.1/"
6 xmlns:cc="http://creativecommons.org/ns#"
7 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8 xmlns:svg="http://www.w3.org/2000/svg"
9 xmlns="http://www.w3.org/2000/svg"
10 xmlns:xlink="http://www.w3.org/1999/xlink"
11 xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
12 xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
13 id="svg2985"
14 version="1.1"
15 inkscape:version="0.48.4 r9939"
16 width="559"
17 height="501"
18 sodipodi:docname="virtual_network_functions.png">
19 <metadata
20 id="metadata2991">
21 <rdf:RDF>
22 <cc:Work
23 rdf:about="">
24 <dc:format>image/svg+xml</dc:format>
25 <dc:type
26 rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
27 <dc:title></dc:title>
28 </cc:Work>
29 </rdf:RDF>
30 </metadata>
31 <defs
32 id="defs2989" />
33 <sodipodi:namedview
34 pagecolor="#ffffff"
35 bordercolor="#666666"
36 borderopacity="1"
37 objecttolerance="10"
38 gridtolerance="10"
39 guidetolerance="10"
40 inkscape:pageopacity="0"
41 inkscape:pageshadow="2"
42 inkscape:window-width="640"
43 inkscape:window-height="480"
44 id="namedview2987"
45 showgrid="false"
46 showborder="false"
47 inkscape:showpageshadow="false"
48 fit-margin-top="0"
49 fit-margin-left="0"
50 fit-margin-right="0"
51 fit-margin-bottom="0"
52 inkscape:zoom="0.47105788"
53 inkscape:cx="279.5"
54 inkscape:cy="250.5"
55 inkscape:window-x="0"
56 inkscape:window-y="0"
57 inkscape:window-maximized="0"
58 inkscape:current-layer="svg2985" />
59 <image
60 width="559"
61 height="501"
62 xlink:href="data:image/png;base64,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
1266xbU8dD+LF94dJBIQBEyFY72R7C+eHEn18xP8ciBHE8dyvONp4a5bccE3796TvWcHS+4GArqpwWa
127S+f44eUPezNsGC4wXnS5sjcF+AXPnvZHid51RjN335Lh608O42iqdUWu1lhK8b/PbWNWIugXglsG
128rbEAQUNxw/JGbtoyzq3bJpiTCnLD8kbeVinATgQMgoZirCBPyRZC/Pk4qfAStgyunpfiq08M8dUn
129hih7mqvnHft3IrkemAb85+V+EeaH7j3AoaxNKmQec/kjmQrqIybrh/L0Tdp0p4JMllyG8g5NEYuA
130obivP8f2sRLjJZeP3XMAKoWyd++e5K9XNRMyFVpTDT9/SsHRLG6K8K7Tm/jUQ4cIGopVlaktXSlc
131ff/qlhM+hiMtbQzzsy0T7J0o86blDYQtg2XNYX6yZZw7dqZZ2hQmGTKZkwoSDxrcuGGMi7oSNEX9
132j2njcIFbt00wty5EZyJAyfWIBky+f3UXIdPgA/ccYDBr0xjxl9dAzna5fG6CL186i7GCwz17J/mH
133hw9y7qwYvfWho9pYdjVzkkHedYwC57qQSdnVrB8qcGG3PyrUN1lCa01gWh8XHI/VHTFevaiebz87
134Uh1lCJkGixvD/LEvy/rBPCtb/b59fCDHvz0zwusX1/PSuSf2O7amwtKypjBF2+N7G8ZY0hSpjuj8
135fs8k9/VleEl3gkTQxPH86cmWqMXHzm7jNbfvwXY1i5vCxCzFVx4f5Jfb03z3yi4+vLYVgJ9uGeNt
136v+nj9h0TLGlqq/bp1MjPlJWtUdZ2RLljRxrTgJWtEU5vmxpd9BtadPy7qt56WiNfenyQkGlUp6M8
137/HPrzcsbqyM6033jpbP5q1VN3L49zcMHcnz6oYMYCj64phVlnExEF0KIF4eTrvB7xYIUN24c5aED
138OS6cHa/WdByLAtpiAU5rifDvV3Txilt285d39XHb9b0nFAAW1If49voR3nLnPla1RelLl9kyUuTD
139a1oAuGvXJAETvnJJJ82VC/wj/Tm+v3GUJw7muGBWnGjA4PGBPB+8px+oXEq05rVL6qsFllO8yoXm
140tUvq+eGmcbaMFKrvGcr/hv7+PxygPnw4HHha867Tm1jY+KdHk05v9adLJooOqyoX7hWtUWIBxd50
141mTdXRkPm1Yd449IGPv/oINfdups1nTG01vx29yRbR0t86/JZhCsjDobya0zmNYT518tnc+0tu3nP
1427/bzs+t6CJoK14PZCb8epiFi8f7VLbzzN338wyMH+Y8ruo8Kdgp/qsbx9IxaD/CnvuJBky89PsSe
143dBkD+OWONLOTQRY1him7/uiHW5n+e8tpDfxyxwRDOQevkjbeeloj9+7L8prb9nJlbxJTwd17Mmwa
144KbC6PcpL/2QvUu37gq05oz3G1fNS/PszI+ybLLOoMUzR8bh9R5psyeN1SxswKiNUWkPB9ThvdpyL
145uhLcsm0crf16nGVNET75wEH+4pd7eGlPEsuAR/tzaA29dYcDRSJo4HiQLh4e6UmFTK5dWMfH/ziA
14668Fnz2+sniNT3Mrxv3FZAz99bpzdE6WjjiddOnr0ZP1ggX9/ZoTXLK7jY2e38ce+DI8N5ChUpiSz
147ZY+i6492CSHEn4uTDi9z60KsaImw5WCeS7oTBKfVehQcj0zZReN/g58sudX6j7l1Id69qol3/aaP
148f3zkEJ+7sONwwaT2/xE+cuj/1Yvr2TRS5JatE9y3e5JA0ODK3iRvWdHIUM7h9u1pVrT4tzJPObM9
149yo82jfHTLeMsawrjac0zg3meOZT3F6jMcSxtjlTDiz9C4VXDS2sswFtOa+A9v9tfnbpxPM1E0eV7
150G8YOf+330wtXzE3MCC+u1mTKLuWp2piK7lSQsKnwNCyqTMX01AVpjlpsGSmxuLINy1B87Ow2DAU/
1512jTGQ49mwFAsb4nw1Us7edsKvzC16HhMll3ylX5b2RrlrSsa+dT9A3yrK85rFzeQs73KVJPv+kX1
152/Py5CW58ZpQLZid4y2mN1fem+sHVx/4uv6AhxMfObuWfHh/k648PATC/KcRH1rbSHLUYyNhkyi6F
153yme+tDnCaxbV8/mHD1Y/20vnJPjGZbP44mOH+NoTQ+BpuhpCfPb8dt66oumofRYcj2zZm1H/VHI1
154mZJLyfUIW4ovXNxJLGjwi21p7tw2gWEZrOmI8t6LOriiMpJTrJybdqUr3nV6E7/ZNcl40SVna67o
155TfL5izr4xlPDfOWxQQBm1wX50JoWrptWjzOvPkRjxGI478xo5wWz48QCJrbrVe8Om+rTbNkjHFDV
156c+CNyxr423v7q+fW1PG4xyjy6ogHcDyPN/96H+CXW13ek6xOG40VXCIBVb3DTggh/hyo++67T69Y
157sYL6+uM/T+JIB7I220aLrO6IkZhWeLkrXWYk77CmPcpIwWXrWJEz2qJEKt/uXfxvswFDsWbaw9EA
158nhrMUxe26D3Gw7aeHiqQKblELINVbREspSh6msf7c8xJBelOBo9a3vU0p7dG2TxSIF1yq/UFAGhY
1592hymftroz7PD/ijLiubDxcQP9+doilosrA8xWnTZPFI8qthVazijPUJ0WoizNaw7mGNufYjWyMx8
160uGG4QM72OHvaqM/28RIHszZrOmYWcgL0ZWz2pEtYSrGwMUzTtFqL/Rmb/Zkyq9tjTNUWF1zNEwM5
1616sImK5ojPHEoT2PYorfucB8N5Gw2jxSZkwoyv27mNMX64QKmUix/nrqk/RmbPekyAHPrgsyKH655
162euJQnlTIZGFl+sPR8PCB7FGfU8b22DBUwPY0Xckgc4/zkLXd6TJjRYczWw+fLwM5mz0TZc5qj86o
163v9lW6cewZbC8OUzMOvyZ7J0s05+xOXdaYe+zwwVKrmZ12+Ft78/621bArGSAnuTR7bri5p20xwJ8
16476ruGa8/NZjH9WD1Eef204MFgqZi2bQ+ffBAlvZ4kHl1QQbzDjvGSqzumHk80z07XGAw5xALGJzT
165GatOFX324UPctXuS+14/b0bRuBBCvBiNj4+zYcOGkw8vzx3M43maaMAgZ3vVqQLwb+8MGIrJkkfQ
166VEQsg6ztVm95tiq3C7uVkZapu5MM/NtYHa3J2zNHXyxDEbUMDMN/wm7B1pQ9D1MpEkGTsufNWMdQ
167/j40/m2v0YBRKbqd/q1WkXcOt11V9g9URyn8tprYniZnu4RMo/IE1SO/HStytjvjTimzcltu0dGU
168pvXP1H4MNXWHlb9OLGASMBW58sztGEoRsRQBw99vydUUHV3tt4hlEKwUwE59aw+aBtGA/4C8guP5
169/erN7NeI5d8yXHRmjnZNtW9qtODoY/WXiQQUQcPvr7LnUbD9NhmV43Y9v9YG/MLreNA8al9+fypQ
170Ctv126ePsb9owMBS/jFOjYyFLYOwqcjaXvXcMpUiEvDrSLTWR/V91DIImKra7wpFIugXjGSnvTb9
1712OxKobk3bUREobhjZ5r9k2XesbKxOno4deyKmZ/t1H48IHvEuTV17oZN//OY/ndlOlMp/zyuHFve
1729qrnyY83jeNqzQ2nNc5opxBC1ArHha6GEG0n8KTwqfBy0tNG920bZ/94ufp0WyH+3MSCBosiJr/Z
173MPZCN4W2oH+L/G3PjLzQTRFCiP+WXNnlquWNtKaCJ3wDwkmHl3DAIBo0TvgOHiFebKZuf46cAkWy
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
133586RSKa664jKCwaDaWlK8Y/C2jXzk5+XRd/wEr+59nWuuvBxdEwT8/rQw7wkPR5pbeH3/ARzHZcO6
1336tSxpauD5F7fTPzCApmk88viT1NfWMjg8QnVVBZs2rKe5pZXXD7zB+jWrWb50CTtfepmx8XGuftfl
1337aJpg955XaO/sRBMa9XW1bN64gUDAz9GODva+to8Vy5cyMT6JRFJeVpbVuOiawZ5X9tLWfpRlS5ey
1338fu3qrECl6zq93T0MDA6xfs0qunv76OrppbqqylvM6DrH+wd4+dXXGBsbIxwOc/W7LqOoqIjmllb2
1339HXiDWCxORUU5V11+GS4uu156mY7OTnLCOVx80YVUV1XOKkfDMOjt7WPXnpeZmJikoaGOLZs3IYDn
1340X9xOMplkSVMjh4+0sGH9GnRd9zRCKYtIbg6XX3oJPtNk63PPE0/EcUddfvnAQ2zasJ7xiQkCPn/6
13413TWOtnew9/X9JJNJ8vIiXHzhZsrLyxifmOCZ519E1zSKi713CQYCXHThZkpLS5QAo1DbRmeClJJI
1342bg7hcIhjXd08+fSztLd3khMOkxfJZXR0lIcefYKBwUHqamtoa+/ghe070TTBa6/v58mtzyKlpLKi
1343HF3XiccTdB47Rm9fXzb9rp5eOo91IaUkFovTeayLV/e+zo5dL3Gif4CRsVH2v3GQgcEhCvLzCQYD
1344CAEFBXmUlZQwNDzC/oMHSSQSxOIxDh9pRghBMBBQe86KdxyO41BaUsySpiZe33+AjmPdmMa0gaih
13456xw8fIQntz5LOByioCCfZ194kaPtHRQXF+HzedqHwsJC8vPz6O3r42h7B47j0NbewZEjLfT0HSdl
1346WRw6fAQrlUIIweNPPsMre1+jpLiY/Pw8du95medf3IYQgmg0RkfnMfa88ho797xMf/9ANj8+0+RY
1347Vzcv7thJLJ6gqb4eIcR03xSCto5OdE1j3bo15OVF6Ow8RjKZxDAM+gcHeejRx+np7aW8vIycnDCu
1348K2lpbeORx58iGotTVVmO3+cjmUry/IvbeW3ffqqrKkkkEzzx1FbGxyfQtWlNyMDAIA899jjRaJTq
13496kr2HzjE7j0vI4Sgf2CQIy2tvLBtB4eamxmfmORE/wAF+fnU19dyon+Arc89T9JKUVhYiK7r+EyT
1350kpJiJHCkuYX2jk6E0Hjj4CEeevQJkJKqqgpO9PfzwMOPMjg0jAD6jp/glb2v09XdQ25uDi1tR3lh
1351+w7i8bjaclIozcuZYFkWtTU1XHPlFbyy9zVe3LGLNw4eZv261Vx68RY6urrpHxjgsou3sH7tGsbG
1352J+jq7qGtvZP9bxyktLSY977nJgoL8onHEwwODWEaxixrfJ9pItPaEU3T8PlMUpbFu2+4jprqKtqO
1353tmOYBrphsG7talqPttPReYxLLtpCTVUVE5OT7N7zKiOjo0xOTiGlZGlTI4ZhkLKst6voFIoFQiIl
1354XLR5I8PDw2zftZsrLr3E26oRgpRlcfDQYQzDYN2a1eiaTntHJx2dx7jx+mtpbmllKhrjqisuIxQK
1355cbi5hampKUZGRojH45QUFzE8PEz/wCCpVIr6ujqGhkZoPXqUNatW8t5bbvK2flzJ4eYWNm/aiM80
1356MUwTx3G47T03UVFaxsDQEJqmMTI6RlfPTvLzI9xy4/UUFORl+6Wua0RjMXp6eiksLGRJQyPHT/Sz
1357Y+duenr7uGD5Ml7f/waTk5O856YbWb9uLclkkomJCfa88iqhYIBbbryemuoqEskkPb19HGlppaK8
1358jI0b1tPa2sbz1hOlpQAAIABJREFU23bQ3dOTFgY8TVBLWxtjY+NsXL+OJU2NDPQPcPRoBytXrCAQ
13598JNKWdRUV/Gem24kEsnFdV2qKyvx+X3EojEOHWnGcRwuunATR1paKSws4NqrrmRoeARdN/D5/SST
1360Sd44dJhAwM8N111DdXUlr+x9nUcee4KW1jbWr12NrmmUlBRzzZVXkBvJZXIqytDwMFPRKKFQSGmN
1361z3OU8HIGuFJiCMGGtWtobKj31Mr7DrBz9x4KCvKxUikMXWf/G4d4bd8BpJSEwyFGRkZJJJJUV1cS
1362CgaJRmPZFZ+UMq1S9YSVuYZ8tu2wYvkyVq1YjunzcfRoR/a7VMrCtm2EECSTKVKWxZLGRvYfOEjb
13630Q6SqRT5eXlUV1Vm95UVincajuNQWFjApZdcxJNPP8OBg4cQQqBpGqlUilTKwrJsHn7sSW/7QUpS
1364lkUsFs9OiIlEknA4REV5GfsODNHV04tl2Sxd2kRv33F6+44TCASorChnaGQECZSXl+LaNlK6FBTk
136547ou8XgcANdxWLZ0CSuWLUXT9KzwcvxEP9FYjJUrllNWVjKrX2qazuDgECOjY+Tm5PDciy9yon8Q
136627bp6u6hsaGeaDSKz+ejsLCQZDKJlBJXSqLRGLm5uUQiEWLxGIZhZk8p9Q8M8pOf/hwpJX6/n1g8
1367jhCeWYmX5wSa0Nm95xV27HoJkERyI6RSSVxXkpsTZv3aNdRUe4ujbTt2cfDwkawtj2mYSFeSTKUA
1368T4OcTCazZSuEN1bF4gmKi4oIhYLEYnHycnO9/MRi2W2hjB1OxsbolIbNivMOJbycAbquMz4xQTAQ
1369oLiokMp3XcHUVJS+4yeYmorh9/uxbJstq1ayeeN6bNsmGouj6xqv7dvP8MgIU1NTFBUWMhWNZg15
1370bdvGMEzi8SkSicRJHdZMH4We+3lmD93KrNw0jaKiQqqrq2hpbcPn97F86VLC4TCp9MCiULwTsSyb
1371C5Yt5dixLt44dNjTLKSPTBuGjmHo3PLuGygvK2UqGkVK6RnD42lUNc07dl1aUgJIjjS3kpcXYfmy
1372pfT09HHw8GFycnIoKMgnGouhaxpDQyMIXcdNOfT09aHrOqFQiKloFEj3W8tGS0fWtW2b5UuXYDs2
1373R5pbqKmqZN3a1aQsmTXib25tw5UugaCf7t4+NCHIycmhu6eHRCJBXiTC0fYOBgcHqamuIhaLgYRQ
1374OMTExASjY2PU1VYzNRXFMHQkktKSEq6/5ir8fh9j4xNEcnPZvms3UnpjWsDvx3ZsLrrwUlavXEky
1375mSQej5Obm4NjW+iahqZp2I5DT28f+944yEWbNrJp43q2Pvs8HZ3HALLbX5ZlYRh6dqtHSvD7TMKh
1376IGPj48TicQoKCjjRP0A0GiWck+MZOKftfmb+KBQZlPByBpimSWd6cCwqKMCVku6eXkpKiqmrqSYQ
1377CFBaUsyBgweZikZxbIeiogIuuWgLa1avZPuO3dz/4CPk5+eRnxdh88YNlJeV0Xq0nQcefgzHcRge
1378GaEgPx/wVkWJRDIrnAghcByHRCKRHiAMysvKOHykmaefeY6Lt2xi1cqVLFu6hPaOTpKWRUN9XXYb
1379SqF4JyFlerUvvb4iNI2LLtxEb99xevr6SKVS+EyTFcuX8dwL29ix6yVKSoqIxxOsX7ua8tJSyktL
13806erq4dEnnuKKSy+hsqKcYDBI57Eurr36SsrLStF0jWMd3Vx68RZMw6CyopxlS5dw4OBhr587Dr29
1381faxfu4aSokJ6e/tm9VuY1nDous6FmzfSd7yfp555jnAoRGNDPRIYHR2jpaWVUDDIrTd728uO4/DQ
1382o4+z78AbdPf0sXr1StraO3j2hW0cbe/AlZJLL9rCxvXreOLpZ3jksScoLSnBH/Bz8YWbWNrUxJHm
1383Vp7ftp1AIABIrrrichzbIZGI49gOTY0N7D94kL2v72doeCS9TVRJUVEhKcsikdGiSEk4HCYnHOZo
1384RyfJVIq+EydIWTaO42R92HR2HuPRx59m2bIl2LZNMpHE5/ezfu1qntr6LA8/+gSFhQV0dfdQVlrK
1385iqVLsB2HZCqFrk/btqRSVla7pFDoH//4x79WXu510LfCP782xMCkBboAV7A04nJ9iU3SPf/UeZmj
1386icPDIySTSWzbobiokBuuuZri4kKCwQB1tbVEo3GisSiO67C0qZGCgnwqy8uJ5OYSjUVJJlNUVpRT
1387V1tDSXExlm1jWSlWLFtCUVEhkUiEutoaXNfFtm2qqyspKS4CIUikO3N9bQ1FhYUUFhQgNA3LsijI
1388z6eqsgKBZyhXUlzMxvVrEEI7rweAgA77JnR2Dhkwn0sLKbixzKYx5JI6D9v1YiRzfDeR8LYiqqsq
1389EUIQCoXIyclB0wQ1VV6/qayoID8/z1v1x+LkhHNYtrQJ0+ejsKAge2y6pLiIstISkpaFz2eycsVy
1390CgsKSCaThMM5rFy5nEgkgqZp1NfWoOs6Y+PjgODCzRvZvHEDmhDEEwkkktrqaooKCwCwUha2Y1NR
1391Xk5TQwMF+Z6ti+04VJSXYRgGY2PjxONxli9bQk11FY7jIKXEl7aJy8uLsLSxgcrKcpLJFLF4nFAo
1392xJLGBqqrqigqKCAai5FIemXS2FBHY309ABOTk8TjCaorK6mpriIaixPw+6mvq6GyspLKigomJiaz
1393214rli0lFAoRjcXIi0Soq63FMA1C4SC5OTmMjo9TWFBAfV0toVCQurpaIpFc8vIi2LaFRFJRVoam
1394a5QUF1NdVUlZWQnFRUWMT0yQSCSprani2quvpCA/n1QqRSKRoKiwkJrqKnRNJxqLEsnNpb6uFr/f
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
1565"
1566 id="image2993"
1567 x="0"
1568 y="0" />
1569</svg>
diff --git a/doc/book-enea-nfv-access-reference-guide-intel/doc/ostree.xml b/doc/book-enea-nfv-access-reference-guide-intel/doc/ostree.xml
deleted file mode 100644
index 56bdda9..0000000
--- a/doc/book-enea-nfv-access-reference-guide-intel/doc/ostree.xml
+++ /dev/null
@@ -1,209 +0,0 @@
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
3"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
4<chapter id="ostree">
5 <title>Software Update</title>
6
7 <para>Enea's Software Update solution is based on OSTree.</para>
8 <para>OSTree is an upgrade system for Linux-based operating systems that
9 performs atomic upgrades of complete filesystem trees. The underlying
10 architecture might be summarized as "git for operating system binaries". It
11 operates in userspace, and will work on top of any Linux filesystem. At its
12 core is a git-like content-addressed object store with branches (or "refs")
13 to track meaningful filesystem trees within the store. Similarly, one can
14 check out or commit to these branches.</para>
15
16 <para>For in-depth information on how OSTree works, consult the OSTree User
17 Manual, <ulink
18 url="https://ostree.readthedocs.io/en/latest/manual/introduction">ostree.readthedocs</ulink>.
19 The set of OSTree commands can be found at the following OSTree <ulink
20 url="https://www.mankier.com/package/ostree">man page.</ulink></para>
21
22 <section id="installing_system_upgrades">
23 <title>Installing system upgrades</title>
24
25 <para>OSTree works by downloading system updates from remote servers,
26 which have to be set up before installing any system upgrades. There are
27 multiple ways through which system upgrades can be installed. Similarly to
28 git, one of the methods consists of pulling the branch related information
29 from the repository and checking out a commit ID. Another method, consists
30 of using a repository and a branch as the origin for future updates and
31 periodically pull the latest updates. Both of these techniques will be
32 detailed in the sections below.</para>
33
34 <section id="installing_by_commit_id">
35 <title>Installing a system upgrade by using a commit ID</title>
36
37 <para>To upgrade a system by using a commit ID, a remote repository has
38 to be added on the board running NFV Access:</para>
39
40 <para><emphasis role="bold">How to upgrade a system by using a commit
41 ID</emphasis></para>
42
43 <orderedlist>
44 <listitem>
45 <para>Add a remote repository on the board running NFV
46 Access:</para>
47
48 <programlisting>ostree remote add nfv-access-remote https://&lt;ostree-repository&gt;:&lt;port&gt;</programlisting>
49 </listitem>
50
51 <listitem>
52 <para>Pull the branch related information from the
53 repository:</para>
54
55 <programlisting>ostree pull nfv-access-remote &lt;branch-name&gt;</programlisting>
56 </listitem>
57
58 <listitem>
59
60 <para>Inspect the branch commits:</para>
61
62 <programlisting>ostree log &lt;branch-name&gt;</programlisting>
63
64 Inspecting the branch commits, outputs data in the following format:
65
66 <programlisting>commit &lt;COMMIT-ID&gt;
67ContentChecksum: &lt;CHECKSUM&gt;
68Date: &lt;COMMIT-DATE&gt;
69
70&lt;COMMIT-DESCRIPTION&gt;</programlisting>
71
72 <para>Example:</para>
73 <programlisting>ostree log nfv-access-latest
74commit 83e66d4376b415fca6a243ac4cf7704b8fceb0220621ff5aa59b4ee0715b9567
75ContentChecksum: dc5e7d46151acccae052751730e22062bd2d9ca6fa9990a622000e909e879467
76Date: 2018-12-20 16:04:22 +0000
77
78Commit example number 2
79
80commit 6e03344470b35385e584a79cd395ca90d134851b4cc512edeea5380f3cccc812
81ContentChecksum: 1d6a362491ecb25d5f56b9d6300463c0263bb68c8b50a368b1250c061225ba60
82Date: 2018-12-20 15:16:09 +0000
83
84Commit example number 1</programlisting>
85
86 </listitem>
87
88 <listitem>
89 <para>Specify the commit ID you wish to deploy</para>
90
91 <programlisting>ostree admin deploy &lt;COMMIT-ID&gt;</programlisting>
92 </listitem>
93 </orderedlist>
94
95 <note>
96 <para>Running <literal>ostree admin deploy</literal> will upgrade the
97 GRUB configuration to set the newly deployed commit as the default NFV
98 Access version.</para>
99 </note>
100 </section>
101
102 <section id="installing_by_update_channel">
103 <title>Installing a system upgrade by using an update channel</title>
104
105 <para>To upgrade a system by using an update channel, a remote
106 repository has to be configured as the origin for future updates:</para>
107
108 <programlisting>ostree admin set-origin nfv-access-remote \
109 https://&lt;ostree-repository&gt;:&lt;port&gt; &lt;branch-name&gt;</programlisting>
110
111 <para>Each time the remote branch is updated, the changes can be
112 deployed on a board with the <literal>ostree admin upgrade</literal>
113 command.</para>
114 </section>
115
116 <section id="removing_invalid_sys_upgrade">
117 <title>How to remove an invalid ostree version</title>
118
119 <orderedlist>
120 <listitem>
121 <para> Identify which commit is invalid by running <literal>ostree
122 admin status,</literal> which lists current commits. Example output:
123 </para>
124
125 <programlisting>ostree admin status
126 poky 210f327ab52730c33910f9a40108333b353b36adfadf44a7d7579d3f57d0.0 (pending)
127 origin refspec: 210f327ab52730c33910f9a40108333b353b36adfadf44a7d7579d3f57d0
128 * poky 884256bab349d7d4e1bfd603d70b59cae9143b4d7e996256246760815c12.0
129 origin refspec: 884256bab349d7d4e1bfd603d70b59cae9143b4d7e996256246760815c12
130 poky 8791932934bcfd33e2d3c0c9d2fbd63f90486cd62c5ddae40f8d2b94ba4a.0 (rollback)
131 origin refspec: my-remote:test-branch</programlisting>
132 </listitem>
133
134 <listitem>
135 <para>Undeploy the faulty commit by running <literal>ostree admin
136 undeploy &lt;commit number&gt;</literal>, where <literal>&lt;commit
137 number&gt;</literal>is the index of the commits listed in the
138 <literal>ostree admin status</literal> command.</para>
139
140 <programlisting>ostree undeploy 2</programlisting>
141 </listitem>
142
143 <listitem>
144 <para>Run the <literal>ostree admin status</literal> command to verify
145 the invalid version has been removed:</para>
146
147 <programlisting>ostree admin status
148 poky 210f327ab52730c33910f9a40108333b353b36adfadf44a7d7579d3f57d0.0 (pending)
149 origin refspec: 210f327ab52730c33910f9a40108333b353b36adfadf44a7d7579d3f57d0
150 * poky 884256bab349d7d4e1bfd603d70b59cae9143b4d7e996256246760815c12.0
151 origin refspec: 884256bab349d7d4e1bfd603d70b59cae9143b4d7e996256246760815c12</programlisting>
152 </listitem>
153 </orderedlist>
154 </section>
155 </section>
156
157 <section id="change_builtin_kernel_param">
158 <title>Changing built-in kernel parameters</title>
159
160 <para>Each time OSTree deploys or undeploys a commit, the GRUB
161 configuration file is generated automatically. System administrators can
162 change what kernel parameters are specified in the GRUB configuration
163 file, by editing <literal>/etc/enea-nfv-access/boot/00_default</literal>
164 or creating a file in the same folder, for example
165 <literal>/etc/enea-nfv-access/boot/10_custom</literal>.</para>
166
167 <para>When a GRUB configuration file is created, files in the
168 <literal>/etc/enea-nfv-access/boot/</literal> folder are evaluated in
169 alphanumeric order, making, for example, a file named
170 <literal><literal>10_custom</literal></literal> override settings set in
171 <literal><literal>00_default</literal></literal>.</para>
172
173 <para><emphasis role="bold">There are 3 keywords that can change the way
174 GRUB configurations are created:</emphasis></para>
175
176 <itemizedlist>
177 <listitem>
178 <para><literal>base_folder</literal>: specifies where boot specific
179 files are located, such as kernel binaries, initrd files or GRUB
180 configurations.</para>
181 </listitem>
182
183 <listitem>
184 <para><literal>machine_config</literal>: specifies machine-specific
185 kernel parameters. For example this keyword should specify what serial
186 port is used for kernel boot messages or how to initialize network
187 connections.</para>
188 </listitem>
189
190 <listitem>
191 <para><literal>extra_config</literal>: specifies what other kernel
192 parameters should be added to the command line. This keyword should be
193 followed by kernel parameters that are not specific to the machine
194 (e.g. number of hugepages).</para>
195 </listitem>
196 </itemizedlist>
197
198 <para>A keyword should always be followed by a <literal>space</literal>
199 character and the content that is associated with that keyword:
200 <literal>&lt;keyword&gt; &lt;content&gt;</literal>.</para>
201
202 <para>If a change has been done in the
203 <literal>/etc/enea-nfv-access/boot</literal> folder, the GRUB
204 configuration can be explicitly regenerated by running <literal>
205 /usr/lib/ostree/ostree-grub-generator -o /boot/loader/grub.cfg
206 </literal> or waiting until the
207 next OSTree version is deployed.</para>
208 </section>
209</chapter>
diff --git a/doc/book-enea-nfv-access-reference-guide-intel/doc/overview.xml b/doc/book-enea-nfv-access-reference-guide-intel/doc/overview.xml
deleted file mode 100644
index 3439937..0000000
--- a/doc/book-enea-nfv-access-reference-guide-intel/doc/overview.xml
+++ /dev/null
@@ -1,153 +0,0 @@
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
3"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
4<chapter id="overview">
5 <title>Overview</title>
6
7 <para>The Enea NFV Access Reference Guide seeks to provide further
8 information that will help users understand the high-level architecture
9 and features of the Enea NFV Access Platform. Focus is placed
10 on data-path and virtualization components.</para>
11
12 <section id="description">
13 <title>Enea NFV Access Description</title>
14
15 <para>Enea NFV Access is a lightweight virtualization software designed
16 for deployment on edge devices at customer premises. Streamlined for high
17 networking performance and minimal footprints for both host platform and
18 VNFs, it enables very high compute density.</para>
19
20 <para>Enea NFV Access also provides a foundation for vCPE agility and
21 innovation, reducing cost and complexity for computing at the network
22 edge. It supports multiple architectures and scales from small white box
23 edge devices up to high-end network servers. Thanks to the streamlined
24 footprint, Enea NFV Access can be deployed on systems as small as single
25 2-core ARM devices. It scales up to clustered 24 core x86 Xeon servers and
26 beyond, allowing multiple VNFs on the same machine, and eliminating the
27 need to use different virtualization software for different hardware
28 platforms, saving costs through single source provisioning.</para>
29
30 <para>Optimized virtual networking performance provides low virtualized
31 networking latency, high virtualized networking throughput (10 Gb wire
32 speed), and low processing overhead. It allows high compute density on
33 white box hardware, maintaining performance when moving functionality from
34 application specific appliances to software on standard hardware. The
35 optimized boot speed minimizes the time from reboot to active services,
36 improving availability.</para>
37
38 <para>Enea NFV Access provides virtualization using both containers and
39 virtual machines. Containers provide lightweight virtualization for a
40 smaller VNF footprint and a very short time interval from start to enabled
41 network services. VMs provide virtualization with secure VNF sandboxing
42 and is the preferred virtualization method for OPNFV compliance. Enea NFV
43 Access allows combinations of containers and VMs for highest possible user
44 adaptability.</para>
45
46 <para>Flexible interfaces for VNF lifecycle management and service
47 function chaining, are important to allow a smooth transition from
48 traditional network appliances to virtualized network functions in
49 existing networks, as they plug into a variety of interfaces. Enea NFV
50 Access supports VNF lifecycle management and service function chaining
51 through OpenStack, NETCONF, REST, CLI and Docker. It integrates a powerful
52 device management framework that enables full FCAPS functionality for
53 powerful management of the platform.</para>
54
55 <para>Building on open source, Enea NFV Access prevents vendor lock-in
56 thanks to its completely open standards and interfaces. Unlike proprietary
57 platforms that either do not allow decoupling of software from hardware,
58 or prevent NVF portability, Enea NFV Access includes optimized components
59 with open interfaces to allow full portability and
60 interoperability.</para>
61 </section>
62
63 <section id="components">
64 <title>Components</title>
65
66 <para>Enea NFV Access is built on highly optimized open source and
67 value-adding components that provide standard interfaces but with boosted
68 performance.</para>
69
70 <mediaobject>
71 <imageobject role="fo">
72 <imagedata align="center"
73 fileref="images/virtual_network_functions.svg" />
74 </imageobject>
75
76 <imageobject role="html">
77 <imagedata align="center"
78 fileref="images/virtual_network_functions.png" />
79 </imageobject>
80 </mediaobject>
81
82 <para>The Access Platform includes the following key components:</para>
83
84 <itemizedlist>
85 <listitem>
86 <para>Linux Kernel - Optimized Linux kernel with the focus on vCPE
87 systems characteristics.</para>
88 </listitem>
89
90 <listitem>
91 <para>KVM - Virtualization with virtual machines. KVM is the standard
92 virtualization engine for Linux based systems.</para>
93 </listitem>
94
95 <listitem>
96 <para>Docker - Docker provides a lightweight configuration using
97 containers. Docker is the standard platform for container
98 virtualization.</para>
99 </listitem>
100
101 <listitem>
102 <para>Virtual switching - Optimized OVS-DPDK provides high throughput
103 and low latency.</para>
104 </listitem>
105
106 <listitem>
107 <para>Edge Link - Edge Link provides interfaces to orchestration for
108 centralized VNF lifecycle management and service function
109 chaining:</para>
110
111 <orderedlist>
112 <listitem>
113 <para>NETCONF</para>
114 </listitem>
115
116 <listitem>
117 <para>Docker</para>
118 </listitem>
119
120 <listitem>
121 <para>REST</para>
122 </listitem>
123
124 <listitem>
125 <para>CLI</para>
126 </listitem>
127 </orderedlist>
128 </listitem>
129
130 <listitem>
131 <para>APT packet management - Feature rich repository of prebuilt open
132 source packages for extending and adapting the platform using APT
133 Package Management.</para>
134 </listitem>
135
136 <listitem>
137 <para>CLI based VNF management - CLI access over virsh and
138 libvirt.</para>
139 </listitem>
140
141 <listitem>
142 <para>FCAPS framework - The device management framework for managing
143 the platform is capable of providing full FCAPS functionality to
144 orchestration or network management systems.</para>
145 </listitem>
146
147 <listitem>
148 <para>Data plane - High performance data plane that includes the DPDK
149 optimized data plane driver.</para>
150 </listitem>
151 </itemizedlist>
152 </section>
153</chapter>
diff --git a/doc/book-enea-nfv-access-reference-guide-intel/doc/ovs.xml b/doc/book-enea-nfv-access-reference-guide-intel/doc/ovs.xml
deleted file mode 100644
index fdbd692..0000000
--- a/doc/book-enea-nfv-access-reference-guide-intel/doc/ovs.xml
+++ /dev/null
@@ -1,161 +0,0 @@
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
3"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
4<chapter id="ovs">
5 <title>Open Virtual Switch</title>
6
7 <para>Open vSwitch (OVS) is an open-source multilayer virtual switch
8 designed to be used in virtualized environments to forward traffic between
9 different VMs on the same host, and also between VMs and the physical
10 network.</para>
11
12 <para>Native OVS forwarding is handled by two major components: a user-space
13 daemon called <literal>ovs-vswitchd</literal> and a
14 <literal>fastpath</literal> kernel module used to accelerate the data path.
15 The fastpath kernel module will handle packets received on the NIC by simply
16 consulting a flow table with corresponding action rules (e.g to forward the
17 packet or modify its headers). If no matching entry is found in the flow
18 table, the packet is copied to the user-space and sent to the ovs-vswitchd
19 deamon which determines how it should be handled ("slowpath").</para>
20
21 <para>The packet is then passed back to the kernel module together with the
22 desired action and the flow table is updated, so that subsequent packets in
23 the same flow can be handled in fastpath without any user-space interaction.
24 In this way, OVS eliminates a lot of the context switching between
25 kernel-space and user-space, but the throughput is still limited by the
26 capacity of the Linux kernel stack.</para>
27
28 <section id="ovs-dpdk">
29 <title>OVS-DPDK</title>
30
31 <para>To improve performance, OVS supports integration with Intel DPDK
32 libraries to operate entirely in user-space (OVS-DPDK). DPDK Poll Mode
33 Drivers (PMDs) enable direct transfers of packets between the physical NIC
34 and user-space, thereby eliminating the overhead of interrupt handling and
35 Linux kernel network stack processing. OVS-DPDK provides DPDK-backed
36 vhost-user ports as the primary way to connect guests to this datapath.
37 The vhost-user interfaces are transparent to the guest.</para>
38 </section>
39
40 <section id="ovs-commands">
41 <title>OVS commands</title>
42
43 <para>OVS provides a rich set of command line management tools, most
44 importantly:</para>
45
46 <itemizedlist>
47 <listitem>
48 <para>ovs-vsctl: Used to manage and inspect switch configurations,
49 e.g. to create bridges and to add/remove ports.</para>
50 </listitem>
51
52 <listitem>
53 <para>ovs-ofctl: Used to configure and monitor flows.</para>
54 </listitem>
55 </itemizedlist>
56
57 <para>For more information about Open vSwitch, see <ulink
58 url="http://openvswitch.org">http://openvswitch.org</ulink>.</para>
59 </section>
60
61 <section id="config-ovs-dpdk">
62 <title>Configuring OVS-DPDK for improved performance</title>
63
64 <section id="dpdk-lcore-mask">
65 <title>dpdk-lcore-mask</title>
66
67 <para>Specifies the CPU core affinity for DPDK lcore threads. The lcore
68 threads are used for DPDK library tasks. For performance it is best to
69 set this to a single core on the system, and it should not overlap the
70 pmd-cpu-mask, as seen in the example below.</para>
71
72 <para>Example: To use core 1:</para>
73
74 <programlisting>ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-lcore-mask=0x1</programlisting>
75 </section>
76
77 <section id="pmd-cpu-mask">
78 <title>pmd-cpu-mask</title>
79
80 <para>The DPDK PMD threads polling for incoming packets are CPU bound
81 and should be pinned to isolated cores for optimal performance.</para>
82
83 <para>If OVS-DPDK receives traffic on multiple ports, for example when
84 DPDK and vhost-user ports are used for bi-directional traffic, the
85 performance can be significantly improved by creating multiple PMD
86 threads and affinitizing them to separate cores in order to share the
87 workload, by each being responsible for an individual port. The cores
88 should not be hyperthreads on the same CPU.</para>
89
90 <para>The PMD core affinity is specified by setting an appropriate core
91 mask. Example: using cores 2 and 3:</para>
92
93 <programlisting>ovs-vsctl --no-wait set Open_vSwitch . other_config:pmd-cpu-mask=0xc</programlisting>
94 </section>
95 </section>
96
97 <section id="setup-ovs-dpdk">
98 <title>How to set up OVS-DPDK</title>
99
100 <para>The DPDK must be configured prior to setting up OVS-DPDK. See
101 <xref linkend="dpdk-setup"/> for DPDK setup instructions, then follow these steps:</para>
102
103 <orderedlist>
104 <listitem>
105 <para>Clean up the environment:</para>
106
107 <programlisting>killall ovsdb-server ovs-vswitchd
108rm -f /var/run/openvswitch/vhost-user*
109rm -f /etc/openvswitch/conf.db</programlisting>
110 </listitem>
111
112 <listitem>
113 <para>Start the ovsdb-server:</para>
114
115 <programlisting>export DB_SOCK=/var/run/openvswitch/db.sock
116ovsdb-tool create /etc/openvswitch/conf.db /usr/share/openvswitch/vswitch.ovsschema
117ovsdb-server --remote=punix:$DB_SOCK /
118--remote=db:Open_vSwitch,Open_vSwitch,manager_options --pidfile --detach</programlisting>
119 </listitem>
120
121 <listitem>
122 <para>Start ovs-vswitchd with DPDK support enabled:</para>
123
124 <programlisting>ovs-vsctl --no-wait init
125ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-lcore-mask=0x1
126ovs-vsctl --no-wait set Open_vSwitch . other_config:pmd-cpu-mask=0xc
127ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true
128ovs-vswitchd unix:$DB_SOCK --pidfile --detach /
129--log-file=/var/log/openvswitch/ovs-vswitchd.log</programlisting>
130 </listitem>
131
132 <listitem>
133 <para>Create the OVS bridge and attach ports:</para>
134
135 <programlisting>ovs-vsctl add-br ovsbr0 -- set bridge ovsbr0 datapath_type=netdev
136ovs-vsctl add-port ovsbr0 dpdk0 -- set Interface dpdk0 type=dpdk /
137:dpdk-devargs=&lt;PCI device&gt;</programlisting>
138 </listitem>
139
140 <listitem>
141 <para>Add DPDK vhost-user ports:</para>
142
143 <programlisting>ovs-vsctl add-port ovsbr0 vhost-user1 -- set Interface vhost-user1 type=dpdkvhostuser</programlisting>
144
145 <para>This command creates a socket at
146 <literal>/var/run/openvswitch/vhost-user1</literal>, which can be
147 provided to the VM on the QEMU command line. See <xref linkend="net_in_guest"/> for
148 details.</para>
149 </listitem>
150
151 <listitem>
152 <para>Define flows:</para>
153
154 <programlisting>ovs-ofctl del-flows ovsbr0
155ovs-ofctl show ovsbr0
156ovs-ofctl add-flow ovsbr0 in_port=1,action=output:2
157ovs-ofctl add-flow ovsbr0 in_port=2,action=output:1</programlisting>
158 </listitem>
159 </orderedlist>
160 </section>
161</chapter> \ No newline at end of file
diff --git a/doc/book-enea-nfv-access-reference-guide-intel/doc/using_nfv_access_sdks.xml b/doc/book-enea-nfv-access-reference-guide-intel/doc/using_nfv_access_sdks.xml
deleted file mode 100644
index 6280338..0000000
--- a/doc/book-enea-nfv-access-reference-guide-intel/doc/using_nfv_access_sdks.xml
+++ /dev/null
@@ -1,549 +0,0 @@
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
3"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
4<chapter id="using_sdks">
5 <title>Using the Enea NFV Access SDKs</title>
6
7 <para>Enea NFV Access comes with two Software Development Kits: the
8 <emphasis role="bold">Standard SDK </emphasis>and the <emphasis
9 role="bold">Extensible SDK</emphasis>.</para>
10
11 <para>The Standard SDK can be used to develop, debug and run on a target
12 device (i.e. Xeon D, Atom C3000) user-applications and kernel modules which
13 are specific to the target architecture on host. The Extensible SDK can be
14 used to add a new Yocto recipe, build, test and package software, and
15 optionally deploy it to a target device.</para>
16
17 <note>
18 <para>The Extensible SDK is based on core-i7 architecture and can't be
19 used for building kernel modules specific to other architectures.</para>
20 </note>
21
22 <para><emphasis role="bold">Benefits of the Extensible
23 SDK:</emphasis><itemizedlist>
24 <listitem>
25 <para>Shared development environment.</para>
26 </listitem>
27
28 <listitem>
29 <para>Ease in adding new applications and libraries, modifying the
30 source of an existing component or adding new Yocto
31 layers/recipes.</para>
32 </listitem>
33
34 <listitem>
35 <para>Shared state for faster builds.</para>
36 </listitem>
37
38 <listitem>
39 <para>Devtool support.</para>
40 </listitem>
41
42 <listitem>
43 <para>One-time SDK installation with easy updates and extensions
44 available as needed.</para>
45 </listitem>
46
47 <listitem>
48 <para>Runs on a range of host distributions.</para>
49 </listitem>
50 </itemizedlist></para>
51
52 <para>For additional information about SDKs, please refer to the <ulink
53 url="https://wiki.yoctoproject.org/wiki/Application_Development_with_Extensible_SDK#Extensible_SDK">Application
54 Development with Extensible SDK, </ulink> <ulink
55 url="https://wiki.yoctoproject.org/wiki/Extensible_SDK">Extensible SDK Wiki
56 page</ulink> and the <ulink
57 url="https://www.yoctoproject.org/docs/current/sdk-manual/sdk-manual.html">Yocto
58 SDK Manual</ulink>.</para>
59
60 <section id="std_sdk">
61 <title>Standard SDK</title>
62
63 <para>The Standard SDK consists of:</para>
64
65 <itemizedlist>
66 <listitem>
67 <para>A Cross-Development Toolchain. Comprised of a cross-compiler and
68 a cross-debugger.</para>
69 </listitem>
70
71 <listitem>
72 <para>Libraries, Headers and Symbols, specific to the image.</para>
73 </listitem>
74
75 <listitem>
76 <para>The <literal>environment-setup</literal> script. Defines the
77 environment variables.</para>
78 </listitem>
79
80 <listitem>
81 <para>The Element ODM SDK.</para>
82 </listitem>
83 </itemizedlist>
84
85 <section id="install-crosscomp">
86 <title>Installing the Cross-Compilation Toolchain</title>
87
88 <para>Before cross-compiling applications for your target, you need to
89 install the corresponding toolchain on your workstation.</para>
90
91 <para><emphasis role="bold">How to install a toolchain using the
92 Installer</emphasis></para>
93
94 <orderedlist>
95 <listitem>
96 <para>Download the zip image from <ulink
97 url="https://portal.enea.com/access/">portal.enea.com/access</ulink>
98 and unzip it on the host machine e.g. in the
99 <literal>Enea_NFV_Access_2.0 </literal>directory.</para>
100 </listitem>
101
102 <listitem>
103 <para>Run the install script located at
104 <literal>Enea_NFV_Access_2.0/x86_64/install/sdk</literal> directory,
105 when prompted, select to install the toolchain in a desired
106 directory, referred to henceforth as
107 <literal>[sdkdir]</literal>.</para>
108
109 <programlisting>$ ./install-sdk.sh</programlisting>
110
111 <para>A default path where the toolchain will be installed will be
112 shown in the prompt. The installer will unpack the
113 <literal>environment-setup</literal> script in
114 <literal>[sdkdir]</literal> and the toolchain under
115 <literal>[sdkdir]/sysroots</literal>.</para>
116
117 <note>
118 <para>Choose a unique directory for each toolchain. Installing a
119 second toolchain of any type in the same directory as a previously
120 installed one will break the <literal>$PATH</literal> variable of
121 the first one.</para>
122 </note>
123 </listitem>
124
125 <listitem>
126 <para>Set up the toolchain environment for your target by sourcing
127 the <literal>environment-setup</literal> script: <programlisting>$ source [sdkdir]/environment-setup-corei7-64-enea-linux</programlisting></para>
128 </listitem>
129
130 <listitem>
131 <para>Make sure you have <literal>libelf-dev</literal> installed
132 into your host distribution. This is needed for working with the
133 kernel and building kernel modules.<programlisting>$ sudo apt-get install libelf-dev</programlisting></para>
134 </listitem>
135 </orderedlist>
136 </section>
137
138 <section id="crosscomp-apps">
139 <title>Cross-Compiling Applications from the Command Line</title>
140
141 <para>Once the <literal>environment-setup</literal> script is sourced,
142 you can create and compile your applications for your target.</para>
143
144 <para><emphasis role="bold">How to cross-compile from the command
145 line</emphasis></para>
146
147 <orderedlist>
148 <listitem>
149 <para>Create a Makefile for your application, example:</para>
150
151 <programlisting>helloworld:helloworld.o
152 $(CC) -o helloworld helloworld.o
153clean:
154 rm -f *.o helloworld
155#include stdio.h;
156int main(void) {
157 printf("Hello World\n");
158 return 0;
159}</programlisting>
160 </listitem>
161
162 <listitem>
163 <para>Run <command>make</command> to cross-compile your application
164 according to the environment set up:</para>
165
166 <programlisting>$ make</programlisting>
167 </listitem>
168
169 <listitem>
170 <para>Deploy the application to your target and run it:</para>
171
172 <programlisting># ./helloworld
173hello world</programlisting>
174 </listitem>
175 </orderedlist>
176 </section>
177
178 <section id="crosscomp-kern-mod">
179 <title>Cross-Compiling Kernel Modules</title>
180
181 <para>Before cross-compiling kernel modules, inside the kernel source
182 tree in the installed SDK, available at
183 <literal>[sdkdir]/sysroots/targetarch-enea-linux/usr/src/kernel</literal>,
184 run the following command:</para>
185
186 <programlisting>make scripts prepare</programlisting>
187
188 <para>Once the <literal>environment-setup</literal> script is sourced,
189 you can make and compile your kernel modules as intended for your
190 target.</para>
191
192 <para><emphasis role="bold">How to cross-compile a kernel
193 module</emphasis></para>
194
195 <orderedlist>
196 <listitem>
197 <para>Create a Makefile for the kernel module, example:</para>
198
199 <programlisting>obj-m := hello.ko
200PWD := $(shell pwd)
201
202KERNEL_SRC := full path to kernel source tree
203
204all: scripts
205 $(MAKE) -C $(KERNEL_SRC) M=$(PWD) LDFLAGS="" modules
206scripts:
207 $(MAKE) -C $(KERNEL_SRC) scripts
208clean:
209 $(MAKE) -C $(KERNEL_SRC) M=$(PWD) LDFLAGS="" clean
210#include linux/module.h /* Needed by all modules */
211#include linux/kernel.h /* Needed for KERN_INFO */
212#include linux/init.h /* Needed for the macros */
213
214static int __init hello_start(void)
215{
216 printk(KERN_INFO "Loading hello module...\n");
217 printk(KERN_INFO "Hello, world\n");
218 return 0;
219}
220
221static void __exit hello_end(void)
222{
223 printk(KERN_INFO "Goodbye, world\n");
224}
225
226module_init(hello_start);
227module_exit(hello_end);
228
229MODULE_LICENSE("GPL");</programlisting>
230 </listitem>
231
232 <listitem>
233 <para>Run the <command>make</command> command to cross-compile your
234 kernel module according to the environment set up:</para>
235
236 <programlisting>$ make</programlisting>
237 </listitem>
238
239 <listitem>
240 <para>Deploy the kernel module <literal>hello.ko</literal> to your
241 target and install/remove it:</para>
242
243 <programlisting># insmod hello.ko
244# rmmod hello.ko
245# dmesg
246[...] Loading hello module...
247[...] Hello, world
248[...] Goodbye, world</programlisting>
249 </listitem>
250 </orderedlist>
251 </section>
252
253 <section id="deploy-artifacts">
254 <title>Deploying your artifacts</title>
255
256 <para>A network connection is needed to deploy the artifacts on the host
257 target. Use <command>scp</command> to copy it to the desired
258 location:</para>
259
260 <programlisting># scp helloworld root@[target_ip_address]:/tmp</programlisting>
261 </section>
262
263 <section id="install-odm-sdk">
264 <title>Element ODM SDK</title>
265
266 <para>The Element ODM SDK is included in the Enea NFV Access SDK. Please
267 refer to the Element ODM documentation located in the Documentation
268 folder included with your release, on how to use the ODM SDK and how to
269 build ODM applications:</para>
270
271 <programlisting>Documentation/
272 Element_ODM_Kick_Start_Guide.pdf
273 Element_On_Device_Mgmt_Guide.pdf</programlisting>
274
275 <para>To build the ODM target kit, access the location of the ODM SDK
276 and run the <command>make</command> command:</para>
277
278 <programlisting>$ cd [sdkdir]/sysroots/corei7-64-enea-linux/usr/local/odm/odm-sdk-4.0.3-x86_64/
279$ make</programlisting>
280 </section>
281 </section>
282
283 <section id="esdk">
284 <title>Extensible SDK</title>
285
286 <para>The Extensible SDK helps you easily build, test and package
287 software, and deploy it to the target device.</para>
288
289 <para><emphasis role="bold">The Extensible SDK consists
290 of:</emphasis></para>
291
292 <itemizedlist>
293 <listitem>
294 <para>A Cross-Development Toolchain.</para>
295 </listitem>
296
297 <listitem>
298 <para>Libraries, Headers and Symbols for the x86 architecture.</para>
299 </listitem>
300
301 <listitem>
302 <para>The <literal>environment-setup</literal> script. Defines the
303 environment variables.</para>
304 </listitem>
305
306 <listitem>
307 <para>Devtool. A command-line tool used to automatically create
308 recipes for an existing source code, modify an existing recipe, build
309 and deploy the application to target.</para>
310 </listitem>
311 </itemizedlist>
312
313 <section id="install-esdk">
314 <title>Installing the Extensible SDK</title>
315
316 <para>To install the Extensible SDK on your host development machine,
317 run the installation script provided in the
318 <literal>Enea_NFV_Access_2.0/x86_64/install/esdk</literal>
319 folder:</para>
320
321 <orderedlist>
322 <listitem>
323 <para><programlisting>$ ./install-sdk.sh</programlisting>When
324 prompted, select to install the toolchain in a desired directory,
325 referred to henceforth as <literal>[sdkdir]</literal>.</para>
326
327 <para>A default path where the toolchain will be installed will be
328 shown in the prompt. The installer unpacks the
329 <literal>environment-setup</literal> script in
330 <literal>[sdkdir]</literal> and the toolchain under
331 <literal>[sdkdir]/sysroots</literal>.</para>
332
333 <note>
334 <para>Choose a unique directory for each toolchain. Installing a
335 second toolchain of any type in the same directory as a previously
336 installed one will break the <literal>$PATH</literal> variable of
337 the first one.</para>
338 </note>
339 </listitem>
340
341 <listitem>
342 <para>Set up the toolchain environment for your target by sourcing
343 the <literal>environment-setup</literal> script. Example:
344 <programlisting>$ source [sdkdir]/environment-setup-corei7-64-enea-linux</programlisting></para>
345
346 <para>With the SDK environment now set up, you may run
347 <command>devtool</command> to perform development tasks. Run
348 <command>devtool --help</command> to display the command manual for
349 further options available for use.</para>
350 </listitem>
351 </orderedlist>
352 </section>
353
354 <section id="add_new_comp_esdk">
355 <title>Adding a new component</title>
356
357 <para>The <command>devtool add</command> command is used to create a new
358 recipe and the <command>devtool modify</command> command is used to work
359 on an existing recipe.</para>
360
361 <para>To add a component, you can do the following:</para>
362
363 <itemizedlist>
364 <listitem>
365 <para><emphasis role="bold">Generate a recipe from an existing
366 application code and Makefile</emphasis></para>
367
368 <para>Run <command>devtool add [recipe]
369 [/path/to/your_application]</command> to generate a recipe:</para>
370
371 <programlisting>$ devtool add bbexample /path/to/bbexample</programlisting>
372
373 <para>Or alternatively, you can download from an upstream git
374 repository:<programlisting>$ devtool add bbexample https://github.com/whbruce/bbexample.git</programlisting></para>
375
376 <para><literal><command>devtool</command></literal> creates a Git
377 repository locally during extraction at:
378 <literal>[sdkdir]/workspace/source/bbexample</literal>, where the
379 recipe will be created automatically. E.g:
380 <literal>[sdkdir]/workspace/recipes/bbexample/bbexample.bb</literal>.</para>
381 </listitem>
382
383 <listitem>
384 <para><emphasis role="bold">Use an existing recipe from a Yocto
385 layer</emphasis></para>
386
387 <para>Use <command>devtool modify [recipe]</command> on any recipe
388 from <literal>[sdkdir]/layers/poky/meta*</literal>, example:</para>
389
390 <programlisting>$ devtool modify curl</programlisting>
391 </listitem>
392
393 <listitem>
394 <para><emphasis role="bold">Clone a new recipe from the upstream
395 Yocto project if the recipe is not included in your Extensible SDK
396 </emphasis></para>
397
398 <orderedlist>
399 <listitem>
400 <para>Clone a recipe from the upstream Yocto project, e.g.
401 <literal>meta-security</literal>:</para>
402
403 <programlisting>$ pushd [sdkdir]/layers/poky
404$ git clone -b rocko git://git.yoctoproject.org/meta-security
405$ popd</programlisting>
406 </listitem>
407
408 <listitem>
409 <para>Use the <literal>bitbake-layers</literal> script to add
410 <literal>meta-security</literal> to BBLAYERS:</para>
411
412 <programlisting>$ layers/poky/bitbake/bin/bitbake-layers add-layer layers/poky/meta-security</programlisting>
413
414 <para>If all required layers are not present you can get a
415 dependency ERROR:<programlisting>ERROR: Layer 'security' depends on layer 'perl-layer', but this layer is not \
416enabled in your configuration</programlisting>To rectify the dependency issue
417 exemplified above, clone <literal>meta-perl</literal> from
418 openembedded and run <command>add-layers</command>
419 again:<programlisting>$ layers/poky/bitbake/bin/bitbake-layers add-layer layers/poky/meta-security</programlisting>Now
420 <literal>[sdkdir]/layers/poky/meta-security</literal> is created
421 and the layer has been added to
422 <literal>[sdkdir]/conf/bblayers.conf</literal>:</para>
423
424 <note condition="hidden">
425 <para>The image build result can be seen at:
426 <literal>[sdkdir]/tmp/deploy/images/qemux86-64</literal></para>
427 </note>
428 </listitem>
429
430 <listitem>
431 <para>Use <command>devtool modify [recipe]</command> to change
432 an existing recipe inside the <literal>meta-security</literal>
433 layer:</para>
434
435 <programlisting>$ devtool modify isic</programlisting>
436
437 <para>The following directories and files will be created:
438 <literal>[sdkdir]/workspace/appends/isic_0.07.bbappend</literal>
439 and <literal>[sdkdir]/workspace/sources/isic</literal>.</para>
440 </listitem>
441 </orderedlist>
442 </listitem>
443 </itemizedlist>
444 </section>
445
446 <section id="devtool_build">
447 <title>Building an application</title>
448
449 <para>Use <command>devtool build [recipe]</command> to build the an
450 application:</para>
451
452 <para><programlisting>$ devtool build bbexample</programlisting><note>
453 <para>The image build result can be seen at
454 <literal>&lt;[sdkdir]&gt;/tmp/work/&lt;arch&gt;/&lt;recipe&gt;</literal>.
455 E.g.
456 <literal>[sdkdir]/tmp/work/corei7-64-enea-linux/bbexample</literal>.</para>
457 </note></para>
458 </section>
459 </section>
460
461 <section id="deploy">
462 <title>Deploy your application to a target</title>
463
464 <para>Deploy your application to a target by using the <command>devtool
465 deploy-target</command> command or by building a docker image and
466 deploying it.</para>
467
468 <section id="deploy-artifacts-esdk">
469 <title>Using devtool deploy-target</title>
470
471 <para>When deploying an application to a target device two scenarios can
472 occur.</para>
473
474 <itemizedlist>
475 <listitem>
476 <para>Example 1, where application deployment has no
477 issues:<programlisting>$ devtool deploy-target bbexample root@[target_ip_address]</programlisting>Now
478 run bbexample application on target:<programlisting># bbexample
479Hello Yocto World...
480Hello World (from a shared library!)</programlisting></para>
481 </listitem>
482
483 <listitem>
484 <para>Example 2, where application deployment encounters dependency
485 issues:<programlisting>$ devtool deploy-target isic root@[target_ip_address]
486# isic
487isic: error while loading shared libraries: libnet.so.9: cannot open shared
488object file: No such file or directory</programlisting>It is mandatory to add
489 required dependecies. The example application used above is
490 dependent on <literal>libnet</literal>, and requires you to build
491 and deploy libnet separately to the target in order for the
492 application to work:<programlisting>$ devtool modify libnet
493$ devtool build libnet
494$ devtool deploy-target libnet root@[target_ip_address]</programlisting>Now
495 run the application on target again:<programlisting># isic
496usage: isic [-v] [-D] -s [source ip] -d [destination ip] [-r [random seed]]
497...</programlisting></para>
498 </listitem>
499
500 <listitem>
501 <para>Remove/uninstall the application from target as needed:</para>
502
503 <programlisting>$ devtool undeploy-target isic root@[target_ip_address]</programlisting>
504 </listitem>
505 </itemizedlist>
506 </section>
507
508 <section id="docker_deploy">
509 <title>Creating and deploying a Docker image</title>
510
511 <para>You can build a docker container image from your Extensible SDK
512 and add your application into the container image.</para>
513
514 <orderedlist>
515 <listitem>
516 <para>Create a container image recipe in the workspace layer, e.g.
517 <literal>cont-image</literal> and add the following lines:</para>
518
519 <programlisting>IMAGE_INSTALL += "your_application"
520
521LICENSE = "MIT"
522
523IMAGE_FSTYPES = "container"
524
525inherit core-image</programlisting>
526 </listitem>
527
528 <listitem>
529 <para>Build the container image:</para>
530
531 <programlisting>$ devtool build-image cont-image </programlisting>
532
533 <note>
534 <para>The image build result can be seen at:
535 <literal>[sdkdir]/tmp/deploy/images/&lt;target&gt;</literal>.
536 E.g.:
537 <literal>[sdkdir]/tmp/deploy/images/qemux86-64</literal></para>
538 </note>
539 </listitem>
540
541 <listitem>
542 <para>Copy the image to the target and import it into Docker:</para>
543
544 <programlisting># docker import cont-image-qemux86.tar.bz2 [your_application]</programlisting>
545 </listitem>
546 </orderedlist>
547 </section>
548 </section>
549</chapter>