天天看點

Android TrafficStats之setThreadStatsTag()

一. stats檔案 抓取/proc/net/xt_qtaguid/stats檔案: idx iface acct_tag_hex uid_tag_int cnt_set rx_bytes rx_packets tx_bytes tx_packets rx_tcp_bytes rx_tcp_packets rx_udp_bytes rx_udp_packets rx_other_bytes rx_other_packets tx_tcp_bytes tx_tcp_packets tx_udp_bytes tx_udp_packets tx_other_bytes tx_other_packets 2 wlan0 0x0 0 0 73557 400 1515 22 0 0 72801 378 756 22 364 7 213 3 938 12 3 wlan0 0x0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 wlan0 0x0 1000 0 2551 18 2361 18 663 11 1888 7 0 0 957 13 1404 5 0 0 5 wlan0 0x0 1000 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 wlan0 0x0 10046 0 0 0 60 1 0 0 0 0 0 0 60 1 0 0 0 0 7 wlan0 0x0 10046 1 0 0 1140 19 0 0 0 0 0 0 1140 19 0 0 0 0 8 p2p0 0x0 0 0 0 0 216 3 0 0 0 0 0 0 0 0 0 0 216 3 9 p2p0 0x0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 lo 0x0 0 0 965652 963 18720 330 961572 915 1704 24 2376 24 14640 282 1704 24 2376 24 11 lo 0x0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 lo 0x0 10046 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 lo 0x0 10046 1 2324364 4369 3271296 5002 2324364 4369 0 0 0 0 3271296 5002 0 0 0 0 14 lo 0x4200000000 10046 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 lo 0x4200000000 10046 1 120016 2308 3164120 2942 120016 2308 0 0 0 0 3164120 2942 0 0 0 0 16 lo 0x4300000000 10046 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 lo 0x4300000000 10046 1 2201600 2048 106392 2046 2201600 2048 0 0 0 0 106392 2046 0 0 0 0 iface指端口,acct_tag_hex是指TrafficStats為統計特别socket而下設的tag。上面資料的最後四項中的0x42,0x43就是我們設下去的tag。 uid_tag_int是指app的UID,例如最後的10046,就表示這應用的uid。 cnt_set指前背景。

二. 對socket設定tag 為了統計線程中某個socket的資料流量,可以通過下面的方法進行: TrafficStats.setThreadStatsTag(int tag); TrafficStats .tagSocket(sockt outputSocket); // Transfer data using socket TrafficStats.untagSocket(socket outputSocket);

setThreadStatsTag()後面要使用tagSocket(),否則是無效的。

三. 調用流程 SetThreadStatsTag()和tagSocket()的調用流程如下:

Android TrafficStats之setThreadStatsTag()

需要注意的是setThreadStatsTag()最終隻是設定了tag到NetworkManagementSocketTagger裡,需要調用tagSocket()把socket設定下去,最終觸發tag,把socket和tag設定到kernel裡。 最終調用到kernel xt_qtaguid.c的ctrl_cmd_tag()裡,這裡的指令是“t”。 同時有指令“u”,untag。“s”,counter_set。“d”,delete。

四. 總結 在xt_qtaguid裡還有對/proc/net/xt_qtaguid/iface_stat_all,iface_stat_fmt檔案的操作。iface_stat_all僅簡單包含所有的資料流量統計。iface_stat_fmt是按照一定格式整理的。