找回密码
 骑士注册

QQ登录

微博登录

搜索
❏ 站外平台:

查看: 1025|回复: 0
收起左侧

[求助] [linux][vpp]采用mmap映射,内核和用户态内存不能及时同步问题

[复制链接]
minz322 发表于 2017-09-14 15:49:46 | 显示全部楼层 |阅读模式
在mips单板上用vpp调试netmap收发包,采用mmap映射,内核和用户态内存不能及时同步。
发包的时候,内核写入的包长要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.不知道为什么用户态到内核态更新需要这么长时间,有什么办法能够立即更新,让内核获取到用户态写入的正确的值吗?

您需要登录后才可以回帖 登录

本版积分规则

快速回复 返回顶部 返回列表

分享到微信

打开微信,点击顶部的“╋”,
使用“扫一扫”将网页分享至微信。