diff options
Diffstat (limited to 'doc')
-rw-r--r-- | doc/book-enea-linux-user-guide/doc/real_time_in_enea_linux.xml | 572 | ||||
-rw-r--r-- | doc/book-enea-linux-user-guide/doc/using_enea_linux.xml | 13 |
2 files changed, 563 insertions, 22 deletions
diff --git a/doc/book-enea-linux-user-guide/doc/real_time_in_enea_linux.xml b/doc/book-enea-linux-user-guide/doc/real_time_in_enea_linux.xml index 8f3ada0..afc3d33 100644 --- a/doc/book-enea-linux-user-guide/doc/real_time_in_enea_linux.xml +++ b/doc/book-enea-linux-user-guide/doc/real_time_in_enea_linux.xml | |||
@@ -1,26 +1,566 @@ | |||
1 | <?xml version="1.0" encoding="UTF-8"?> | 1 | <?xml version="1.0" encoding="ISO-8859-1"?> |
2 | <chapter id="real_time"> | 2 | <chapter id="real_time"> |
3 | <title>Real-Time in Enea Linux</title> | 3 | <title>Real-Time in Enea Linux</title> |
4 | 4 | ||
5 | <para>Additional packages providded by RT profile:</para> | 5 | <para>The Enea Linux Standard and Real-Time Profiles are based |
6 | on the same Yocto (poky) version but differ in kernel needs. The RT Profile uses the <ulink | ||
7 | url="https://github.com/intel/linux-intel-lts/wiki">Intel 4.14/preempt-rt kernel</ulink>.</para> | ||
6 | 8 | ||
7 | <itemizedlist> | 9 | <table> |
8 | <listitem> | 10 | <title>Addtional packages provided in the RT profile</title> |
9 | <para>bitcalc, 1.0-r0.0</para> | ||
10 | </listitem> | ||
11 | 11 | ||
12 | <listitem> | 12 | <tgroup cols="3"> |
13 | <para>count-ticks, 1.1-r1.0</para> | 13 | <colspec align="center" /> |
14 | </listitem> | ||
15 | 14 | ||
16 | <listitem> | 15 | <thead> |
17 | <para>partrt, 1.1-r0.0</para> | 16 | <row> |
18 | </listitem> | 17 | <entry align="center">Package</entry> |
19 | </itemizedlist> | 18 | <entry align="center">Version</entry> |
19 | <entry align="center">Description</entry> | ||
20 | </row> | ||
21 | </thead> | ||
20 | 22 | ||
21 | <section id="Benchmark"> | 23 | <tbody> |
24 | <row> | ||
25 | <entry>bitcalc</entry> | ||
26 | <entry>1.0-r0.0</entry> | ||
27 | <entry>Tool for understanding bit calculations and | ||
28 | visualizing to binary, hex and decimal.</entry> | ||
29 | </row> | ||
30 | |||
31 | <row> | ||
32 | <entry>count-ticks</entry> | ||
33 | <entry>1.1-r1.0</entry> | ||
34 | <entry>Counts the number of kernel ticks during command execution.</entry> | ||
35 | </row> | ||
36 | |||
37 | <row> | ||
38 | <entry>partrt</entry> | ||
39 | <entry>1.1-r0.0</entry> | ||
40 | <entry>Tool for dividing a SMP Linux system into a real | ||
41 | time domain and a non-real time domain.</entry> | ||
42 | </row> | ||
43 | |||
44 | <row> | ||
45 | <entry>cyclictest</entry> | ||
46 | <entry></entry> | ||
47 | <entry>A testing tool for evaluating relative performance of RT systems.</entry> | ||
48 | </row> | ||
49 | |||
50 | <row> | ||
51 | <entry>stress</entry> | ||
52 | <entry></entry> | ||
53 | <entry>A simple workload generator for POSIX systems.</entry> | ||
54 | </row> | ||
55 | </tbody> | ||
56 | </tgroup> | ||
57 | </table> | ||
58 | |||
59 | <para>For the detailed list of packages provided in both Standard and RT | ||
60 | profiles along with package versions, please refer to the manifest files located in | ||
61 | <literal><build_dir>/tmp/deploy/images/<target></literal>.</para> | ||
62 | |||
63 | <section id="benchmark"> | ||
22 | <title>Benchmark</title> | 64 | <title>Benchmark</title> |
23 | 65 | ||
24 | <para>TBD.</para> | 66 | <para>The worst case latency benchmark uses a combination of tools: <ulink |
67 | url="https://wiki.linuxfoundation.org/realtime/documentation/howto/tools/cyclictest/start">cyclictest</ulink>, and <ulink | ||
68 | url="http://people.seas.harvard.edu/~apw/stress">stress</ulink>. The values of buffer sizes configured for use in the latter tool are chosen | ||
69 | both to generate a stessful load on a network via NFS traffic in the hdd test, and in an attempt to resemble a real life embedded application.</para> | ||
70 | |||
71 | <section id="benchmark_details"> | ||
72 | <title>Benchmark Details</title> | ||
73 | |||
74 | <para>The combination of <emphasis role="bold">cyclictest</emphasis> and <emphasis role="bold">stress</emphasis> has been used for the | ||
75 | benchmarking presented in this document. Details are given in the tables presented below.</para> | ||
76 | |||
77 | <table> | ||
78 | <title>Stress scenarios</title> | ||
79 | |||
80 | <tgroup cols="3"> | ||
81 | <tbody> | ||
82 | <row> | ||
83 | <entry align="center"> | ||
84 | <emphasis role="bold">Id</emphasis> | ||
85 | </entry> | ||
86 | |||
87 | <entry align="center"> | ||
88 | <emphasis role="bold">Command</emphasis> | ||
89 | </entry> | ||
90 | |||
91 | <entry align="center"> | ||
92 | <emphasis role="bold">Description</emphasis> | ||
93 | </entry> | ||
94 | </row> | ||
95 | |||
96 | <row> | ||
97 | <entry role="bold"> | ||
98 | <emphasis role="bold">cpu</emphasis> | ||
99 | </entry> | ||
100 | |||
101 | <entry>./stress -c <n></entry> | ||
102 | |||
103 | <entry><n> worker threads spinning on sqrt()</entry> | ||
104 | </row> | ||
105 | |||
106 | <row> | ||
107 | <entry> | ||
108 | <emphasis role="bold">hdd</emphasis> | ||
109 | </entry> | ||
110 | |||
111 | <entry>./stress -d <n> --hdd-bytes 20M</entry> | ||
112 | |||
113 | <entry><n> worker threads spinning on write()/unlink(). | ||
114 | Each worker writes 20MB.</entry> | ||
115 | </row> | ||
116 | |||
117 | <row> | ||
118 | <entry role="bold"> | ||
119 | <emphasis role="bold">io</emphasis> | ||
120 | </entry> | ||
121 | |||
122 | <entry>./stress -i <n></entry> | ||
123 | |||
124 | <entry><n> worker threads spinning on sync()</entry> | ||
125 | </row> | ||
126 | |||
127 | <row> | ||
128 | <entry role="bold"> | ||
129 | <emphasis role="bold">vm</emphasis> | ||
130 | </entry> | ||
131 | |||
132 | <entry>./stress -m <n> --vm-bytes 10M</entry> | ||
133 | |||
134 | <entry><n> worker threads spinning on malloc()/free(). | ||
135 | Buffer size: 15MB</entry> | ||
136 | </row> | ||
137 | |||
138 | <row> | ||
139 | <entry role="bold"> | ||
140 | <emphasis role="bold">full</emphasis> | ||
141 | </entry> | ||
142 | |||
143 | <entry>./stress -c <n> -i <n> -m <n> | ||
144 | --vm-bytes 15M</entry> | ||
145 | |||
146 | <entry><n> worker threads each doing the cpu, io & vm | ||
147 | stress. Buffer sizes are malloc: 256MB, write: 15MB.</entry> | ||
148 | </row> | ||
149 | </tbody> | ||
150 | </tgroup> | ||
151 | </table> | ||
152 | </section> | ||
153 | |||
154 | <section id="run_tests"> | ||
155 | <title>Stress Testcases</title> | ||
156 | |||
157 | <para>Below you will find several testcases for an RT image.</para> | ||
158 | |||
159 | <example id="testcase_one"> | ||
160 | <title><emphasis role="bold">Test 1 (RT image)</emphasis></title> | ||
161 | |||
162 | <para><programlisting># Test case (1/6): rt_bmark.intlat.no_stress | ||
163 | # .............................................................................. | ||
164 | # No stress requested | ||
165 | # Starting cyclictest | ||
166 | # Command: cyclictest -S -p 99 -q -i 100 -d 20 -l 30000 | ||
167 | .... | ||
168 | .... | ||
169 | # Min: 2 us | ||
170 | # Avg: 3.0 us | ||
171 | # Max: 15 us | ||
172 | # Max list: [5, 6, 7, 9, 10, 15] | ||
173 | # PASS | ||
174 | |||
175 | </programlisting></para></example> | ||
176 | |||
177 | <example id="testcase_two"> | ||
178 | <title><emphasis role="bold">Test 2 (RT image)</emphasis></title> | ||
179 | |||
180 | <para><programlisting># Test case (2/6): rt_bmark.intlat.cpu | ||
181 | # .............................................................................. | ||
182 | # Starting stress(cpu) | ||
183 | # Command: 'stress -c 8' | ||
184 | # Starting cyclictest | ||
185 | # Command: cyclictest -S -p 99 -q -i 100 -d 20 -l 30000 | ||
186 | .... | ||
187 | .... | ||
188 | # Min: 2 us | ||
189 | # Avg: 2.0 us | ||
190 | # Max: 11 us | ||
191 | # Max list: [4, 5, 6, 9, 10, 11] | ||
192 | # PASS | ||
193 | </programlisting></para></example> | ||
194 | |||
195 | <example id="testcase_three"> | ||
196 | <title><emphasis role="bold">Test 3 (RT image)</emphasis></title> | ||
197 | <para><programlisting># Test case (3/6): rt_bmark.intlat.hdd | ||
198 | # .............................................................................. | ||
199 | # Starting stress(hdd) | ||
200 | # Command: 'stress -d 8 --hdd-bytes 20M' | ||
201 | # Starting cyclictest | ||
202 | # Command: cyclictest -S -p 99 -q -i 100 -d 20 -l 30000 | ||
203 | .... | ||
204 | .... | ||
205 | # Min: 2 us | ||
206 | # Avg: 2.7 us | ||
207 | # Max: 14 us | ||
208 | # Max list: [9, 10, 11, 12, 14, 14] | ||
209 | # PASS | ||
210 | </programlisting></para></example> | ||
211 | |||
212 | <example id="testcase_four"> | ||
213 | <title><emphasis role="bold">Test 4 (RT image)</emphasis></title> | ||
214 | <para><programlisting># Test case (4/6): rt_bmark.intlat.io | ||
215 | # .............................................................................. | ||
216 | # Starting stress(io) | ||
217 | # Command: 'stress -i 8' | ||
218 | # Starting cyclictest | ||
219 | # Command : cyclictest -S -p 99 -q -i 100 -d 20 -l 30000 | ||
220 | .... | ||
221 | .... | ||
222 | # Min: 2 us | ||
223 | # Avg: 3.0 us | ||
224 | # Max: 15 us | ||
225 | # Max list: [8, 9, 10, 12, 12, 15] | ||
226 | # PASS | ||
227 | </programlisting></para></example> | ||
228 | |||
229 | <example id="testcase_five"> | ||
230 | <title><emphasis role="bold">Test 5 (RT image)</emphasis></title> | ||
231 | <para><programlisting># Test case (5/6): rt_bmark.intlat.vm | ||
232 | # .............................................................................. | ||
233 | # Starting stress(vm) | ||
234 | # Command: 'stress -m 8 --vm-bytes 10M' | ||
235 | # Starting cyclictest | ||
236 | # Command: cyclictest -S -p 99 -q -i 100 -d 20 -l 30000 | ||
237 | .... | ||
238 | .... | ||
239 | # Min: 2 us | ||
240 | # Avg: 4.2 us | ||
241 | # Max: 15 us | ||
242 | # Max list: [10, 12, 12, 13, 13, 15] | ||
243 | # PASS</programlisting></para></example> | ||
244 | |||
245 | <example id="testcase_six"> | ||
246 | <title><emphasis role="bold">Test 6 (RT image)</emphasis></title> | ||
247 | <para><programlisting># Test case (6/6): rt_bmark.intlat.full | ||
248 | # .............................................................................. | ||
249 | # Starting stress(io+cpu+hdd+vm) | ||
250 | # Command: 'stress -i 8 -c 8 -d 8 --hdd-bytes 20M -m 8 --vm-bytes 10M' | ||
251 | # Starting cyclictest | ||
252 | # Command : cyclictest -S -p 99 -q -i 100 -d 20 -l 30000 | ||
253 | .... | ||
254 | .... | ||
255 | # Min: 2 us | ||
256 | # Avg: 3.5 us | ||
257 | # Max: 19 us | ||
258 | # Max list: [12, 14, 15, 16, 18, 19] | ||
259 | # PASS | ||
260 | </programlisting></para></example> | ||
261 | </section> | ||
262 | |||
263 | <para>Repeat these tests for the Standard image and compare the results | ||
264 | (see the following tables).</para> | ||
265 | |||
266 | <table> | ||
267 | <title>Benchmark Numbers for the Standard Image</title> | ||
268 | |||
269 | <tgroup align="center" cols="7"> | ||
270 | <colspec /> | ||
271 | |||
272 | <colspec colname="2" /> | ||
273 | |||
274 | <colspec /> | ||
275 | |||
276 | <colspec /> | ||
277 | |||
278 | <colspec /> | ||
279 | |||
280 | <colspec /> | ||
281 | |||
282 | <colspec colname="7" /> | ||
283 | |||
284 | <thead> | ||
285 | <row> | ||
286 | <entry morerows="1" valign="middle"> | ||
287 | <para>Latency [µs]</para> | ||
288 | </entry> | ||
289 | |||
290 | <entry nameend="7" namest="2"> | ||
291 | <para>Stress Type</para> | ||
292 | </entry> | ||
293 | </row> | ||
294 | |||
295 | <row> | ||
296 | <entry> | ||
297 | <para>no stress</para> | ||
298 | </entry> | ||
299 | |||
300 | <entry> | ||
301 | <para>cpu</para> | ||
302 | </entry> | ||
303 | |||
304 | <entry> | ||
305 | <para>Io</para> | ||
306 | </entry> | ||
307 | |||
308 | <entry> | ||
309 | <para>vm</para> | ||
310 | </entry> | ||
311 | |||
312 | <entry> | ||
313 | <para>hdd</para> | ||
314 | </entry> | ||
315 | |||
316 | <entry> | ||
317 | <para>full</para> | ||
318 | </entry> | ||
319 | </row> | ||
320 | </thead> | ||
321 | |||
322 | <tbody> | ||
323 | <row> | ||
324 | <entry> | ||
325 | <para>Min</para> | ||
326 | </entry> | ||
327 | |||
328 | <entry> | ||
329 | <para>2 us</para> | ||
330 | </entry> | ||
331 | |||
332 | <entry> | ||
333 | <para>2 us</para> | ||
334 | </entry> | ||
335 | |||
336 | <entry> | ||
337 | <para>1 us</para> | ||
338 | </entry> | ||
339 | |||
340 | <entry> | ||
341 | <para>2 us</para> | ||
342 | </entry> | ||
343 | |||
344 | <entry> | ||
345 | <para>1 us</para> | ||
346 | </entry> | ||
347 | |||
348 | <entry> | ||
349 | <para>2 us</para> | ||
350 | </entry> | ||
351 | </row> | ||
352 | |||
353 | <row> | ||
354 | <entry> | ||
355 | <para>average</para> | ||
356 | </entry> | ||
357 | |||
358 | <entry> | ||
359 | <para>2.9 us</para> | ||
360 | </entry> | ||
361 | |||
362 | <entry> | ||
363 | <para>2.0 us</para> | ||
364 | </entry> | ||
365 | |||
366 | <entry> | ||
367 | <para>2.7 us</para> | ||
368 | </entry> | ||
369 | |||
370 | <entry> | ||
371 | <para>4.2 us</para> | ||
372 | </entry> | ||
373 | |||
374 | <entry> | ||
375 | <para>3.0 us</para> | ||
376 | </entry> | ||
377 | |||
378 | <entry> | ||
379 | <para>4.5 us</para> | ||
380 | </entry> | ||
381 | </row> | ||
382 | |||
383 | <row> | ||
384 | <entry> | ||
385 | <para>max</para> | ||
386 | </entry> | ||
387 | |||
388 | <entry> | ||
389 | <para>262 us</para> | ||
390 | </entry> | ||
391 | |||
392 | <entry> | ||
393 | <para>82 us</para> | ||
394 | </entry> | ||
395 | |||
396 | <entry> | ||
397 | <para>101 us</para> | ||
398 | </entry> | ||
399 | |||
400 | <entry> | ||
401 | <para>776 us</para> | ||
402 | </entry> | ||
403 | |||
404 | <entry> | ||
405 | <para>122 us</para> | ||
406 | </entry> | ||
407 | |||
408 | <entry> | ||
409 | <para>1428 us</para> | ||
410 | </entry> | ||
411 | </row> | ||
412 | </tbody> | ||
413 | </tgroup> | ||
414 | </table> | ||
415 | |||
416 | <table> | ||
417 | <title>Benchmark Numbers for the RT Image</title> | ||
418 | |||
419 | <tgroup align="center" cols="7"> | ||
420 | <colspec /> | ||
421 | |||
422 | <colspec colname="2" /> | ||
423 | |||
424 | <colspec /> | ||
425 | |||
426 | <colspec /> | ||
427 | |||
428 | <colspec /> | ||
429 | |||
430 | <colspec /> | ||
431 | |||
432 | <colspec colname="7" /> | ||
433 | |||
434 | <thead> | ||
435 | <row> | ||
436 | <entry morerows="1" valign="middle"> | ||
437 | <para>Latency [µs]</para> | ||
438 | </entry> | ||
439 | |||
440 | <entry nameend="7" namest="2"> | ||
441 | <para>Stress Type</para> | ||
442 | </entry> | ||
443 | </row> | ||
444 | |||
445 | <row> | ||
446 | <entry> | ||
447 | <para>no stress</para> | ||
448 | </entry> | ||
449 | |||
450 | <entry> | ||
451 | <para>cpu</para> | ||
452 | </entry> | ||
453 | |||
454 | <entry> | ||
455 | <para>Io</para> | ||
456 | </entry> | ||
457 | |||
458 | <entry> | ||
459 | <para>vm</para> | ||
460 | </entry> | ||
461 | |||
462 | <entry> | ||
463 | <para>hdd</para> | ||
464 | </entry> | ||
465 | |||
466 | <entry> | ||
467 | <para>full</para> | ||
468 | </entry> | ||
469 | </row> | ||
470 | </thead> | ||
471 | |||
472 | <tbody> | ||
473 | <row> | ||
474 | <entry> | ||
475 | <para>Min</para> | ||
476 | </entry> | ||
477 | |||
478 | <entry> | ||
479 | <para>2 us</para> | ||
480 | </entry> | ||
481 | |||
482 | <entry> | ||
483 | <para>2 us</para> | ||
484 | </entry> | ||
485 | |||
486 | <entry> | ||
487 | <para>2 us</para> | ||
488 | </entry> | ||
489 | |||
490 | <entry> | ||
491 | <para>2 us</para> | ||
492 | </entry> | ||
493 | |||
494 | <entry> | ||
495 | <para>2 us</para> | ||
496 | </entry> | ||
497 | |||
498 | <entry> | ||
499 | <para>2 us</para> | ||
500 | </entry> | ||
501 | </row> | ||
502 | |||
503 | <row> | ||
504 | <entry> | ||
505 | <para>average</para> | ||
506 | </entry> | ||
507 | |||
508 | <entry> | ||
509 | <para>3.0 us</para> | ||
510 | </entry> | ||
511 | |||
512 | <entry> | ||
513 | <para>2.0 us</para> | ||
514 | </entry> | ||
515 | |||
516 | <entry> | ||
517 | <para>3.0 us</para> | ||
518 | </entry> | ||
519 | |||
520 | <entry> | ||
521 | <para>4.3 us</para> | ||
522 | </entry> | ||
523 | |||
524 | <entry> | ||
525 | <para>2.7 us</para> | ||
526 | </entry> | ||
527 | |||
528 | <entry> | ||
529 | <para>3.5 us</para> | ||
530 | </entry> | ||
531 | </row> | ||
532 | |||
533 | <row> | ||
534 | <entry> | ||
535 | <para>max</para> | ||
536 | </entry> | ||
537 | |||
538 | <entry> | ||
539 | <para>15 us</para> | ||
540 | </entry> | ||
541 | |||
542 | <entry> | ||
543 | <para>13 us</para> | ||
544 | </entry> | ||
545 | |||
546 | <entry> | ||
547 | <para>42 us</para> | ||
548 | </entry> | ||
549 | |||
550 | <entry> | ||
551 | <para>20 us</para> | ||
552 | </entry> | ||
553 | |||
554 | <entry> | ||
555 | <para>16 us</para> | ||
556 | </entry> | ||
557 | |||
558 | <entry> | ||
559 | <para>32 us</para> | ||
560 | </entry> | ||
561 | </row> | ||
562 | </tbody> | ||
563 | </tgroup> | ||
564 | </table> | ||
25 | </section> | 565 | </section> |
26 | </chapter> \ No newline at end of file | 566 | </chapter> |
diff --git a/doc/book-enea-linux-user-guide/doc/using_enea_linux.xml b/doc/book-enea-linux-user-guide/doc/using_enea_linux.xml index f22f6a2..0704dbf 100644 --- a/doc/book-enea-linux-user-guide/doc/using_enea_linux.xml +++ b/doc/book-enea-linux-user-guide/doc/using_enea_linux.xml | |||
@@ -10,9 +10,11 @@ | |||
10 | sections:</para> | 10 | sections:</para> |
11 | 11 | ||
12 | <section id="build_images"> | 12 | <section id="build_images"> |
13 | <title>Building the images</title> | 13 | <title>Building Real-Time images</title> |
14 | 14 | ||
15 | <para>Build Enea Linux images using the following steps:</para> | 15 | <para>Real-Time images use the Intel RT kernel, no additional configuration is needed.</para> |
16 | |||
17 | <para><emphasis role="bold">How to Build an Enea Linux RT image</emphasis></para> | ||
16 | 18 | ||
17 | <procedure> | 19 | <procedure> |
18 | <step> | 20 | <step> |
@@ -54,7 +56,7 @@ $ TEMPLATECONF=meta-el-rt/conf/template.<machine> \ | |||
54 | </step> | 56 | </step> |
55 | 57 | ||
56 | <step> | 58 | <step> |
57 | <para>Build Enea Linux image</para> | 59 | <para>Build Enea Linux RT image</para> |
58 | 60 | ||
59 | <programlisting># You have already initiated the build environment and are in the <build_dir> | 61 | <programlisting># You have already initiated the build environment and are in the <build_dir> |
60 | $ bitbake <enea-image-name> | 62 | $ bitbake <enea-image-name> |
@@ -174,7 +176,7 @@ $ cd <build_dir>/tmp/deploy/sdk/ # Here is the SDK installer script</prog | |||
174 | described in the following sections.</para> | 176 | described in the following sections.</para> |
175 | 177 | ||
176 | <section id="enea-linux-x86-pxe"> | 178 | <section id="enea-linux-x86-pxe"> |
177 | <title>Boot via PXE using DHCP, TFTP, and NFS servers</title> | 179 | <title>Booting via PXE</title> |
178 | 180 | ||
179 | <para>Below you find an example of how to boot Enea Linux in a target | 181 | <para>Below you find an example of how to boot Enea Linux in a target |
180 | supporting PXE. The PXE boot is handled by the target BIOS.</para> | 182 | supporting PXE. The PXE boot is handled by the target BIOS.</para> |
@@ -284,8 +286,7 @@ label device01 | |||
284 | 286 | ||
285 | <listitem> | 287 | <listitem> |
286 | <para>Populate the root file system in the NFS directory by | 288 | <para>Populate the root file system in the NFS directory by |
287 | unpacking | 289 | unpacking <filename>enea-image-rt-intel-corei7-64.tar.gz</filename> |
288 | <filename>enea-image-rt-intel-corei7-64.tar.gz</filename> | ||
289 | found at | 290 | found at |
290 | <filename><build_dir>/tmp/deploy/images/<target>/</filename>.</para> | 291 | <filename><build_dir>/tmp/deploy/images/<target>/</filename>.</para> |
291 | </listitem> | 292 | </listitem> |