在mips单板上用vpp调试netmap收发包,内核和用户态内存不能及时同步。
发包的时候,内核写入的包长要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.不知道为什么用户态到内核态更新需要这么长时间,有什么办法能够立即更新,让内核获取到用户态写入的正确的值吗?
谢谢!!