91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

3天內(nèi)不再提示

一文手把手教你Android中的 eBPF 流量監(jiān)控

如意 ? 來源:CSDN ? 作者:Peter盼 ? 2020-06-20 10:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

示例和來源

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

實現(xiàn)

Android 9 開始,內(nèi)核版本為 4.9 或更高且最初搭載了 Android P 版本的 Android 設(shè)備必須使用基于 eBPF 的網(wǎng)絡(luò)流量監(jiān)控記帳模塊,而不是 xt_qtaguid。新的基礎(chǔ)架構(gòu)更靈活且更易于維護,并且不需要任何外部內(nèi)核代碼。

舊版流量監(jiān)控和 eBPF 流量監(jiān)控之間的主要設(shè)計差異如圖 1 所示。

一文手把手教你Android中的 eBPF 流量監(jiān)控

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

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

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

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

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

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

要求

內(nèi)核配置必須開啟以下配置:

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

CONFIG_CGROUP_BPF=y

CONFIG_BPF=y

CONFIG_BPF_SYSCALL=y

CONFIG_NETFILTER_XT_MATCH_BPF=y

CONFIG_INET_UDP_DIAG=y

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

舊版 xt_qtaguid 棄用過程

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

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

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

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

驗證

您應(yīng)該定期從 Android 通用內(nèi)核和 Android AOSP 主分支獲取補丁程序。請確保您的實現(xiàn)通過適用的 VTS 和 CTS 測試,即 netd_unit_test 和 libbpf_test。

測試

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

CTS 和 CTS 驗證程序

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

