当前位置: 首页 > news >正文

index - liyan

+++
title = "BPF LRU_HASH_MAP 及 HASH_MAP 的使用异常"
author = "李岩"
date = 2024-03-12T11:02:00+08:00

[taxonomies]
tags = ["bpf", "bugs"]
categories = ["BPF"]
+++

BPF 技术看起来还有很多不易察觉的缺陷。最近又踩了一个坑。记录下。

LRU_HASH_MAP 在实现的时候,出现了不符合预期的数据驱逐问题:设定一个 512 大小的LRU_HASH_MAP,很可能出现在40-50个key的时候,之前的key就被覆盖。在一段时间未更新时,重新更新也可能会出现异常。总结就是,执行了写入操作,很可能没有写入。这个问题在Elements incorrectly evicted from eBPF LRU hash map有较为详细的描述。

但是,笔者之所以使用LRU_HASH_MAP主要是期望保持整个程序的鲁棒性:期望可以一直写入key而不需对bpf map的状态进行维护。如果使用固定大小的HASH_MAP,当写入的key超过map的预设大小时,测试的demo会出现崩溃的现象。由于LRU_HASH_MAP的功能出现了不符合预期的情况,显然也就需要使用HASH_MAP来替代了。
笔者遇到的需要使用LRU_HASH_MAP的场景有两种:1. 作为配置项。用户态的代码向BPF MAP里写入配置,而后在BPF里使用。2. 作为数据中转。比如涉及多个hook点配合时,就需要使用BPF MAP来存储一些中间数据。对于场景1,可以直接使用HASH_MAP来替代,用户态添加一些检查的措施,定期批量对MAP进行数据清理以及数据写入即可。但是对于场景2,可能会麻烦很多:数据是随时产出的,用户态没有办法控制其产出的频率、周期。目前能想到的是设置一个较大的MAP(这个异常的触发是否和MAP的大小有关?),仍然使用LRU_HASH_MAP;或者设置一个较大的HASH_MAP,然后定时在用户态进行数据的清理。
以上。

http://www.jsqmd.com/news/415346/

相关文章:

  • 搭建OpenClaw实现钉钉 AI 员工自动化 (一)
  • _index - liyan
  • QOJ10518 腐蚀与膨胀
  • archive - liyan
  • .NET 本地Db数据库-技术方案选型
  • BPF LRU_HASH_MAP 及 HASH_MAP 的使用异常 - liyan
  • 2026.2.26
  • 我把AI接到了微信
  • 轮廓线DP
  • 2026年2月冷库安装品牌推荐,标准化安装流程与完善售后 - 品牌鉴赏师
  • Hive执行引擎比较:选择最适合的方案
  • 我是如何让AI每天自动学CSDN的
  • .NET 本地Db数据库选型
  • 2026年2月PVC卷帘门供应厂家推荐,环保洁净优质厂家推荐 - 品牌鉴赏师
  • AI居然能记住我之前说过的话
  • C++游戏开发之旅 17
  • Copyparty + cpolar,随时随地访问你的私人文件库
  • AI能帮我跑代码了直接执行命令行
  • 2026年IM厂商怎么选?4家主流即时通讯厂商能力对比与选型参考
  • AI助手有了自己的浏览器自己就能上网冲浪
  • Go语言高并发采集:Goroutine配合隧道代理的极致性能体验
  • 全球主要指数估值对比分析:数据驱动的投资决策指南
  • AI助手的核心Gateway一篇就看懂
  • 2026年2月常州正规月嫂公司推荐榜,正规资质与完善服务体系推荐 - 品牌鉴赏师
  • AI助手功能不够用来试试插件扩展
  • 2026年2月天然苏打水厂家精选:适合日常饮用的健康好水 - 品牌鉴赏师
  • 2026最新最全国内大厂Java面试高频题库
  • 我常用的一些命令
  • 为什么 90% 的 AI 开发项目都死在了“提示词工程”的幻觉里?
  • AI助手怎么连上各种模型密钥配置大全