在mips单板上用vpp调试netmap收发包,内核和用户态内存不能及时同步。

minz322 2017-09-14 04:05:19
发包的时候,内核写入的包长要3秒才能同步到内核,包内容也存在不能及时同步的情况。

具体过程如下:
1.vpp创建netmap用户态进程。用mmap映射一块地址空间。
2.发包之前,会将包内容和包长len写入映射的地址,然后调用ioctl让内核继续发包。
3.但是内核经常会读不到正确的len。
4.如果在调ioctl前延时3秒,则内核每次可以读到正确的len,如果延时1秒,则有一定概率读不到。
5.在ioctl前调msync,MS_SYNC同步模式强制刷新,vpp执行失败,报参数错误。用MS_ASYNC异步模式,能执行成功,但是并不能马上刷新。内核还是没有更新。
6.甚至有的时候,用户态在ioctl前后,len的值都是修改过的值,但是中间执行ioctl内核部分,len的值还是默认的旧值。
7.不知道为什么用户态到内核态更新需要这么长时间,有什么办法能够立即更新,让内核获取到用户态写入的正确的值吗?

谢谢!!
...全文
501 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
minz322 2017-09-14
  • 打赏
  • 举报
回复
相关变量加volatile关键字,也用过了。无效

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