Теоретически фильтрация может выполняться на разных уровнях: на аппаратном уровне, в ядре ОС или в коде пользовательского пространства. Для последних версий Intel Processor Trace (intel_pt) фильтрация выполняется модулем PMU аппаратной трассировки:
Справочная страница perf-record
--filter=<filter>
Event filter. This option should follow an event selector (-e)
which selects either tracepoint event(s) or a hardware trace PMU
(e.g. Intel PT or CoreSight). ...
· address filters
A hardware trace PMU advertises its ability to accept a number of
address filters by specifying a non-zero value in
/sys/bus/event_source/devices/<pmu>/nr_addr_filters.
Address filters have the format:
filter|start|stop|tracestop <start> [/ <size>] [@<file name>]
Where:
- 'filter': defines a region that will be traced.
Таким образом, первый подход лучше с точки зрения размера журнала трассировки. Он генерирует выходные данные трассировки только для диапазона адресов EIP функции func1, а пакеты журнала трассировки не генерируются аппаратным обеспечением для других адресов. Второй подход — это полная трассировка, которая должна генерировать сотни мегабайт в секунду для каждого выполненного вызова.
Обработка фильтров выполняется аппаратно, поэтому нет больших накладных расходов. Я думаю, что оборудование для трассировки не будет генерировать каких-либо накладных расходов на выполнение кода за пределами отфильтрованного диапазона адресов и создаст около 1-5% накладных расходов на выполнение кода в отфильтрованном (обязательном) диапазоне.
http://halobates.de/blog/p/406 дает ссылку на описание оборудования intel sdm, том 3, глава 35, процессор Intel трассировка 35.2.4.3 Фильтрация по IP (в таблице 35-6 указано 4 регистра диапазона аппаратной фильтрации. IA32_RTIT_CTL MSR, поэтому можно определить до 4 диапазонов адресов)
Генерация пакетов трассировки с настраиваемой фильтрацией по IP поддерживается, если CPUID. (EAX=14H, ECX=0):EBX[бит 2] = 1. Intel PT можно настроить для включения генерации пакетов, содержащих архитектурные состояния, только когда процессор выполнение кода в определенных диапазонах IP-адресов. Если IP-адрес находится за пределами этих диапазонов, генерация некоторых пакетов блокируется. ... Когда ADDRn_CFG настроен на включение IP-фильтрации (см. Раздел 35.3.1), трассировка начнется, когда будет замечена принятая ветвь или событие, целевой адрес которого находится в диапазоне ADDRn. ... Обратите внимание, что некоторые пакеты, такие как MTC (раздел 35.3.7) и другие пакеты синхронизации, не зависят от FilterEn.
35.2.5.5 Включение фильтра (FilterEn) Включение фильтра указывает на то, что указатель инструкций (IP) находится в диапазоне IP-адресов, для наблюдения за которыми настроен Intel PT. ... Когда FilterEn равен 0, пакеты потока управления не генерируются (например, TNT, TIP). Однако некоторые пакеты, такие как PIP, MTC и PSB, могут по-прежнему генерироваться, пока FilterEn не установлен.
Для получения точных временных меток необходимо правильно настроить параметры intel_pt. Временные метки в режиме трассировки intel_pt генерируются аппаратным обеспечением в соответствии с параметрами perf Record intel_pt. Справочная страница perf-intel-pt говорит что есть опции tsc, mtc, cyc для получения временных меток
tsc Always supported. Produces TSC timestamp packets to provide
timing information. ...
mtc Produces MTC timing packets.
MTC packets provide finer grain timestamp information than TSC
packets. MTC packets record time using the hardware crystal
clock (CTC) which is related to TSC packets using a TMA packet.
Support for this feature is indicated by:
/sys/bus/event_source/devices/intel_pt/caps/mtc
which contains "1" if the feature is supported and
"0" otherwise.
The frequency of MTC packets can also be specified - see
mtc_period below.
cyc Produces CYC timing packets.
CYC packets provide even finer grain timestamp information than
MTC and TSC packets. A CYC packet contains the number of CPU
cycles since the last CYC packet. Unlike MTC and TSC packets,
CYC packets are only sent when another packet is also sent.
person
osgx
schedule
13.07.2020
perf record
, там указано, сколько фрагментов данных было потеряно. - person osgx   schedule 14.07.2020