diff options
-rw-r--r-- | documentation/dev-manual/dev-manual-common-tasks.xml | 13 | ||||
-rw-r--r-- | documentation/profile-manual/profile-manual-usage.xml | 534 | ||||
-rw-r--r-- | documentation/ref-manual/ref-features.xml | 14 |
3 files changed, 15 insertions, 546 deletions
diff --git a/documentation/dev-manual/dev-manual-common-tasks.xml b/documentation/dev-manual/dev-manual-common-tasks.xml index e97cc734f9..f926f1d477 100644 --- a/documentation/dev-manual/dev-manual-common-tasks.xml +++ b/documentation/dev-manual/dev-manual-common-tasks.xml | |||
@@ -336,11 +336,12 @@ | |||
336 | DEPENDS_append_one = " foo" | 336 | DEPENDS_append_one = " foo" |
337 | DEPENDS_prepend_one = "foo " | 337 | DEPENDS_prepend_one = "foo " |
338 | </literallayout> | 338 | </literallayout> |
339 | As an actual example, here's a line from the recipe for | 339 | As an actual example, here's a line from the recipe |
340 | the OProfile profiler, which lists an extra build-time | 340 | for gnutls, which adds dependencies on |
341 | dependency when building specifically for 64-bit PowerPC: | 341 | "argp-standalone" when building with the musl C |
342 | library: | ||
342 | <literallayout class='monospaced'> | 343 | <literallayout class='monospaced'> |
343 | DEPENDS_append_powerpc64 = " libpfm4" | 344 | DEPENDS_append_libc-musl = " argp-standalone" |
344 | </literallayout> | 345 | </literallayout> |
345 | <note> | 346 | <note> |
346 | Avoiding "+=" and "=+" and using | 347 | Avoiding "+=" and "=+" and using |
@@ -8216,7 +8217,9 @@ | |||
8216 | SRCREV_pn-matchbox-panel-2 ?= "${AUTOREV}" | 8217 | SRCREV_pn-matchbox-panel-2 ?= "${AUTOREV}" |
8217 | SRCREV_pn-matchbox-themes-extra ?= "${AUTOREV}" | 8218 | SRCREV_pn-matchbox-themes-extra ?= "${AUTOREV}" |
8218 | SRCREV_pn-matchbox-terminal ?= "${AUTOREV}" | 8219 | SRCREV_pn-matchbox-terminal ?= "${AUTOREV}" |
8219 | SRCREV_pn-matchbox-wm ?= "${AUTOREV}" . | 8220 | SRCREV_pn-matchbox-wm ?= "${AUTOREV}" |
8221 | SRCREV_pn-settings-daemon ?= "${AUTOREV}" | ||
8222 | SRCREV_pn-screenshot ?= "${AUTOREV}" | ||
8220 | . | 8223 | . |
8221 | . | 8224 | . |
8222 | . | 8225 | . |
diff --git a/documentation/profile-manual/profile-manual-usage.xml b/documentation/profile-manual/profile-manual-usage.xml index 1359c82522..310e8f01c5 100644 --- a/documentation/profile-manual/profile-manual-usage.xml +++ b/documentation/profile-manual/profile-manual-usage.xml | |||
@@ -2228,540 +2228,6 @@ | |||
2228 | </section> | 2228 | </section> |
2229 | </section> | 2229 | </section> |
2230 | 2230 | ||
2231 | <section id='profile-manual-oprofile'> | ||
2232 | <title>oprofile</title> | ||
2233 | |||
2234 | <para> | ||
2235 | oprofile itself is a command-line application that runs on the | ||
2236 | target system. | ||
2237 | </para> | ||
2238 | |||
2239 | <section id='oprofile-setup'> | ||
2240 | <title>Setup</title> | ||
2241 | |||
2242 | <para> | ||
2243 | For this section, we'll assume you've already performed the | ||
2244 | basic setup outlined in the | ||
2245 | "<link linkend='profile-manual-general-setup'>General Setup</link>" | ||
2246 | section. | ||
2247 | </para> | ||
2248 | |||
2249 | <para> | ||
2250 | For the section that deals with running oprofile from the command-line, | ||
2251 | we assume you've ssh'ed to the host and will be running | ||
2252 | oprofile on the target. | ||
2253 | </para> | ||
2254 | |||
2255 | <para> | ||
2256 | oprofileui (oprofile-viewer) is a GUI-based program that runs | ||
2257 | on the host and interacts remotely with the target. | ||
2258 | See the oprofileui section for the exact steps needed to | ||
2259 | install oprofileui on the host. | ||
2260 | </para> | ||
2261 | </section> | ||
2262 | |||
2263 | <section id='oprofile-basic-usage'> | ||
2264 | <title>Basic Usage</title> | ||
2265 | |||
2266 | <para> | ||
2267 | Oprofile as configured in Yocto is a system-wide profiler | ||
2268 | (i.e. the version in Yocto doesn't yet make use of the | ||
2269 | perf_events interface which would allow it to profile | ||
2270 | specific processes and workloads). It relies on hardware | ||
2271 | counter support in the hardware (but can fall back to a | ||
2272 | timer-based mode), which means that it doesn't take | ||
2273 | advantage of tracepoints or other event sources for example. | ||
2274 | </para> | ||
2275 | |||
2276 | <para> | ||
2277 | It consists of a kernel module that collects samples and a | ||
2278 | userspace daemon that writes the sample data to disk. | ||
2279 | </para> | ||
2280 | |||
2281 | <para> | ||
2282 | The 'opcontrol' shell script is used for transparently | ||
2283 | managing these components and starting and stopping | ||
2284 | profiles, and the 'opreport' command is used to | ||
2285 | display the results. | ||
2286 | </para> | ||
2287 | |||
2288 | <para> | ||
2289 | The oprofile daemon should already be running, but before | ||
2290 | you start profiling, you may need to change some settings | ||
2291 | and some of these settings may require the daemon to not | ||
2292 | be running. One of these settings is the path to the | ||
2293 | vmlinux file, which you'll want to set using the --vmlinux | ||
2294 | option if you want the kernel profiled: | ||
2295 | <literallayout class='monospaced'> | ||
2296 | root@crownbay:~# opcontrol --vmlinux=/boot/vmlinux-`uname -r` | ||
2297 | The profiling daemon is currently active, so changes to the configuration | ||
2298 | will be used the next time you restart oprofile after a --shutdown or --deinit. | ||
2299 | </literallayout> | ||
2300 | You can check if vmlinux file: is set using opcontrol --status: | ||
2301 | <literallayout class='monospaced'> | ||
2302 | root@crownbay:~# opcontrol --status | ||
2303 | Daemon paused: pid 1334 | ||
2304 | Separate options: library | ||
2305 | vmlinux file: none | ||
2306 | Image filter: none | ||
2307 | Call-graph depth: 6 | ||
2308 | </literallayout> | ||
2309 | If it's not, you need to shutdown the daemon, add the setting | ||
2310 | and restart the daemon: | ||
2311 | <literallayout class='monospaced'> | ||
2312 | root@crownbay:~# opcontrol --shutdown | ||
2313 | Killing daemon. | ||
2314 | |||
2315 | root@crownbay:~# opcontrol --vmlinux=/boot/vmlinux-`uname -r` | ||
2316 | root@crownbay:~# opcontrol --start-daemon | ||
2317 | Using default event: CPU_CLK_UNHALTED:100000:0:1:1 | ||
2318 | Using 2.6+ OProfile kernel interface. | ||
2319 | Reading module info. | ||
2320 | Using log file /var/lib/oprofile/samples/oprofiled.log | ||
2321 | Daemon started. | ||
2322 | </literallayout> | ||
2323 | If we check the status again we now see our updated settings: | ||
2324 | <literallayout class='monospaced'> | ||
2325 | root@crownbay:~# opcontrol --status | ||
2326 | Daemon paused: pid 1649 | ||
2327 | Separate options: library | ||
2328 | vmlinux file: /boot/vmlinux-3.4.11-yocto-standard | ||
2329 | Image filter: none | ||
2330 | Call-graph depth: 6 | ||
2331 | </literallayout> | ||
2332 | We're now in a position to run a profile. For that we use | ||
2333 | 'opcontrol --start': | ||
2334 | <literallayout class='monospaced'> | ||
2335 | root@crownbay:~# opcontrol --start | ||
2336 | Profiler running. | ||
2337 | </literallayout> | ||
2338 | In another window, run our wget workload: | ||
2339 | <literallayout class='monospaced'> | ||
2340 | root@crownbay:~# rm linux-2.6.19.2.tar.bz2; wget <ulink url='http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2'>http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2</ulink>; sync | ||
2341 | Connecting to downloads.yoctoproject.org (140.211.169.59:80) | ||
2342 | linux-2.6.19.2.tar.b 100% |*******************************| 41727k 0:00:00 ETA | ||
2343 | </literallayout> | ||
2344 | To stop the profile we use 'opcontrol --shutdown', which not | ||
2345 | only stops the profile but shuts down the daemon as well: | ||
2346 | <literallayout class='monospaced'> | ||
2347 | root@crownbay:~# opcontrol --shutdown | ||
2348 | Stopping profiling. | ||
2349 | Killing daemon. | ||
2350 | </literallayout> | ||
2351 | Oprofile writes sample data to /var/lib/oprofile/samples, | ||
2352 | which you can look at if you're interested in seeing how the | ||
2353 | samples are structured. This is also interesting because | ||
2354 | it's related to how you dive down to get further details | ||
2355 | about specific executables in OProfile. | ||
2356 | </para> | ||
2357 | |||
2358 | <para> | ||
2359 | To see the default display output for a profile, simply type | ||
2360 | 'opreport', which will show the results using the data in | ||
2361 | /var/lib/oprofile/samples: | ||
2362 | <literallayout class='monospaced'> | ||
2363 | root@crownbay:~# opreport | ||
2364 | |||
2365 | WARNING! The OProfile kernel driver reports sample buffer overflows. | ||
2366 | Such overflows can result in incorrect sample attribution, invalid sample | ||
2367 | files and other symptoms. See the oprofiled.log for details. | ||
2368 | You should adjust your sampling frequency to eliminate (or at least minimize) | ||
2369 | these overflows. | ||
2370 | CPU: Intel Architectural Perfmon, speed 1.3e+06 MHz (estimated) | ||
2371 | Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (No unit mask) count 100000 | ||
2372 | CPU_CLK_UNHALT...| | ||
2373 | samples| %| | ||
2374 | ------------------ | ||
2375 | 464365 79.8156 vmlinux-3.4.11-yocto-standard | ||
2376 | 65108 11.1908 oprofiled | ||
2377 | CPU_CLK_UNHALT...| | ||
2378 | samples| %| | ||
2379 | ------------------ | ||
2380 | 64416 98.9372 oprofiled | ||
2381 | 692 1.0628 libc-2.16.so | ||
2382 | 36959 6.3526 no-vmlinux | ||
2383 | 4378 0.7525 busybox | ||
2384 | CPU_CLK_UNHALT...| | ||
2385 | samples| %| | ||
2386 | ------------------ | ||
2387 | 2844 64.9612 libc-2.16.so | ||
2388 | 1337 30.5391 busybox | ||
2389 | 193 4.4084 ld-2.16.so | ||
2390 | 2 0.0457 libnss_compat-2.16.so | ||
2391 | 1 0.0228 libnsl-2.16.so | ||
2392 | 1 0.0228 libnss_files-2.16.so | ||
2393 | 4344 0.7467 bash | ||
2394 | CPU_CLK_UNHALT...| | ||
2395 | samples| %| | ||
2396 | ------------------ | ||
2397 | 2657 61.1648 bash | ||
2398 | 1665 38.3287 libc-2.16.so | ||
2399 | 18 0.4144 ld-2.16.so | ||
2400 | 3 0.0691 libtinfo.so.5.9 | ||
2401 | 1 0.0230 libdl-2.16.so | ||
2402 | 3118 0.5359 nf_conntrack | ||
2403 | 686 0.1179 matchbox-terminal | ||
2404 | CPU_CLK_UNHALT...| | ||
2405 | samples| %| | ||
2406 | ------------------ | ||
2407 | 214 31.1953 libglib-2.0.so.0.3200.4 | ||
2408 | 114 16.6181 libc-2.16.so | ||
2409 | 79 11.5160 libcairo.so.2.11200.2 | ||
2410 | 78 11.3703 libgdk-x11-2.0.so.0.2400.8 | ||
2411 | 51 7.4344 libpthread-2.16.so | ||
2412 | 45 6.5598 libgobject-2.0.so.0.3200.4 | ||
2413 | 29 4.2274 libvte.so.9.2800.2 | ||
2414 | 25 3.6443 libX11.so.6.3.0 | ||
2415 | 19 2.7697 libxcb.so.1.1.0 | ||
2416 | 17 2.4781 libgtk-x11-2.0.so.0.2400.8 | ||
2417 | 12 1.7493 librt-2.16.so | ||
2418 | 3 0.4373 libXrender.so.1.3.0 | ||
2419 | 671 0.1153 emgd | ||
2420 | 411 0.0706 nf_conntrack_ipv4 | ||
2421 | 391 0.0672 iptable_nat | ||
2422 | 378 0.0650 nf_nat | ||
2423 | 263 0.0452 Xorg | ||
2424 | CPU_CLK_UNHALT...| | ||
2425 | samples| %| | ||
2426 | ------------------ | ||
2427 | 106 40.3042 Xorg | ||
2428 | 53 20.1521 libc-2.16.so | ||
2429 | 31 11.7871 libpixman-1.so.0.27.2 | ||
2430 | 26 9.8859 emgd_drv.so | ||
2431 | 16 6.0837 libemgdsrv_um.so.1.5.15.3226 | ||
2432 | 11 4.1825 libEMGD2d.so.1.5.15.3226 | ||
2433 | 9 3.4221 libfb.so | ||
2434 | 7 2.6616 libpthread-2.16.so | ||
2435 | 1 0.3802 libudev.so.0.9.3 | ||
2436 | 1 0.3802 libdrm.so.2.4.0 | ||
2437 | 1 0.3802 libextmod.so | ||
2438 | 1 0.3802 mouse_drv.so | ||
2439 | . | ||
2440 | . | ||
2441 | . | ||
2442 | 9 0.0015 connmand | ||
2443 | CPU_CLK_UNHALT...| | ||
2444 | samples| %| | ||
2445 | ------------------ | ||
2446 | 4 44.4444 libglib-2.0.so.0.3200.4 | ||
2447 | 2 22.2222 libpthread-2.16.so | ||
2448 | 1 11.1111 connmand | ||
2449 | 1 11.1111 libc-2.16.so | ||
2450 | 1 11.1111 librt-2.16.so | ||
2451 | 6 0.0010 oprofile-server | ||
2452 | CPU_CLK_UNHALT...| | ||
2453 | samples| %| | ||
2454 | ------------------ | ||
2455 | 3 50.0000 libc-2.16.so | ||
2456 | 1 16.6667 oprofile-server | ||
2457 | 1 16.6667 libpthread-2.16.so | ||
2458 | 1 16.6667 libglib-2.0.so.0.3200.4 | ||
2459 | 5 8.6e-04 gconfd-2 | ||
2460 | CPU_CLK_UNHALT...| | ||
2461 | samples| %| | ||
2462 | ------------------ | ||
2463 | 2 40.0000 libdbus-1.so.3.7.2 | ||
2464 | 2 40.0000 libglib-2.0.so.0.3200.4 | ||
2465 | 1 20.0000 libc-2.16.so | ||
2466 | </literallayout> | ||
2467 | The output above shows the breakdown or samples by both | ||
2468 | number of samples and percentage for each executable. | ||
2469 | Within an executable, the sample counts are broken down | ||
2470 | further into executable and shared libraries (DSOs) used | ||
2471 | by the executable. | ||
2472 | </para> | ||
2473 | |||
2474 | <para> | ||
2475 | To get even more detailed breakdowns by function, we need to | ||
2476 | have the full paths to the DSOs, which we can get by | ||
2477 | using -f with opreport: | ||
2478 | <literallayout class='monospaced'> | ||
2479 | root@crownbay:~# opreport -f | ||
2480 | |||
2481 | CPU: Intel Architectural Perfmon, speed 1.3e+06 MHz (estimated) | ||
2482 | Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (No unit mask) count 100000 | ||
2483 | CPU_CLK_UNHALT...| | ||
2484 | samples| %| | ||
2485 | |||
2486 | 464365 79.8156 /boot/vmlinux-3.4.11-yocto-standard | ||
2487 | 65108 11.1908 /usr/bin/oprofiled | ||
2488 | CPU_CLK_UNHALT...| | ||
2489 | samples| %| | ||
2490 | ------------------ | ||
2491 | 64416 98.9372 /usr/bin/oprofiled | ||
2492 | 692 1.0628 /lib/libc-2.16.so | ||
2493 | 36959 6.3526 /no-vmlinux | ||
2494 | 4378 0.7525 /bin/busybox | ||
2495 | CPU_CLK_UNHALT...| | ||
2496 | samples| %| | ||
2497 | ------------------ | ||
2498 | 2844 64.9612 /lib/libc-2.16.so | ||
2499 | 1337 30.5391 /bin/busybox | ||
2500 | 193 4.4084 /lib/ld-2.16.so | ||
2501 | 2 0.0457 /lib/libnss_compat-2.16.so | ||
2502 | 1 0.0228 /lib/libnsl-2.16.so | ||
2503 | 1 0.0228 /lib/libnss_files-2.16.so | ||
2504 | 4344 0.7467 /bin/bash | ||
2505 | CPU_CLK_UNHALT...| | ||
2506 | samples| %| | ||
2507 | ------------------ | ||
2508 | 2657 61.1648 /bin/bash | ||
2509 | 1665 38.3287 /lib/libc-2.16.so | ||
2510 | 18 0.4144 /lib/ld-2.16.so | ||
2511 | 3 0.0691 /lib/libtinfo.so.5.9 | ||
2512 | 1 0.0230 /lib/libdl-2.16.so | ||
2513 | . | ||
2514 | . | ||
2515 | . | ||
2516 | </literallayout> | ||
2517 | Using the paths shown in the above output and the -l option to | ||
2518 | opreport, we can see all the functions that have hits in the | ||
2519 | profile and their sample counts and percentages. Here's a | ||
2520 | portion of what we get for the kernel: | ||
2521 | <literallayout class='monospaced'> | ||
2522 | root@crownbay:~# opreport -l /boot/vmlinux-3.4.11-yocto-standard | ||
2523 | |||
2524 | CPU: Intel Architectural Perfmon, speed 1.3e+06 MHz (estimated) | ||
2525 | Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (No unit mask) count 100000 | ||
2526 | samples % symbol name | ||
2527 | 233981 50.3873 intel_idle | ||
2528 | 15437 3.3243 rb_get_reader_page | ||
2529 | 14503 3.1232 ring_buffer_consume | ||
2530 | 14092 3.0347 mutex_spin_on_owner | ||
2531 | 13024 2.8047 read_hpet | ||
2532 | 8039 1.7312 sub_preempt_count | ||
2533 | 7096 1.5281 ioread32 | ||
2534 | 6997 1.5068 add_preempt_count | ||
2535 | 3985 0.8582 rb_advance_reader | ||
2536 | 3488 0.7511 add_event_entry | ||
2537 | 3303 0.7113 get_parent_ip | ||
2538 | 3104 0.6684 rb_buffer_peek | ||
2539 | 2960 0.6374 op_cpu_buffer_read_entry | ||
2540 | 2614 0.5629 sync_buffer | ||
2541 | 2545 0.5481 debug_smp_processor_id | ||
2542 | 2456 0.5289 ohci_irq | ||
2543 | 2397 0.5162 memset | ||
2544 | 2349 0.5059 __copy_to_user_ll | ||
2545 | 2185 0.4705 ring_buffer_event_length | ||
2546 | 1918 0.4130 in_lock_functions | ||
2547 | 1850 0.3984 __schedule | ||
2548 | 1767 0.3805 __copy_from_user_ll_nozero | ||
2549 | 1575 0.3392 rb_event_data_length | ||
2550 | 1256 0.2705 memcpy | ||
2551 | 1233 0.2655 system_call | ||
2552 | 1213 0.2612 menu_select | ||
2553 | </literallayout> | ||
2554 | Notice that above we see an entry for the __copy_to_user_ll() | ||
2555 | function that we've looked at with other profilers as well. | ||
2556 | </para> | ||
2557 | |||
2558 | <para> | ||
2559 | Here's what we get when we do the same thing for the | ||
2560 | busybox executable: | ||
2561 | <literallayout class='monospaced'> | ||
2562 | CPU: Intel Architectural Perfmon, speed 1.3e+06 MHz (estimated) | ||
2563 | Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (No unit mask) count 100000 | ||
2564 | samples % image name symbol name | ||
2565 | 349 8.4198 busybox retrieve_file_data | ||
2566 | 308 7.4306 libc-2.16.so _IO_file_xsgetn | ||
2567 | 283 6.8275 libc-2.16.so __read_nocancel | ||
2568 | 235 5.6695 libc-2.16.so syscall | ||
2569 | 233 5.6212 libc-2.16.so clearerr | ||
2570 | 215 5.1870 libc-2.16.so fread | ||
2571 | 181 4.3667 libc-2.16.so __write_nocancel | ||
2572 | 158 3.8118 libc-2.16.so __underflow | ||
2573 | 151 3.6429 libc-2.16.so _dl_addr | ||
2574 | 150 3.6188 busybox progress_meter | ||
2575 | 150 3.6188 libc-2.16.so __poll_nocancel | ||
2576 | 148 3.5706 libc-2.16.so _IO_file_underflow@@GLIBC_2.1 | ||
2577 | 137 3.3052 busybox safe_poll | ||
2578 | 125 3.0157 busybox bb_progress_update | ||
2579 | 122 2.9433 libc-2.16.so __x86.get_pc_thunk.bx | ||
2580 | 95 2.2919 busybox full_write | ||
2581 | 81 1.9542 busybox safe_write | ||
2582 | 77 1.8577 busybox xwrite | ||
2583 | 72 1.7370 libc-2.16.so _IO_file_read | ||
2584 | 71 1.7129 libc-2.16.so _IO_sgetn | ||
2585 | 67 1.6164 libc-2.16.so poll | ||
2586 | 52 1.2545 libc-2.16.so _IO_switch_to_get_mode | ||
2587 | 45 1.0856 libc-2.16.so read | ||
2588 | 34 0.8203 libc-2.16.so write | ||
2589 | 32 0.7720 busybox monotonic_sec | ||
2590 | 25 0.6031 libc-2.16.so vfprintf | ||
2591 | 22 0.5308 busybox get_mono | ||
2592 | 14 0.3378 ld-2.16.so strcmp | ||
2593 | 14 0.3378 libc-2.16.so __x86.get_pc_thunk.cx | ||
2594 | . | ||
2595 | . | ||
2596 | . | ||
2597 | </literallayout> | ||
2598 | Since we recorded the profile with a callchain depth of 6, we | ||
2599 | should be able to see our __copy_to_user_ll() callchains in | ||
2600 | the output, and indeed we can if we search around a bit in | ||
2601 | the 'opreport --callgraph' output: | ||
2602 | <literallayout class='monospaced'> | ||
2603 | root@crownbay:~# opreport --callgraph /boot/vmlinux-3.4.11-yocto-standard | ||
2604 | |||
2605 | 392 6.9639 vmlinux-3.4.11-yocto-standard sock_aio_read | ||
2606 | 736 13.0751 vmlinux-3.4.11-yocto-standard __generic_file_aio_write | ||
2607 | 3255 57.8255 vmlinux-3.4.11-yocto-standard inet_recvmsg | ||
2608 | 785 0.1690 vmlinux-3.4.11-yocto-standard tcp_recvmsg | ||
2609 | 1790 31.7940 vmlinux-3.4.11-yocto-standard local_bh_enable | ||
2610 | 1238 21.9893 vmlinux-3.4.11-yocto-standard __kfree_skb | ||
2611 | 992 17.6199 vmlinux-3.4.11-yocto-standard lock_sock_nested | ||
2612 | 785 13.9432 vmlinux-3.4.11-yocto-standard tcp_recvmsg [self] | ||
2613 | 525 9.3250 vmlinux-3.4.11-yocto-standard release_sock | ||
2614 | 112 1.9893 vmlinux-3.4.11-yocto-standard tcp_cleanup_rbuf | ||
2615 | 72 1.2789 vmlinux-3.4.11-yocto-standard skb_copy_datagram_iovec | ||
2616 | |||
2617 | 170 0.0366 vmlinux-3.4.11-yocto-standard skb_copy_datagram_iovec | ||
2618 | 1491 73.3038 vmlinux-3.4.11-yocto-standard memcpy_toiovec | ||
2619 | 327 16.0767 vmlinux-3.4.11-yocto-standard skb_copy_datagram_iovec | ||
2620 | 170 8.3579 vmlinux-3.4.11-yocto-standard skb_copy_datagram_iovec [self] | ||
2621 | 20 0.9833 vmlinux-3.4.11-yocto-standard copy_to_user | ||
2622 | |||
2623 | 2588 98.2909 vmlinux-3.4.11-yocto-standard copy_to_user | ||
2624 | 2349 0.5059 vmlinux-3.4.11-yocto-standard __copy_to_user_ll | ||
2625 | 2349 89.2138 vmlinux-3.4.11-yocto-standard __copy_to_user_ll [self] | ||
2626 | 166 6.3046 vmlinux-3.4.11-yocto-standard do_page_fault | ||
2627 | </literallayout> | ||
2628 | Remember that by default OProfile sessions are cumulative | ||
2629 | i.e. if you start and stop a profiling session, then start a | ||
2630 | new one, the new one will not erase the previous run(s) but | ||
2631 | will build on it. If you want to restart a profile from scratch, | ||
2632 | you need to reset: | ||
2633 | <literallayout class='monospaced'> | ||
2634 | root@crownbay:~# opcontrol --reset | ||
2635 | </literallayout> | ||
2636 | </para> | ||
2637 | </section> | ||
2638 | |||
2639 | <section id='oprofileui-a-gui-for-oprofile'> | ||
2640 | <title>OProfileUI - A GUI for OProfile</title> | ||
2641 | |||
2642 | <para> | ||
2643 | Yocto also supports a graphical UI for controlling and viewing | ||
2644 | OProfile traces, called OProfileUI. To use it, you first need | ||
2645 | to clone the oprofileui git repo, then configure, build, and | ||
2646 | install it: | ||
2647 | <literallayout class='monospaced'> | ||
2648 | [trz@empanada tmp]$ git clone git://git.yoctoproject.org/oprofileui | ||
2649 | [trz@empanada tmp]$ cd oprofileui | ||
2650 | [trz@empanada oprofileui]$ ./autogen.sh | ||
2651 | [trz@empanada oprofileui]$ sudo make install | ||
2652 | </literallayout> | ||
2653 | OprofileUI replaces the 'opreport' functionality with a GUI, | ||
2654 | and normally doesn't require the user to use 'opcontrol' either. | ||
2655 | If you want to profile the kernel, however, you need to either | ||
2656 | use the UI to specify a vmlinux or use 'opcontrol' to specify | ||
2657 | it on the target: | ||
2658 | </para> | ||
2659 | |||
2660 | <para> | ||
2661 | First, on the target, check if vmlinux file: is set: | ||
2662 | <literallayout class='monospaced'> | ||
2663 | root@crownbay:~# opcontrol --status | ||
2664 | </literallayout> | ||
2665 | If not: | ||
2666 | <literallayout class='monospaced'> | ||
2667 | root@crownbay:~# opcontrol --shutdown | ||
2668 | root@crownbay:~# opcontrol --vmlinux=/boot/vmlinux-`uname -r` | ||
2669 | root@crownbay:~# opcontrol --start-daemon | ||
2670 | </literallayout> | ||
2671 | Now, start the oprofile UI on the host system: | ||
2672 | <literallayout class='monospaced'> | ||
2673 | [trz@empanada oprofileui]$ oprofile-viewer | ||
2674 | </literallayout> | ||
2675 | To run a profile on the remote system, first connect to the | ||
2676 | remote system by pressing the 'Connect' button and supplying | ||
2677 | the IP address and port of the remote system (the default | ||
2678 | port is 4224). | ||
2679 | </para> | ||
2680 | |||
2681 | <para> | ||
2682 | The oprofile server should automatically be started already. | ||
2683 | If not, the connection will fail and you either typed in the | ||
2684 | wrong IP address and port (see below), or you need to start | ||
2685 | the server yourself: | ||
2686 | <literallayout class='monospaced'> | ||
2687 | root@crownbay:~# oprofile-server | ||
2688 | </literallayout> | ||
2689 | Or, to specify a specific port: | ||
2690 | <literallayout class='monospaced'> | ||
2691 | root@crownbay:~# oprofile-server --port 8888 | ||
2692 | </literallayout> | ||
2693 | Once connected, press the 'Start' button and then run the | ||
2694 | wget workload on the remote system: | ||
2695 | <literallayout class='monospaced'> | ||
2696 | root@crownbay:~# rm linux-2.6.19.2.tar.bz2; wget <ulink url='http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2'>http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2</ulink>; sync | ||
2697 | Connecting to downloads.yoctoproject.org (140.211.169.59:80) | ||
2698 | linux-2.6.19.2.tar.b 100% |*******************************| 41727k 0:00:00 ETA | ||
2699 | </literallayout> | ||
2700 | Once the workload completes, press the 'Stop' button. At that | ||
2701 | point the OProfile viewer will download the profile files it's | ||
2702 | collected (this may take some time, especially if the kernel | ||
2703 | was profiled). While it downloads the files, you should see | ||
2704 | something like the following: | ||
2705 | </para> | ||
2706 | |||
2707 | <para> | ||
2708 | <imagedata fileref="figures/oprofileui-downloading.png" width="6in" depth="7in" align="center" scalefit="1" /> | ||
2709 | </para> | ||
2710 | |||
2711 | <para> | ||
2712 | Once the profile files have been retrieved, you should see a | ||
2713 | list of the processes that were profiled: | ||
2714 | </para> | ||
2715 | |||
2716 | <para> | ||
2717 | <imagedata fileref="figures/oprofileui-processes.png" width="6in" depth="7in" align="center" scalefit="1" /> | ||
2718 | </para> | ||
2719 | |||
2720 | <para> | ||
2721 | If you select one of them, you should see all the symbols that | ||
2722 | were hit during the profile. Selecting one of them will show a | ||
2723 | list of callers and callees of the chosen function in two | ||
2724 | panes below the top pane. For example, here's what we see | ||
2725 | when we select __copy_to_user_ll(): | ||
2726 | </para> | ||
2727 | |||
2728 | <para> | ||
2729 | <imagedata fileref="figures/oprofileui-copy-to-user.png" width="6in" depth="7in" align="center" scalefit="1" /> | ||
2730 | </para> | ||
2731 | |||
2732 | <para> | ||
2733 | As another example, we can look at the busybox process and see | ||
2734 | that the progress meter made a system call: | ||
2735 | </para> | ||
2736 | |||
2737 | <para> | ||
2738 | <imagedata fileref="figures/oprofileui-busybox.png" width="6in" depth="7in" align="center" scalefit="1" /> | ||
2739 | </para> | ||
2740 | </section> | ||
2741 | |||
2742 | <section id='oprofile-documentation'> | ||
2743 | <title>Documentation</title> | ||
2744 | |||
2745 | <para> | ||
2746 | Yocto already has some information on setting up and using | ||
2747 | OProfile and oprofileui. As this document doesn't cover | ||
2748 | everything in detail, it may be worth taking a look at the | ||
2749 | Yocto Project Development Manual | ||
2750 | </para> | ||
2751 | |||
2752 | <para> | ||
2753 | The OProfile manual can be found here: | ||
2754 | <ulink url='http://oprofile.sourceforge.net/doc/index.html'>OProfile manual</ulink> | ||
2755 | </para> | ||
2756 | |||
2757 | <para> | ||
2758 | The OProfile website contains links to the above manual and | ||
2759 | bunch of other items including an extensive set of examples: | ||
2760 | <ulink url='http://oprofile.sourceforge.net/about/'>About OProfile</ulink> | ||
2761 | </para> | ||
2762 | </section> | ||
2763 | </section> | ||
2764 | |||
2765 | <section id='profile-manual-sysprof'> | 2231 | <section id='profile-manual-sysprof'> |
2766 | <title>Sysprof</title> | 2232 | <title>Sysprof</title> |
2767 | 2233 | ||
diff --git a/documentation/ref-manual/ref-features.xml b/documentation/ref-manual/ref-features.xml index 56e1185681..fd7693500b 100644 --- a/documentation/ref-manual/ref-features.xml +++ b/documentation/ref-manual/ref-features.xml | |||
@@ -308,6 +308,13 @@ | |||
308 | <listitem><para><emphasis>nfs-server:</emphasis> | 308 | <listitem><para><emphasis>nfs-server:</emphasis> |
309 | Installs an NFS server. | 309 | Installs an NFS server. |
310 | </para></listitem> | 310 | </para></listitem> |
311 | <listitem><para><emphasis>perf:</emphasis> | ||
312 | Installs profiling tools such as | ||
313 | <filename>perf</filename>, <filename>systemtap</filename>, | ||
314 | and <filename>LTTng</filename>. | ||
315 | For general information on user-space tools, see the | ||
316 | <ulink url='&YOCTO_DOCS_SDK_URL;#sdk-manual'>Yocto Project Software Development Kit (SDK) Developer's Guide</ulink>. | ||
317 | </para></listitem> | ||
311 | <listitem><para><emphasis>ssh-server-dropbear:</emphasis> | 318 | <listitem><para><emphasis>ssh-server-dropbear:</emphasis> |
312 | Installs the Dropbear minimal SSH server. | 319 | Installs the Dropbear minimal SSH server. |
313 | </para></listitem> | 320 | </para></listitem> |
@@ -328,13 +335,6 @@ | |||
328 | For information on tracing and profiling, see the | 335 | For information on tracing and profiling, see the |
329 | <ulink url='&YOCTO_DOCS_PROF_URL;'>Yocto Project Profiling and Tracing Manual</ulink>. | 336 | <ulink url='&YOCTO_DOCS_PROF_URL;'>Yocto Project Profiling and Tracing Manual</ulink>. |
330 | </para></listitem> | 337 | </para></listitem> |
331 | <listitem><para><emphasis>tools-profile:</emphasis> | ||
332 | Installs profiling tools such as | ||
333 | <filename>oprofile</filename>, <filename>exmap</filename>, | ||
334 | and <filename>LTTng</filename>. | ||
335 | For general information on user-space tools, see the | ||
336 | <ulink url='&YOCTO_DOCS_SDK_URL;#sdk-manual'>Yocto Project Software Development Kit (SDK) Developer's Guide</ulink>. | ||
337 | </para></listitem> | ||
338 | <listitem><para><emphasis>tools-sdk:</emphasis> | 338 | <listitem><para><emphasis>tools-sdk:</emphasis> |
339 | Installs a full SDK that runs on the device. | 339 | Installs a full SDK that runs on the device. |
340 | </para></listitem> | 340 | </para></listitem> |