Статья разработчика Intel(R) System Studio: настройка, сборка и профилировка Linux-ядра Android с помощью VTune

Статья разработчика Intel(R) System Studio: настройка, сборка, отладка и оптимизация основных программных компонентов Android *

I. Подготовка и настройка среды разработки.

1. Аппаратная среда назначения.

В этой статье в качестве аппаратной платформы используется плата Minnowboard MAX. Плата Minnowboard оборудована процессором Intel® Atom™, предназначенным для реализации архитектуры Intel® на рынке компактных и недорогих встроенных систем для разработчиков и производителей. Это решение обладает исключительной производительностью, гибкостью и открытостью, при этом оно соответствует всем применимым стандартам.

Плата Minnowboard Max: технические характеристики
ЦП64-разрядный процессор Intel® Atom™ E3815 (1,46 ГГц, одно ядро) или E3825 (1,33 Гц, два ядра)
ГрафикаВстроенный графический адаптер Intel® HD Graphics
Память1~2 ГБ ОЗУ DDR3
Разъемы ввода-вывода

Видео: microHDMI/MicroSD/SATA2/USB 3.0 (хост)/ USB 2.0 (хост)/последовательный порт/Ethernet

ОСLinux/Yocto Linux/Windows 8.1/Android 4.4

* Более подробные сведения см. на официальной странице Minnowboard: http://www.minnowboard.org/.

2. Программная среда.

ОС хоста: Ubuntu 14.04 LTS/64-разрядная версия Windows 7.

Интегрированная среда разработки: Android Developer Tools/eclipse KEPLER.

Инструменты: Intel® System Studio 2015.

Целевая ОС: Android 4.2.2.

3. Настройка программной среды разработки Android.

  • Настройте рабочую станцию (Ubuntu Linux). 
sudo dpkg --assert-multi-arch
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java6-installer

sudo apt-get install git git-core gnupg flex bison gperf build-essential ccache squashfs-tools zip curl libc6-dev libncurses5-dev x11proto-core-dev g++-multilib mingw32 tofrodos  python-markdown libxml2-utils zlib1g-dev:i386 libx11-dev libreadline6-dev xsltproc

echo 'export USE_CCACHE=1' >> ~/.bashrc
ccache -M 16

mkdir ~ / bin
PATH=~/bin:$PATH
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
  • Загрузите код.
repo init -u https://github.com/android-ia/platform_manifest.git
repo sync -j4 -q -c --no-clone-bundle
  • Выполните сборку. 
source build/envsetup.sh
lunch
<select minnow-eng>
make -j4

 

  • Создайте установочный USB-накопитель и вставьте его в разъем на плате Minnowboard.

Скопируйте файл android-ia/out/target/product/minnowboard_max/live.img и создайте образ установщика на USB-накопителе. В Windows можно создать установочный образ Android на USB-накопителе с помощью программы Win32diskimager. Затем вставьте USB-накопитель с образом установщика Android в разъем на плате Minnowboard. После загрузки выберите установку Android.

  • Подключите Android на плате Minnowboard к главному компьютеру.

После успешной загрузки подключитесь к целевому устройству с помощью кабеля Ethernet. Настройте подключение.

adb connect 192.168.42.1
adb shell

 

2. С помощью VTune.

Инструмент VTune, предназначенный для анализа производительности, позволяет выделить области наименее эффективного использования ЦП в отдельных приложениях и во всей системе.

Приведенные ниже ссылки помогут обнаружить такие неэффективные области в Android. 

В этой статье описывается профилирование систем Android. Для профилирования системы (включая ядро Linux) с помощью общесистемной функции профилирования VTune некоторые функции, способные останавливать профилирование VTune, будут добавлены на уровень ядра Linux в Android, а также будет реализован настраиваемый пользовательский анализ в VTune. Также поясняется компиляция Android и обновление загрузочного образа с помощью fastboot, ведение журнала и некоторые команды ADB в Android, что необходимо для такого анализа.

