Linux kernel 我应该在Linux驱动程序中缓冲多少传出数据?

Linux kernel 我应该在Linux驱动程序中缓冲多少传出数据?,linux-kernel,linux-device-driver,Linux Kernel,Linux Device Driver,我正在为自定义点对点通信设备(想想超级串行端口)创建一个驱动程序,我想知道应该如何处理传出数据。具体来说,我应该允许缓冲多少数据 目前,我将传入write()的缓冲区大小限制为系统上最大16kb或4页。我可以想象标准数据会比这少得多。我的写函数kmalloc()为缓冲区提供了足够的内存,并将其复制到内核空间。使用内置的链表,我为DMA事务将数据排队。我使用dma_map_single()API映射它。设备本身没有大的缓冲区,因此它直接从DMA的缓冲区传输数据。然后,当传输完成时,它会引发一个中断

我正在为自定义点对点通信设备(想想超级串行端口)创建一个驱动程序,我想知道应该如何处理传出数据。具体来说,我应该允许缓冲多少数据

目前,我将传入write()的缓冲区大小限制为系统上最大16kb或4页。我可以想象标准数据会比这少得多。我的写函数kmalloc()为缓冲区提供了足够的内存,并将其复制到内核空间。使用内置的链表,我为DMA事务将数据排队。我使用dma_map_single()API映射它。设备本身没有大的缓冲区,因此它直接从DMA的缓冲区传输数据。然后,当传输完成时,它会引发一个中断,我在这里取消映射并释放它

那么回到我的问题,考虑到每次用户执行写操作时我都在使用kmalloc(),我应该限制放入队列的缓冲区数量吗?还是我刚才描述的策略中存在固有缺陷


编辑以回答有关数据源的评论:不幸的是,我没有编写最终用户软件,因此我对原始数据源一无所知。我可以说,输出数据速率没有那么快(最大256kbps),而且这个嵌入式系统的内存非常紧张。

IMHO如果不进一步了解设备及其使用方法,就无法回答这个问题,实际上,这是最大的问题:让它干运行,阻止客户端程序写入,或者允许不断增长的缓冲区不断增加的延迟将程序与实际传输时间分离?需要知道链中的所有数据接收器/源以及它们的输入和输出所需速率。然后您可以分析您的缓冲需求是什么。正如Chris Stratton所说:回答这个问题需要更多的信息。听起来你需要研究你正在研究的东西的预期使用模式。否则,你可能会设计一些合适的东西,但并不特别适合人们最终尝试使用它的方式。克里斯,我很乐意,但不幸的是,目前这不是一个真正的选择。然而,我从这次对话中得到的是,我所使用的方法,尽管它可能对用例来说是理想的,也可能不是理想的,但在某些方面并没有固有的缺陷。