Yocto 기반으로 Profile 기능과 Trace Debug기능을 추가하여 사용하는 방법을 알아보기 위해서 아래와 같이 설정변경 후,
이를 기반으로 Profile 과 Tracing 사용을 해본다.
Yocto에서 Profile 과 Tracing은 소스를 세부적으로 분석하는 Debug 기술이자, 성능측정도 가능하므로 중요한 기술이다.
이를 제대로 사용하려면 각 IDE Tool 도 알아두어야 한다
대부분 Ecplise 기반으로 제공되어지며, 각 Chip 제조사 Application들도 보면 기반을 다 Ecplise 기반으로 되어있다.
Ecplise/Ecplise-CDT
TI CCS (TI사 제공) 이외 각 제조사 IDE 참조
1.1 Yocto 의 기본문법 및 User Config 이해
Yocto의 기본적인 이해
Yocto User Configuration 수정방법
https://ahyuo79.blogspot.com/2020/02/yocto-user-configuration.html
기본 Yocto Recipe 및 Kernel Recipe 수정방법
https://ahyuo79.blogspot.com/2020/02/yocto-recipe.html
Yocto sysLog 구성
Yocto의 기본적인 이해
Yocto Recipe 작성방법 (반드시 확인 및 이해)
Yocto User Configuration 수정방법
https://ahyuo79.blogspot.com/2020/02/yocto-user-configuration.html
기본 Yocto Recipe 및 Kernel Recipe 수정방법
https://ahyuo79.blogspot.com/2020/02/yocto-recipe.html
Yocto sysLog 구성
https://ahyuo79.blogspot.com/2020/04/yocto-syslogd.html
1.2 Yocto User Configuration 설정변경
별도로 추가하여 설정
1.2 Yocto User Configuration 설정변경
- Yocto 의 User Configuration 수정
$ cat conf/local.conf //일반적인 설정 ## Yocto Version에따라 설정변경될 수 있음 아래 Manual 참조 ## 일반적인 EXTRA_IMAGE_FEATURES 설정으로 debug 기본정보포함 (기본 /sys/kernel/debug는 동작됨) EXTRA_IMAGE_FEATURES ?= "debug-tweaks"
별도로 추가하여 설정
## Profile 과 Tracing 을 위해 별도로 추가되는 명령들 ## IMAGE의 Profile Tool을 추가 EXTRA_IMAGE_FEATURES += "tools-profile" ## Package들에 Debug 정보를 추가 (bitbake를 이용하여 xxx-dbg Manual로 해도됨) EXTRA_IMAGE_FEATURES += "dbg-pkgs" ## Yocto는 default로 strip을 하여 debug정보 및 삭제하므로 이를 방지 INHIBIT_PACKAGE_STRIP = "1" ## *-dbg packages 만들 때 Bin 와 Debug 정보를 어떻게 분리할지를 결정 (bin 에 .debug 생성) PACKAGE_DEBUG_SPLIT_STYLE = 'debug-file-directory'
** EXTRA_IMAGE_FEATURES 는 항상 Yocto Version에 따라 반드시 참조
gdb 와 같이 사용하고자 하면 아래와 같이 설정
EXTRA_IMAGE_FEATURES += "dbg-pkgs"
EXTRA_IMAGE_FEATURES += "tools-debug"
Yocto에서 deb 방식으로 package 관리할 경우 (apt-get)
https://imxdev.gitlab.io/tutorial/How_to_apt-get_to_the_Yocto_Project_image/EXTRA_IMAGE_FEATURES
https://www.yoctoproject.org/docs/current/ref-manual/ref-manual.html#ref-features-image
1.3 Yocto 의 Kernel Config 수정
https://en.wikipedia.org/wiki/Ftrace
fragment가 생성되었으나 이전 .config 의 나의 설정과 다름 (주의)
추후 필요한 것만 직접 적용하여 넣도록하자
ftrace 의 Kernel config 설정
https://stackoverflow.com/questions/41238386/how-to-enable-or-configure-ftrace-module
https://docs.google.com/presentation/d/13zIFUTTdChr7JNpZnb1K56aUsv_E1cOWausjQpsqcGc/htmlpresent
https://docs.windriver.com/bundle/Wind_River_Linux_Tutorial_Dynamic_Kernel_Debugging_with_ftrace_and_kprobes_LTS_1/page/zjd1552591139310.html
https://www.yoctoproject.org/docs/latest/ref-manual/ref-manual.html#var-KBUILD_DEFCONFIG
https://www.yoctoproject.org/docs/latest/ref-manual/ref-manual.html#kernel-related-tasks
Yocto Profile manual
Zeus(3.0)
https://yoctoproject.org/docs/3.0/profile-manual/profile-manual.html
Warrior(2.7)
https://yoctoproject.org/docs/2.7/profile-manual/profile-manual.html
Fido(1.8)
https://yoctoproject.org/docs/1.8/profile-manual/profile-manual.html
1.4 Yocto 설정 변경 시 문제사항
이 문제는 아래의 WIC 부분 참조
아래문제도 역시 /var/log 와 kernel size 문제를 제거후 해결됨
https://www.linode.com/community/questions/17915/why-did-my-server-miss-urandom-warnings-due-to-rate-limiting
Yocto 의 WIC Partition (해결방법)
2. Yocto의 Profile 및 Trace 확인 및 사용
2.1 Ftrace의 기본동작 확인
https://archive.eclipse.org/tracecompass.incubator/doc/org.eclipse.tracecompass.incubator.ftrace.doc.user/User-Guide.html
https://archive.eclipse.org/tracecompass/doc/stable/org.eclipse.tracecompass.doc.user/Trace-Compass-Main-Features.html
https://archive.eclipse.org/tracecompass.incubator/doc/org.eclipse.tracecompass.incubator.kernel.doc.user/User-Guide.html
2.2 LTTng 사용방법
아래와 같이 Ecplise를 이용하여 LTTng와 함께 쉽게 디버깅가능
관련참조자료
https://www.nxp.com/docs/en/application-note/AN5172.pdf
3. EXTRA_IMAGE_FEATURE의 확장 설정
User Config의 local config 부분에 확장추가
https://wiki.yoctoproject.org/wiki/Tracing_and_Profiling#General_Setup
https://wiki.yoctoproject.org/wiki/Tracing_and_Profiling#Collecting_and_viewing_a_trace_in_Eclipse
Zeus(3.0)
https://www.yoctoproject.org/docs/3.0/ref-manual/ref-manual.html#ref-features-image
Warrior(2.7)
https://www.yoctoproject.org/docs/2.7/ref-manual/ref-manual.html#ref-features-image
Fido(1.8)
https://www.yoctoproject.org/docs/1.8/ref-manual/ref-manual.html#ref-features-image
Yocto SDK Manual
https://www.yoctoproject.org/docs/2.7/sdk-manual/sdk-manual.html
Intel Vtune
https://software.intel.com/content/www/us/en/develop/documentation/vtune-help/top/set-up-analysis-target/embedded-linux-targets/configure-yocto-project-with-linux-target-package.html
https://software.intel.com/content/www/us/en/develop/documentation/vtune-help/top.html
https://www.yoctoproject.org/docs/current/ref-manual/ref-manual.html#ref-features-image
1.3 Yocto 의 Kernel Config 수정
- WORKDIR 에서 현재 Kernel Config 확인
$ vi ./tmp/work/imx6sxsabresd-poky-linux-gnueabi/linux-imx/4.19.35-r0/build/.config //직접 찾아서 확인 CONFIG_BUILD_LTTNG //확인했으나 없음 CONFIG_FUNCTION_TRACER //확인했으나 없음 $ vi ../sources/meta-fsl-bsp-release/imx/meta-bsp/recipes-kernel/linux/linux-imx_4.19.35.bbappend // Kernel Recipe가 문제가 있음 # 부분 막음 do_preconfigure_append()
https://en.wikipedia.org/wiki/Ftrace
- Kernel 의 CONFIG 설정변경
$ bitbake linux-imx -c configme // patch 후 *cfg를 적용을 한다고하는데, 동작안됨 $ bitbake linux-imx -c menuconfig // 설정변경 //각 메뉴 선택 후 HELP에서 CONFIG 확인가능 //이미 설정되어있음 > Kernel hacking > Compile-time checks and compiler options > Debug Filesystem (CONFIG_DEBUG_FS) //새로설정 > Kernel hacking > Tracers // (CONFIG_FTRACE) > Kernel hacking > Tracers > Kernel Function Tracer // (CONFIG_FUNCTION_TRACER) > Kernel hacking > Tracers > Kernel Function Graph Tracer // (CONFIG_FUNCTION_GRAPH_TRACER) > Kernel hacking > Tracers > Interrupts-off Latency Tracer // (CONFIG_IRQSOFF_TRACER) > Kernel hacking > Tracers > Preemption-off Latency Tracer // (CONFIG_PREEMPT_TRACER) > Kernel hacking > Tracers > Scheduling Latency Tracer // (CONFIG_SCHED_TRACER) > Kernel hacking > Tracers > Trace max stack // (CONFIG_STACK_TRACER) > Kernel hacking > Tracers > Support for tracing block IO actions // (CONFIG_BLK_DEV_IO_TRACE) > Kernel hacking > Tracers > Kernel function profiler // (CONFIG_FUNCTION_PROFILER) CONFIG_DYNAMIC_FTRACE="y" // 찾지못함 (상위 설정시 자동설정됨) CONFIG_FTRACE_MCOUNT_RECORD="y" // 찾지못함 (상위 설정시 자동설정됨) //추후 별도로 추가 > Kernel hacking > Tracers > Trace syscalls // (CONFIG_FTRACE_SYSCALLS)
fragment가 생성되었으나 이전 .config 의 나의 설정과 다름 (주의)
추후 필요한 것만 직접 적용하여 넣도록하자
$ bitbake linux-imx -c diffconfig //*.cfg 생성 후 이를 Kernel Recipe에 추가 .... ......../fragment.cfg $ cat fragment.cfg // 상위와 다르게 나옴 자세히 보면 선택한 것도 미선택으로 됨 CONFIG_TRACEPOINTS=y CONFIG_UPROBES=y # CONFIG_NET_DROP_MONITOR is not set # CONFIG_ATH6KL_TRACING is not set # CONFIG_MXC_GPU_VIV is not set CONFIG_BINARY_PRINTF=y # CONFIG_DEBUG_PAGE_REF is not set CONFIG_TRACE_IRQFLAGS=y CONFIG_STACKTRACE=y CONFIG_NOP_TRACER=y CONFIG_TRACER_MAX_TRACE=y CONFIG_TRACE_CLOCK=y CONFIG_RING_BUFFER=y CONFIG_EVENT_TRACING=y CONFIG_CONTEXT_SWITCH_TRACER=y CONFIG_RING_BUFFER_ALLOW_SWAP=y CONFIG_PREEMPTIRQ_TRACEPOINTS=y CONFIG_TRACING=y CONFIG_GENERIC_TRACER=y CONFIG_FTRACE=y CONFIG_FUNCTION_TRACER=y # CONFIG_FUNCTION_GRAPH_TRACER is not set CONFIG_TRACE_PREEMPT_TOGGLE=y # CONFIG_PREEMPTIRQ_EVENTS is not set CONFIG_IRQSOFF_TRACER=y CONFIG_PREEMPT_TRACER=y CONFIG_SCHED_TRACER=y # CONFIG_HWLAT_TRACER is not set # CONFIG_FTRACE_SYSCALLS is not set CONFIG_TRACER_SNAPSHOT=y CONFIG_TRACER_SNAPSHOT_PER_CPU_SWAP=y CONFIG_BRANCH_PROFILE_NONE=y # CONFIG_PROFILE_ANNOTATED_BRANCHES is not set # CONFIG_PROFILE_ALL_BRANCHES is not set CONFIG_STACK_TRACER=y CONFIG_BLK_DEV_IO_TRACE=y CONFIG_UPROBE_EVENTS=y CONFIG_PROBE_EVENTS=y CONFIG_DYNAMIC_FTRACE=y CONFIG_DYNAMIC_FTRACE_WITH_REGS=y CONFIG_FUNCTION_PROFILER=y CONFIG_FTRACE_MCOUNT_RECORD=y # CONFIG_FTRACE_STARTUP_TEST is not set # CONFIG_TRACEPOINT_BENCHMARK is not set # CONFIG_RING_BUFFER_BENCHMARK is not set # CONFIG_RING_BUFFER_STARTUP_TEST is not set # CONFIG_PREEMPTIRQ_DELAY_TEST is not set # CONFIG_TRACE_EVAL_MAP_FILE is not set CONFIG_TRACING_EVENTS_GPIO=y $ cp ./build/tmp/work/imx6sxsabresd-poky-linux-gnueabi/linux-imx/4.19.35-r0/fragment.cfg ../sources/meta-fsl-bsp-release/imx/meta-bsp/recipes-kernel/linux/files/kernel_ftrace.cfg //적용 Kernel Recipe 수정
ftrace 의 Kernel config 설정
https://stackoverflow.com/questions/41238386/how-to-enable-or-configure-ftrace-module
https://docs.google.com/presentation/d/13zIFUTTdChr7JNpZnb1K56aUsv_E1cOWausjQpsqcGc/htmlpresent
https://docs.windriver.com/bundle/Wind_River_Linux_Tutorial_Dynamic_Kernel_Debugging_with_ftrace_and_kprobes_LTS_1/page/zjd1552591139310.html
- Kernel 만 다시빌드 및 배포
$ bitbake linux-imx -c compile -f // -f force로 강제로 빌드 후 .config 설정확인 $ bitbake linux-imx -c deploy // 이를 적용 $ bitbake linux-imx -c clean // 전체삭제 $ bitbake linux-imx // 전체동작 (오동작) $ bitbake linux-imx -c configure // 전체동작 (오동작)
https://www.yoctoproject.org/docs/latest/ref-manual/ref-manual.html#var-KBUILD_DEFCONFIG
https://www.yoctoproject.org/docs/latest/ref-manual/ref-manual.html#kernel-related-tasks
- bitbake로 image 생성
$ bitbake core-image-base
Yocto Profile manual
Zeus(3.0)
https://yoctoproject.org/docs/3.0/profile-manual/profile-manual.html
Warrior(2.7)
https://yoctoproject.org/docs/2.7/profile-manual/profile-manual.html
Fido(1.8)
https://yoctoproject.org/docs/1.8/profile-manual/profile-manual.html
1.4 Yocto 설정 변경 시 문제사항
- 처음 발생하는 문제
이 문제는 아래의 WIC 부분 참조
- 두번째 발생하는 문제
아래문제도 역시 /var/log 와 kernel size 문제를 제거후 해결됨
....... Starting Flush Journal to Persistent Storage... systemd-journald[164]: Received request to flush runtime journal from PID 1 [ OK ] Started Flush Journal to Persistent Storage. [ **] A start job is running for dev-mmcblk3p5.device (24s / 1min 30s)random: crng init done random: 7 urandom warning(s) missed due to ratelimiting [ TIME ] Timed out waiting for device dev-mmcblk3p5.device.
https://www.linode.com/community/questions/17915/why-did-my-server-miss-urandom-warnings-due-to-rate-limiting
Yocto 의 WIC Partition (해결방법)
- Partition Size도 가변사이즈로 변경(고정사이즈일 경우)
- Partition 도 삭제했다면 sources에서도 fstab도 같이 수정
- /var/log 부분기능삭제
2. Yocto의 Profile 및 Trace 확인 및 사용
- 현재 설정된 기본기능확인 (EXTRA_IMAGE_FEATURES 확인)
$ cat /etc/fstab // /sys/debug/kernel 별도로 없으며, 상위 debug-tweaks 참조 $ ls /sys/kernel/debug // 상위 (EXTRA_IMAGE_FEATURES ?= "debug-tweaks") 적용 부터 동작 2100000.caam/ extfrag/ pm_genpd/ bdi/ fault_around_bytes pm_qos/ block/ gpio pwm ci_hdrc.0/ hid/ regmap/ ci_hdrc.1/ iio/ regulator/ clear_warn_once memblock/ sleep_time clk/ mmc2/ suspend_stats device_component/ mmc3/ ubi/ devices_deferred mtd/ ubifs/ dma_buf/ opp/ usb/ dri/ pinctrl/ wakeup_sources $ cat /sys/kernel/debug/gpio // GPIO Debug (sysfs도 이용하지만, device tree에서 직접 모듈로 연결가능) .... gpio-112 ( |peri_3v3 ) out hi // sys file이 아닌 device tree에서 gpio 연결 ... gpio-114 ( |sysfs ) out lo ... gpio-160 ( |sysfs ) out hi // sys file에서 export 한 다음 direction 설정 후 값 설정 gpio-161 ( |sysfs ) out hi gpio-170 ( |spi_imx ) out hi // PinCtrl 관련설정값을 쉽게 확인 (device tree의 설정값과 비교) $ cat /sys/kernel/debug/pinctrl/pinctrl-handles // PinCtrl 관련설정값을 세부적으로 확인 (device tree의 설정값과 비교) $ cat /sys/kernel/debug/pinctrl/pinctrl-maps // USB 정보 lsusb $ cat /sys/kernel/debug/usb/devices T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 1 B: Alloc= 0/800 us ( 0%), #Int= 1, #Iso= 0 D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=01 MxPS=64 #Cfgs= 1 P: Vendor=1d6b ProdID=0002 Rev= 4.19 S: Manufacturer=Linux 4.19.35-1.1.0+g0f9917c ehci_hcd S: Product=EHCI Host Controller S: SerialNumber=ci_hdrc.1 C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 4 Ivl=256ms ...... // PMIC Regulator 정보 $ ls /sys/kernel/debug/regulator/ 0-0008-COIN 0-0008-SW1AB 0-0008-SW2 0-0008-SW3A 0-0008-SW3B 0-0008-SWBST 0-0008-VGEN1 0-0008-VGEN2 0-0008-VGEN3 0-0008-VGEN4 0-0008-VGEN5 0-0008-VGEN6 0-0008-VREFDDR 0-0008-VSNVS .......
$ perf // EXTRA_IMAGE_FEATURES 추가설정 후 존재확인 $ lttng // lttng 확인 $ lttng-crash // lttng-crash 확인 $ lttng-relayd // lttng-relayd 확인 $ lttng-sessiond // lttng-sessiond 확인 $ babeltrace // babeltrace 확인 $ babeltrace-log // babeltrace-log $ blktrace //blktrace 존재확인 (Block Device Trace) $ blkparse //blkparse 존재확인 $ iowatcher //blktrace visual tool $ dtrace //dtrace
$ ls /sys/kernel/debug/tracing // 미존재하면 Kernel Config 수정 필요
README set_ftrace_filter
available_events set_ftrace_notrace
available_filter_functions set_ftrace_pid
available_tracers snapshot
buffer_size_kb stack_max_size
buffer_total_size_kb stack_trace
current_tracer stack_trace_filter
dyn_ftrace_total_info timestamp_mode
enabled_functions trace
events trace_clock
free_buffer trace_marker
function_profile_enabled trace_marker_raw
instances trace_options
options trace_pipe
per_cpu trace_stat
printk_formats tracing_cpumask
saved_cmdlines tracing_max_latency
saved_cmdlines_size tracing_on
saved_tgids tracing_thresh
set_event uprobe_events
set_event_pid uprobe_profile
2.1 Ftrace의 기본동작 확인
$ mount -t debugfs nodev /sys/kernel/debug
$ echo 1 > /sys/kernel/debug/tracing/events/sched/sched_wakeup/enable
$ echo 1 > /sys/kernel/debug/tracing/events/sched/sched_switch/enable
$ echo 1 > /sys/kernel/debug/tracing/events/syscalls/enable
## Start Recording
$ echo 1 > /sys/kernel/debug/tracing/tracing_on
$ cat /sys/kernel/debug/tracing/trace > myFtraceFile.txt
$ cat myFtraceFile.txt | head -n 20
# tracer: nop
#
# entries-in-buffer/entries-written: 6606/6606 #P:1
#
# _-----=> irqs-off
# / _----=> need-resched
# | / _---=> hardirq/softirq
# || / _--=> preempt-depth
# ||| / delay
# TASK-PID CPU# |||| TIMESTAMP FUNCTION
# | | | |||| | |
<idle>-0 [000] dns4 2163.718052: sched_wakeup: comm=rcu_preempt pid=10 prio=120 target_cpu=000
<idle>-0 [000] dns4 2163.718080: sched_wakeup: comm=rcu_sched pid=11 prio=120 target_cpu=000
<idle>-0 [000] dns4 2163.728019: sched_wakeup: comm=rcu_preempt pid=10 prio=120 target_cpu=000
<idle>-0 [000] dnH5 2163.728046: sched_wakeup: comm=kworker/0:0 pid=342 prio=120 target_cpu=000
<idle>-0 [000] dns4 2163.728068: sched_wakeup: comm=rcu_sched pid=11 prio=120 target_cpu=000
<idle>-0 [000] dns4 2163.738009: sched_wakeup: comm=rcu_preempt pid=10 prio=120 target_cpu=000
<idle>-0 [000] dns4 2163.738035: sched_wakeup: comm=rcu_sched pid=11 prio=120 target_cpu=000
<idle>-0 [000] dns4 2163.758001: sched_wakeup: comm=kworker/0:0 pid=342 prio=120 target_cpu=000
<idle>-0 [000] dns4 2163.768017: sched_wakeup: comm=rcu_preempt pid=10 prio=120 target_cpu=000
https://archive.eclipse.org/tracecompass.incubator/doc/org.eclipse.tracecompass.incubator.ftrace.doc.user/User-Guide.html
https://archive.eclipse.org/tracecompass/doc/stable/org.eclipse.tracecompass.doc.user/Trace-Compass-Main-Features.html
https://archive.eclipse.org/tracecompass.incubator/doc/org.eclipse.tracecompass.incubator.kernel.doc.user/User-Guide.html
2.2 LTTng 사용방법
아래와 같이 Ecplise를 이용하여 LTTng와 함께 쉽게 디버깅가능
- LTTng Command 사용법 및 Trace Compass or Ecplise에서 분석
$ lttng create mySession // Trace Compass or Ecplise 의 LTTng의 Control의 SSH로 접속가능 $ lttng enable-event sched_switch -k // Trace Compass의 Control의 Provider의 Kernel에서도 설정가능 $ lttng start // Trace Compass의 Control의 Session의 mySession에서 Start 가능 $ lttng stop // Trace Compass의 Control의 Session의 mySession에서 Stop 가능 $ lttng view // Consol에서 정보보기 $ lttng destroy mySession // 본인이 필요 없다면 삭제 , 분석을 한다면 미삭제 $ tar cvzf lttngtest.tar.gz lttng-traces // 이안에 상위에서 만든 각각의 Session들이 존재
- Ecplise 에서 LTTng 분석
- LTTng->Control에서는 SSH로 Target에 연결하여 Control로 가능
- lttng create Session만 진행 후 모든 것을 Remote로 진행가능
- 상위에서 저장된 lttngtest.tar.gz 정보를 Trace Project에서 import하여 분석가능도 가능
관련참조자료
https://www.nxp.com/docs/en/application-note/AN5172.pdf
3. EXTRA_IMAGE_FEATURE의 확장 설정
User Config의 local config 부분에 확장추가
$ cat conf/local.conf ## Yocto Profile Manual 부분의 참고 (미테스트) ## Profile Tool (perf, systemtap, and LTTng ) 설치 (Warrior 사용가능) EXTRA_IMAGE_FEATURES += "perf" ## Debugging Tool 설치 ( strace and gdb) (Warrior 사용가능) EXTRA_IMAGE_FEATURES += "tools-debug"
https://wiki.yoctoproject.org/wiki/Tracing_and_Profiling#General_Setup
https://wiki.yoctoproject.org/wiki/Tracing_and_Profiling#Collecting_and_viewing_a_trace_in_Eclipse
- IMAGE_FEATURE 기능의 변화
Zeus(3.0)
https://www.yoctoproject.org/docs/3.0/ref-manual/ref-manual.html#ref-features-image
Warrior(2.7)
https://www.yoctoproject.org/docs/2.7/ref-manual/ref-manual.html#ref-features-image
Fido(1.8)
https://www.yoctoproject.org/docs/1.8/ref-manual/ref-manual.html#ref-features-image
Yocto SDK Manual
https://www.yoctoproject.org/docs/2.7/sdk-manual/sdk-manual.html
Intel Vtune
https://software.intel.com/content/www/us/en/develop/documentation/vtune-help/top/set-up-analysis-target/embedded-linux-targets/configure-yocto-project-with-linux-target-package.html
https://software.intel.com/content/www/us/en/develop/documentation/vtune-help/top.html