女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一文手把手教你Android中的 eBPF 流量監控

如意 ? 來源:CSDN ? 作者:Peter盼 ? 2020-06-20 10:34 ? 次閱讀

eBPF 網絡流量工具結合使用內核與用戶空間實現來監控設備自上次啟動以來的網絡使用情況。它提供了額外的功能(如套接字標記、分離前臺/后臺流量,以及按 UID 劃分的防火墻),以根據手機狀態阻止應用訪問網絡。從該工具收集的統計數據存儲在稱為 eBPF maps 的內核數據結構中,并且相應結果由 NetworkStatsService 等服務用來提供自設備上次啟動以來的持久流量統計數據。

示例和來源

用戶空間更改主要在 system/netd 和 framework/base 項目中。開發工作在 AOSP 中完成,因此 AOSP 代碼將始終保持最新狀態。源代碼主要位于 system/netd/server/TrafficController*、system/netd/bpfloader 和 system/netd/libbpf/ 中。此外,一些必要的框架變更也在 framework/base/ 和 system/core 中。

實現

Android 9 開始,內核版本為 4.9 或更高且最初搭載了 Android P 版本的 Android 設備必須使用基于 eBPF 的網絡流量監控記帳模塊,而不是 xt_qtaguid。新的基礎架構更靈活且更易于維護,并且不需要任何外部內核代碼。

舊版流量監控和 eBPF 流量監控之間的主要設計差異如圖 1 所示。

一文手把手教你Android中的 eBPF 流量監控

圖 1.舊版流量監控(左)和 eBPF 流量監控(右)的設計差異

新的 trafficController 設計基于 cgroup 級的 eBPF 過濾器以及內核中的 xt_bpf netfilter 模塊。這些 eBPF 過濾器在收發數據包時應用,數據包需要通過這些過濾器。cgroup eBPF 過濾器位于傳輸層,負責根據套接字 UID 以及用戶空間設置對正確的 UID 計算流量。xt_bpf netfilter 掛接在 bw_raw_PREROUTING 和 bw_mangle_POSTROUTING 鏈上,負責對正確的接口計算流量。

在啟動時,用戶空間進程 trafficController 會創建用于收集數據的 eBPF 映射,并將所有映射作為虛擬文件固定在 sys/fs/bpf。然后,特權進程 bpfloader 將預編譯的 eBPF 程序加載到內核中,并將其附加到正確的 cgroup。所有流量都對應于同一個根 cgroup,因此默認情況下,所有進程都應包含在該 cgroup 中。

在運行時,trafficController 可以通過將數據寫入 traffic_cookie_tag_map 和 traffic_uid_counterSet_map 來標記/取消標記套接字。NetworkStatsService 可以從 traffic_tag_stats_map、traffic_uid_stats_map 和 traffic_iface_stats_map 中讀取流量統計數據。除了流量統計數據收集功能之外,trafficController 和 cgroup eBPF 過濾器還負責根據手機設置屏蔽來自某些 UID 的流量。基于 UID 的網絡流量屏蔽功能取代了內核中的 xt_owner 模塊,并且可以通過將數據寫入 traffic_powersave_uid_map、traffic_standby_uid_map 和 traffic_dozable_uid_map 來配置詳細模式。

新實現遵循舊版 xt_qtaguid 模塊實現,因此 TrafficController 和 NetworkStatsService 將使用舊版實現或新實現運行。如果應用使用公共 API,那么無論在后臺使用 xt_qtaguid 還是 eBPF 工具,應該沒有任何區別。

如果設備內核基于 Android 通用內核 4.9(SHA39c856663dcc81739e52b02b77d6af259eb838f6 或更高版本),則無需修改 HAL、驅動程序或內核代碼,即可實現新的 eBPF 工具。

要求

內核配置必須開啟以下配置:

驗證是否已開啟正確配置時,VTS 內核配置測試非常有用。

CONFIG_CGROUP_BPF=y

CONFIG_BPF=y

CONFIG_BPF_SYSCALL=y

CONFIG_NETFILTER_XT_MATCH_BPF=y

CONFIG_INET_UDP_DIAG=y

設備 MEM_LOCK 資源限制必須設為 8 MB 或更多。

舊版 xt_qtaguid 棄用過程

新的 eBPF 工具正在逐步取代 xt_qtaguid 模塊以及它所基于的 xt_owner 模塊。我們將開始從 Android 內核中移除 xt_qtaguid 模塊,并停用不必要的配置。

在 Android 9 版本中,xt_qtaguid 模塊在所有設備上都處于開啟狀態,但直接讀取 xt_qtaguid 模塊 proc 文件的所有公共 API 都移到了 NetworkManagement 服務中。根據設備內核版本和初始 API 級別,NetworkManagement 服務能夠知道 eBPF 工具是否處于開啟狀態,并選擇正確的模塊來獲取每個應用的網絡使用情況統計數據。sepolicy 會阻止 SDK 級別為 28 及以上的應用訪問 xt_qtaguid proc 文件。

