我有一个每秒发送8000个音频数据包的应用程序。现在最初用于实验目的,我正准备一个8个音频数据包的缓冲区,然后进行IOCTL调用并将缓冲区传递给我的驱动程序。
我正在使用“USB分析仪”。从USB分析仪我得到的数据包间隙(IPG)约为20-40 usec。那样就好。但有时IPG显示200-300usec。 USB子系统(USB核心/ HCD)是扮演ioctl的角色还是实现?每秒进行> 1000次ioctl调用和“copy_from_user”可能是延迟提交数据包的罪魁祸首。而且我使用USB3.0,它能够支持5 GBps的数据速率。
我的驱动程序中的代码流如下:
开关(CMD) {
case SEND_AUDIO:
copy_from_user(...,....,...);
for(i=0; i<8; i++);
usb_bulk_msg();
break;
}