у меня есть LTTNg
трассировка, которую я анализирую, используя babeltrace API. Поэтому мне было интересно, смогу ли я считать все события в трассировке (или потоке), не повторяя их. Какие функции из pubilc API я могу использовать для этого?
Сама природа CTF делает невозможным подсчет записей о событиях данного пакета за постоянное время. Контекст пакета может как-то включать поле количества записей о событиях, но оно не указано, поэтому универсальные инструменты не будут его использовать.
Таким образом, единственный способ подсчета событий — это, к сожалению, итерация записей событий. Самый простой способ — подсчитать количество строк, которые text
формат babeltrace(1)
отпечатки инструментов:
babeltrace /path/to/ctf/trace/directory | wc --lines
Это работает до тех пор, пока существует одна строка для каждой напечатанной записи события, что имеет место, если запись события не содержит строковое поле, которое имеет новую строку (в настоящее время не экранируется в текстовом выводе).
Вы также можете рассмотреть возможность удаления записей о событиях. Они не выводятся на стандартный вывод babeltrace(1)
, но инструмент печатает сообщение, включающее счетчик, к стандартной ошибке, когда они обнаружены.
Там нет пути с током babeltrace(1)
инструмент для печати только тех событий, которые принадлежат пакетам данного потока данных. Если вам это нужно, я предлагаю удалить все файлы потока данных, кроме того, для которого вам необходим счетчик записей о событиях, и снова выполнить приведенную выше команду.
Также рассмотрим привязки Babeltrace Python, например (не тестировался):
import babeltracedef count_ctf_event_records(path):
trace_collection = babeltrace.TraceCollection()
trace_collection.add_trace(path, 'ctf')
return sum(1 for event in trace_collection.events)if __name__ == '__main__':
import sys
print(count_ctf_event_records(sys.argv[1]))
Сохранено как count.py
, вы можете попробовать это:
python3 count.py /path/to/ctf/trace/directory
Подсчет записей событий определенного потока данных с привязками Python оставлен читателю в качестве упражнения.
Сказав это, я не знаю, является ли подход привязок Python быстрее, чем babeltrace(1)
один.
Других решений пока нет …