在 Android 9 之后的下一個版本中,我們將完全阻止應用訪問這些 xt_qtaguid proc 文件,并開始從新的 Android 通用內核中移除 xt_qtaguid 模塊。移除該模塊后,我們將更新相應內核版本的 Android 基礎配置,以明確關閉 xt_qtaguid 模塊。當 Android 版本的最低內核版本要求為 4.9 或更高時,我們將徹底棄用 xt_qtaguid 模塊。

在 Android 9 版本中,只有搭載 Android 9 版本的設備才需要具備新的 eBPF 功能。如果設備搭載的內核可以支持 eBPF 工具,我們建議在升級到 Android 9 版本時,將設備更新為采用新的 eBPF 功能。沒有強制執行該更新的 CTS 測試。

驗證

您應該定期從 Android 通用內核和 Android AOSP 主分支獲取補丁程序。請確保您的實現通過適用的 VTS 和 CTS 測試,即 netd_unit_test 和 libbpf_test。

測試

提供了內核 net_tests,用來確保您開啟了必需的功能,并向后移植了必需的內核補丁程序。這些測試已集成到 Android 9 版本 VTS 測試中。system/netd/ 中有一些單元測試(netd_unit_test 和 libbpf_test)。netd_integration_test 中有一些驗證新工具整體行為的測試。

CTS 和 CTS 驗證程序

由于這兩個流量監控模塊在 Android 9 版本中都得到支持,因此沒有強制在所有設備上實現新模塊的 CTS 測試。不過,對于內核版本高于 4.9 且最初搭載了 Android 9 版本(即,初始 API 級別大于等于 28)的設備,提供了基于 GSI 的 CTS 測試,用于驗證是否正確配置了新模塊。舊的 CTS 測試(如TrafficStatsTest、NetworkUsageStatsTest 和 CtsNativeNetTestCases)可用于驗證新模塊的行為是否與舊的 UID 模塊一致。

手動測試

