我有一個非常簡單的問題,我還沒有找到答案。
比如說,我有一個共享庫 X,由 100 個同時運行的應用程式 A0、A1、... A99 使用。我已經使用“X-Provider”作為提供程式名稱來檢測我的庫和 LTTNG。我的用戶如何區分 A10 和 A15 中發生的 X-Provider 事件?
uj5u.com熱心網友回復:
使用lttng命令列實用程式,將vpid要記錄的背景關系欄位添加到您的事件記錄中,例如:
$ lttng add-context -u -t vpid
這針對當前錄制會話的所有用戶空間通道;您當然可以選擇特定的錄制會話和/或頻道(請參閱lttng-add-context(1))。
您需要在啟動跟蹤器 ( lttng start) 之前使用此命令。
您的所有事件記錄都將有一個名為的背景關系欄位vpid,它是發出它們的行程的虛擬 ID。
現在,您需要找到一種將此類 VPID 與實體 ID(A10、A15 等)相關聯的方法。您可以使用自己的特定于應用程式的策略來執行此操作,或者您可以在啟動應用程式時簡單地記錄一個初始事件,該事件指示實體 ID/名稱,例如:
tracepoint(x_provider, app_state, app_id);
然后,在讀取結果跟蹤時,您可以將x_provider:app_state事件記錄資訊與庫發出的事件的記錄相關聯。例如,使用Babeltrace 2 Python 系結:
import bt2
vpid_app_ids = {}
for msg in bt2.TraceCollectionMessageIterator('/path/to/trace'):
if type(msg) is not bt2._EventMessageConst:
continue
vpid = int(msg.event.common_context_field['vpid'])
if msg.event.name == 'x_provider:app_state':
app_id = int(msg.event.payload_field['app_id'])
vpid_app_ids[vpid] = app_id
else:
app_id = vpid_app_ids[vpid]
# Continue to process `msg.event` knowing the instance ID is
# `app_id`...
我沒有測驗上面的例子,但你明白了要點。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/413771.html
標籤:
上一篇:有沒有一種方法可以在ebpf程式和用戶空間程式之間共享一些ebpf映射,該映射具有使用libbpf作為鍵的值結構
