我有两个想法来处理数据包。
1.我将内存池和mmap分配到用户空间,当数据包到来时,我将数据包复制到内存池中,然后,用户空间可以访问它。
2.当数据包到来时,我每次都会将数据包映射到用户空间,然后用户空间就可以访问该数据包。
哪一个更好,为什么?
答案 0 :(得分:1)
取决于接收应用程序线程处理能力。怎么样?
假设您有一个接收线程足够快地轮询您的mmapped
描述符环,从而使数据包从缓冲区中出列,从而允许接口上的数据包以相同的速度排列。在这种情况下,绝对选项1是最好的。
当涉及到选项2时,我觉得每个数据包mmap
会调用一个系统调用,我认为这会影响性能,而选项1则是您在用户空间中立即创建缓冲池,只调用一个{{1}限制一个系统调用。