No description. Add one?
  • Java 78%
  • Kotlin 11.8%
  • AIDL 4.4%
  • C++ 3.7%
  • C 1.5%
  • Other 0.5%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Maciej Żenczykowski 6bd25b5fd4 BpfNetworkStats: introduce poor man's ifindex2name() cache
Uses 16KiB ram, only caches ifindex < 1024, but in practice
that should usually be the case, as these are assigned
in sequential order by the kernel.

Note that in progs/netd.c:86 we have:
  DEFINE_BPF_MAP_NO_NETD(iface_index_name_map, HASH, uint32_t, IfaceValue, 1000)
so stuff doesn't really work right once we go past 1000-ish
tracked interfaces...

(and worst case we're no worse off then we are now...)

Benefit should be significant as all our bpf map stats
dumping logic has to convert from ifindex to ifname
in order to strcmp against the interface we're trying to match,
ie. that's the first thing 3 of the 4 cases we support
do at the very top of their innermost loop.

This effectively eliminates 1 bpf() lookup systemcall, thus
getting us down to 2 (getNextKey + readValue/readValueAndDelete)

Note: the tests work because they're consistent in how they
map ifindex/ifname so they do not require cache clearing.

I believe we don't have to worry about threading, as
we're being called while traversing/consuming maps.
Thus I believe there must be locking external to us.

Also writes should be *super* uncommon, so even if this
were to run multithreaded, races should happen very rarely.
If they did, we'd just write in the same value twice (since
the mapping from ifindex->ifname should rarely if ever change)

Worst case once in a blue moon we'd fail to match an interface
that had *just* shown up (because of reading only half the name),
and we'd lose some stats...

(and since the entire value fits in 16 bytes, and thus in a single
cache line, in practice most cpus will probably write combine
and thus avoid a half write/read anyway, both x86-64 and aarch64
can potentially even do a 16-byte read/write in 1 instruction...
although unclear if that will happen, but worst case should be 2)

Test: TreeHugger, atest libnetworkstats_test
Flag: EXEMPT mainline
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I0d3ea6c5f1f2945adccd479af6c65008bf7d7c51
2025-08-12 20:39:20 -07:00
bpf BpfNetworkStats: introduce poor man's ifindex2name() cache 2025-08-12 20:39:20 -07:00
clatd clatd: remove DEVICEPREFIX single use define 2025-08-05 12:15:16 -07:00
common replace CookieTagMapKey with S64 2025-08-07 15:52:35 -07:00
framework Include NET_CAPABILITY_NOT_VCN_MANAGED for tethering local network agent 2025-08-06 11:24:33 +08:00
framework-t Merge changes I12e4d492,I4c787e9c,I52a36ebb into main 2025-07-23 14:16:42 -07:00
nearby Revert "Introduce BLE advertiser wrapper for unit tests." 2025-07-31 14:49:58 -07:00
networksecurity Propagate system broadcast after log list install 2025-07-24 11:14:28 +00:00
remoteauth [owners] Remove derekjedral@google.com from remoteauth/OWNERS 2025-05-25 09:49:50 -07:00
service replace CookieTagMapKey with S64 2025-08-07 15:52:35 -07:00
service-b Conditionally include VCN in Tethering module 2024-12-09 12:04:12 -08:00
service-t BpfNetworkStats: introduce poor man's ifindex2name() cache 2025-08-12 20:39:20 -07:00
staticlibs Optimize BpfMap JNI calls with FastNative/CriticalNative annotations 2025-08-12 15:28:05 -07:00
tests Merge "Add CDD annotation to APFv6 multi-device tests" into main 2025-08-10 18:40:25 -07:00
Tethering replace CookieTagMapKey with S64 2025-08-07 15:52:35 -07:00
thread Move #nativeWaitForService into CommonConnectivityJni 2025-08-06 10:44:39 -07:00
tools Add a tool to generate hidden module API lists 2025-04-24 09:05:08 +09:00
.clang-format Add .clang-format 2025-03-23 19:59:10 -07:00
.gitignore Ignores vim temporary files from git 2023-12-23 17:45:32 +08:00
OWNERS Move the owner of xfrm netlink source code to its own directory. 2023-11-22 18:50:00 +09:00
OWNERS_core_networking OWNERS: satk -> larsberg 2025-08-04 11:26:01 -07:00
OWNERS_core_networking_xts OWNERS: satk -> larsberg 2025-08-04 11:26:02 -07:00
PREUPLOAD.cfg Add alint hook to Connectivity repo 2025-05-30 11:36:49 +00:00
preupload_hook_script.py Refactor: apply pyformat for coding style consistency 2025-05-28 12:44:57 +00:00
rustfmt.toml Add rustfmt to p/m/C 2025-03-28 10:06:13 -07:00
TEST_MAPPING Add Wear TEST_MAPPING for Connectivity module 2025-07-15 23:05:13 -07:00