1. Пример остановки профилирования VTune.

При работе на уровне ядра Linux в Android иногда требуется остановить профилирование в момент определенного события или сигнала либо при возникновении исключений (ошибок ядра). В этом случае можно приступить к анализу сразу же после нужной точки отладки. Для этого можно отправить сигнал QUIT в процесс VTune, который запускается одновременно с началом анализа из графического пользовательского интерфейса VTune или из командной строки. Ниже приведен пример функции для обнаружения процесса VTune и отправки сигнала QUIT, чтобы остановить профилирование.

void stop_vtune_process (void)
{
	struct task_struct *p;
	int j;
	int flasg_to_skip_sh = 0;
	
	for_each_process(p) 	{
		for (j=0;j< (TASK_COMM_LEN-4);j++) {
			if (p->comm[j] == 'a' && p->comm[j+1] == 'm' && p->comm[j+2] == 'p' \
				&& p->comm[j+3] == 'l' && p->comm[j+4] == 'x') {
                                /* found the amplx ... in the process name. */ 
				printk ("[vtune] %d %s \n",task_pid_nr(p),p->comm);
				if (flasg_to_skip_sh) {
					task_lock(p);	
					printk("[vtune]Kill %d(%s)\n",task_pid_nr(p), p->comm);
					task_unlock(p);
					do_send_sig_info(SIGQUIT, SEND_SIG_PRIV, p, false);
					break;
				}
				else	{
					printk("[vtune] skip sh for amplxe\n");
					flasg_to_skip_sh++;
				}
			}
		}
	}
}

Можно добавить в исходный код ядра Linux такие функции, как события ошибок ядра, события USB и прочие события, при которых необходимо остановить профилирование и начать анализ в VTune.

(2) Полезные ресурсы: fastboot, ADB, журнал ядра (плата Minnowboard MAX).

<build source codes>
make -j4

<download  kernel image by fastboot>
adb reboot bootloader
fastboot -t 192.168.42.1 flash boot boot.img
fastboot -t 192.168.42.1 continue

<logging kernel via adb>
adb shell cat /proc/kmsg | grep vtune

(3) Настройка и использование VTune для профилирования системы.

Для получения подробной системной информации при профилировании лучше использовать функцию Advanced hotspot с системным профилем: здесь немного информации о стеке вызовов, но зато представлены системные процессы и функции, вызываемые при профилировании.  

  • Свойства проекта — тип целевой системы: профилирование системы 
  • New Analysis — Choose analysis type — advanced hotspot, collection level: hotspot

<Снимок экрана с результатом — пример: подробный анализ узкого места>

advanced hotspot - system wide profile

Здесь используются три частых аппаратных события: CPU_CLK_UNHALTED.CORE/CPU_CLK_UNHALTED_REF_TSC/
INST_RETIRED_ANY. Если же код профилируемой системы в большей степени зависит от задержек или нужно использовать определенное аппаратное событие PMU, используйте настраиваемый анализ. В следующем примере — настраиваемый анализ.

  • Project properties — Attach process — select process
  • New Analysis — Custom Analysis — New Hardware Event-based sampling analysis
  • New Hardware Event-based sampling analysis-Edit — добавьте нужные события
  • New Hardware Event-based sampling analysis-Edit — Check the collect stacks или Analyze system-wide context switches

<Снимок экрана с результатом — пример: настраиваемый анализ>

Hardware Event-based sampling analysis

 

Можно проводить анализ работы процесса за определенное время, как показано на рисунке выше. Если будет обнаружен подозрительный процесс, требующий более подробного рассмотрения, выберите Vtune — Project Properties — Target Type — Attach to Process и повторите показанное выше тестирование для сужения возможного круга неполадок.

 

Para obtener información más completa sobre las optimizaciones del compilador, consulte nuestro Aviso de optimización.