手動測試

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

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

    關(guān)注

    12

    文章

    4026

    瀏覽量

    133998
  • 流量監(jiān)控
    +關(guān)注

    關(guān)注

    0

    文章

    19

    瀏覽量

    7550
  • BPF
    BPF
    +關(guān)注

    關(guān)注

    0

    文章

    26

    瀏覽量

    4709
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    手把手教你學51單片機-C語言版

    更多信息),手把手地帶領(lǐng)大家來學習單片機技術(shù),給單片機初學者帶來福音,讓大家一步一個腳印的掌握單片機技術(shù)。 《手把手教你學51單片機-C語言版》(第3版)這本書除了講解簡單的實驗和編
    發(fā)表于 03-05 11:47

    從0到1,10+年資深LabVIEW專家,手把手教你攻克機器視覺+深度學習(5000分鐘實戰(zhàn)課)

    “告別檢測系統(tǒng)能力缺陷!10+年LabVIEW視覺資深專家手把手教你:5000+分鐘高清教程(含工具、算法原理、實戰(zhàn)操作、項目優(yōu)化全流程講解)”——從傳統(tǒng)視覺算法→深度學習建?!I(yè)級部署"
    的頭像 發(fā)表于 12-02 08:07 ?525次閱讀
    從0到1,10+年資深LabVIEW專家,<b class='flag-5'>手把手</b><b class='flag-5'>教你</b>攻克機器視覺+深度學習(5000分鐘實戰(zhàn)課)

    迅為Hi3403開發(fā)板極速啟航 | 手把手帶你玩轉(zhuǎn)核心例程,輕松上手AI視覺!

    迅為Hi3403開發(fā)板極速啟航 | 手把手帶你玩轉(zhuǎn)核心例程,輕松上手AI視覺!
    的頭像 發(fā)表于 11-19 13:56 ?1722次閱讀
    迅為Hi3403開發(fā)板極速啟航 | <b class='flag-5'>手把手</b>帶你玩轉(zhuǎn)核心例程,輕松上手AI視覺!

    【迅為RK3568開發(fā)板NPU實戰(zhàn)】別再閑置你的NPU!手把手教你玩轉(zhuǎn)RKNN-Toolkit2 的使用

    【迅為RK3568開發(fā)板NPU實戰(zhàn)】別再閑置你的NPU!手把手教你玩轉(zhuǎn)RKNN-Toolkit2 的使用
    的頭像 發(fā)表于 11-11 14:21 ?1128次閱讀
    【迅為RK3568開發(fā)板NPU實戰(zhàn)】別再閑置你的NPU!<b class='flag-5'>手把手</b><b class='flag-5'>教你</b>玩轉(zhuǎn)RKNN-Toolkit2 的使用

    【RK3568 NPU實戰(zhàn)】別再閑置你的NPU!手把手帶你用迅為資料跑通Android AI檢測Demo,附完整流程與效果

    【RK3568 NPU實戰(zhàn)】別再閑置你的NPU!手把手帶你用迅為資料跑通Android AI檢測Demo,附完整流程與效果
    的頭像 發(fā)表于 11-10 15:58 ?1066次閱讀
    【RK3568 NPU實戰(zhàn)】別再閑置你的NPU!<b class='flag-5'>手把手</b>帶你用迅為資料跑通<b class='flag-5'>Android</b> AI檢測Demo,附完整流程與效果

    手把手教你AT指令A(yù)PN設(shè)置:專網(wǎng)連接零門檻!

    無論你的技術(shù)背景如何,本教程都將以手把手的方式,拆解AT指令A(yù)PN設(shè)置的全流程。專網(wǎng)連接不再是門檻,即刻開啟自主配置之旅! APN是設(shè)備連接到運營商網(wǎng)絡(luò)的“身份證” ——當設(shè)備插入SIM卡并注冊到
    的頭像 發(fā)表于 09-04 14:40 ?1128次閱讀
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>AT指令A(yù)PN設(shè)置:專網(wǎng)連接零門檻!

    RT-Thread Nano硬核移植指南:手把手實現(xiàn)VGLite圖形驅(qū)動適配 | 技術(shù)集結(jié)

    VGLite是NXP提供的輕量級2D圖形API,本文將手把手帶你實現(xiàn)VGLite圖形驅(qū)動適配RT-Thread。文章分為上、下兩篇,將手把手教您移植。上篇對RT-ThreadNano內(nèi)核與Finsh組件進行移植,下篇則教您改寫SDK
    的頭像 發(fā)表于 07-17 14:40 ?3391次閱讀
    RT-Thread Nano硬核移植指南:<b class='flag-5'>手把手</b>實現(xiàn)VGLite圖形驅(qū)動適配 | 技術(shù)集結(jié)

    【精選直播】手把手教你做PC第十二課:WIFI 驅(qū)動框架適配

    手把手教你做PC》系列直播課再度開播!《KaihongOS筆記本電腦開發(fā)實戰(zhàn)第十二課:WIFI驅(qū)動框架適配》將于07月02日19:00開播↑掃碼入群,領(lǐng)課程講義資料包↑深開鴻資深工程師親臨直播間
    的頭像 發(fā)表于 07-01 08:08 ?566次閱讀
    【精選直播】<b class='flag-5'>手把手</b><b class='flag-5'>教你</b>做PC第十二課:WIFI 驅(qū)動框架適配

    手把手教你如何調(diào)優(yōu)Linux網(wǎng)絡(luò)參數(shù)

    在高并發(fā)網(wǎng)絡(luò)服務(wù)場景,Linux內(nèi)核的默認網(wǎng)絡(luò)參數(shù)往往無法滿足需求,導致性能瓶頸、連接超時甚至服務(wù)崩潰。本文基于真實案例分析,從參數(shù)解讀、問題診斷到優(yōu)化實踐,手把手教你如何調(diào)優(yōu)Linux網(wǎng)絡(luò)參數(shù),支撐百萬級并發(fā)連接。
    的頭像 發(fā)表于 05-29 09:21 ?968次閱讀

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

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

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

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

    《零基礎(chǔ)開發(fā)AI Agent——手把手教你用扣子做智能體》

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

    手把手教你做星閃無人機—KaihongOS星閃無人機開發(fā)實戰(zhàn)》系列課程課件匯總

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

    手把手教你做PC-KaihongOS筆記本電腦開發(fā)實戰(zhàn)》課件匯總

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

    【第四章 定時任務(wù)】手把手教你玩轉(zhuǎn)新版正點原子云

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