system/netd/中有一些單元測試(netd_unit_test、netd_integration_test 和 libbpf_test)。此外,還提供了 dumpsys 支持,以便手動檢查狀態。dumpsys netd 命令可顯示 trafficController 模塊的基本狀態以及是否正確開啟了 eBPF。如果 eBPF 處于開啟狀態,dumpsys netd trafficcontroller 命令會顯示每個 eBPF 映射的詳細內容,包括帶標記的套接字信息、每個標記的統計數據、UID 和 iface,以及所有者 UID 匹配項。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Android
    +關注

    關注

    12

    文章

    3963

    瀏覽量

    129560
  • 流量監控
    +關注

    關注

    0

    文章

    19

    瀏覽量

    7442
  • BPF
    BPF
    +關注

    關注

    0

    文章

    26

    瀏覽量

    4264
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    手把手教你如何調優Linux網絡參數

    在高并發網絡服務場景,Linux內核的默認網絡參數往往無法滿足需求,導致性能瓶頸、連接超時甚至服務崩潰。本文基于真實案例分析,從參數解讀、問題診斷到優化實踐,手把手教你如何調優Linux網絡參數,支撐百萬級并發連接。
    的頭像 發表于 05-29 09:21 ?105次閱讀

    正點原子Linux系列全新視頻教程來啦!手把手教你MP257開發板,讓您輕松入門!

    正點原子Linux系列全新視頻教程來啦!手把手教你MP257開發板,讓您輕松入門! 、視頻觀看 正點原子手把手教你學STM32MP257
    發表于 05-16 10:42

    GPU顯卡維修避坑指南:手把手教你識別行業套路!

    的今天,高端顯卡維修已成“暴利暗流”。虛高報價、偷換配件、技術陷阱……用戶稍有不慎,輕則損失數萬,重則設備報廢。今天小助手將揭露行業亂象,手把手教你識別套路,并推薦
    的頭像 發表于 04-02 20:31 ?614次閱讀
    GPU顯卡維修避坑指南:<b class='flag-5'>手把手</b><b class='flag-5'>教你</b>識別行業套路!

    KiCad直播活動(三):在 Windows上編譯KiCad 手把手教您編譯/構建 KiCad 源碼

    Developer Ethan 同學,手把手教您編譯/構建 KiCad 源碼: 開發工具安裝 環境變量配置 使用 VS2022 構建 KiCad 參與直播的小伙伴還有機會獲得 KiCon Badge
    的頭像 發表于 03-24 11:14 ?660次閱讀
    KiCad直播活動(三):在 Windows上編譯KiCad <b class='flag-5'>手把手</b>教您編譯/構建 KiCad 源碼

    《零基礎開發AI Agent——手把手教你用扣子做智能體》

    《零基礎開發AI Agent——手把手教你用扣子做智能體》是本為普通人量身打造的AI開發指南。它不僅深入淺出地講解了Agent的概念和發展,還通過詳細的工具介紹和實戰案例,幫助讀者快速掌握
    發表于 03-18 12:03

    手把手教你做星閃無人機—KaihongOS星閃無人機開發實戰》系列課程課件匯總

    為助力開發者迅速掌握『KaihongOS輕量系統開發技術』與『星閃無線通信技術』,實現快速上手與深度體驗,“開鴻Developer社區”攜手“電子發燒友”再次聯合推出《手把手教你做星閃無人機
    發表于 03-18 10:33

    手把手教你做PC-KaihongOS筆記本電腦開發實戰》課件匯總

    ”攜手“電子發燒友”聯合推出了 《KaihongOS手把手系列直播課程》,該系列課程以實際產品為案例,詳細講解每個產品的開發全流程。 此次首發內容是《手把手教你做PC-KaihongOS筆記本電腦開發
    發表于 03-18 10:25

    【第四章 定時任務】手把手教你玩轉新版正點原子云

    【第四章 定時任務】手把手教你玩轉新版正點原子云 承接上篇,除了報警聯動這個功能,原子云還有個特色功能也是各開發者喜歡用的,定時任務功能。 【正點原子】云平臺:原子云(點擊登錄原子云) 前言
    發表于 03-13 10:19

    【第章 透傳策略】手把手教你玩轉新版正點原子云

    【第章 透傳策略】手把手教你玩轉新版正點原子云 1. 本次實驗使用正點原子D40 Mini 4G Cat1 DTU數傳模塊 1.1 D40數傳模塊資料 具體使用和資料下載可到:D40 Mini
    發表于 03-05 16:52

    開發者集結!《手把手教你做星閃無人機》第二課開講啦!

    開發者集結!《手把手教你做星閃無人機》第二課開講啦!
    的頭像 發表于 02-17 19:40 ?282次閱讀
    開發者集結!《<b class='flag-5'>手把手</b><b class='flag-5'>教你</b>做星閃無人機》第二課開講啦!

    手把手教你做星閃無人機》即將開播,鎖定15日晚七點!

    ”再次聯合推出《手把手教你做星閃無人機—KaihongOS星閃無人機開發實戰》系列課程,該課程與《手把手教你做PC—KaihongOS筆記本電腦開發實戰》同步并行,
    的頭像 發表于 01-13 19:42 ?406次閱讀
    《<b class='flag-5'>手把手</b><b class='flag-5'>教你</b>做星閃無人機》即將開播,鎖定15日晚七點!

    手把手教你做PC》課程即將啟動!深開鴻引領探索KaihongOS筆記本電腦開發實戰

    ”攜手“電子發燒友”聯合推出了《KaihongOS手把手系列直播課程》,該系列課程以實際產品為案例,詳細講解每個產品的開發全流程。此次首發內容是《手把手教你做PC-
    的頭像 發表于 01-06 20:46 ?482次閱讀
    《<b class='flag-5'>手把手</b><b class='flag-5'>教你</b>做PC》課程即將啟動!深開鴻引領探索KaihongOS筆記本電腦開發實戰

    Air780E模組LuatOS開發實戰 —— 手把手教你搞定數據打包解包

    本文要說的是低功耗4G模組Air780E的LuatOS開發實戰,我將手把手教你搞定數據打包解包。
    的頭像 發表于 12-03 11:17 ?547次閱讀
    Air780E模組LuatOS開發實戰 —— <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>搞定數據打包解包

    手把手教你通過宏集物聯網工控屏&amp;網關進行協議轉換,將底層PLC/傳感器的數據轉換為TCP協議并傳輸到用戶

    手把手教你通過宏集物聯網工控屏&網關進行協議轉換,將底層PLC/傳感器的數據轉換為TCP協議并傳輸到用戶終端
    的頭像 發表于 08-15 13:29 ?959次閱讀
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>通過宏集物聯網工控屏&amp;網關進行協議轉換,將底層PLC/傳感器的數據轉換為TCP協議并傳輸到用戶

    手把手教你在orcad設置CIS元器件數據庫,提高工作效率

    元器件數據庫,就是實現上述查找元件、放置元件時所需要調用的數據庫。本文將手把手教你如何在orcad配置CIS元器件數據庫。
    的頭像 發表于 06-15 17:27 ?1.2w次閱讀
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>在orcad<b class='flag-5'>中</b>設置CIS元器件數據庫,提高工作效率