首先,我将告诉我的个人电脑环境,我的问题的背景,我的问题,比我将解释我的确切问题。
环境:
操作系统: Ubuntu 16.04
内核: 4.17.1
CPU: i7-6700 k
内存: 8GB DRAM
存储空间: SSD 120 SSD
背景:
我正在尝试为我的特定应用程序优化linux内核。以下是此应用程序的抽象逻辑。
我的问题:
我希望通过内核模块异步执行这些副本,使用尽可能少的CPU周期。因此,我试图实现一个内核模块,该模块将预定义的数据复制到内核中异步释放页面帧,并管理具有预定义数据的池页帧。当我的特定应用程序请求一个页面框架时,我的内核将从这个池中提供一个页面框架。
为了异步复制数据,我首先考虑了DMA,但是CPU的英特尔idma64不能异步地将数据内存复制到内存中。现在,我试图将这些数据从二级存储(SSD)复制到内存中。我发现linux中有一个名为libaio的异步IO库。
我的问题:
发布于 2018-06-25 18:02:24
我不认为您需要编写内核模块。使用文件内存映射集合的CPU固定线程的用户空间线程池将尽可能高效地实现。只需小心"TLB射击“,即避免修改进程的地址空间,并尽可能多地抛出虚拟地址空间以避免这一问题。也许有一点暗示内核,什么写的页面永远不会再通过madvise()使用,而且您应该是最优的--足够多的多线程将最大限度地提高SSD的队列深度,您希望将目标对准QD8到QD16,并且应该很容易地使NVMe链接饱和,同时将CPU使用率保持在100%以下。
如果您有许多NVMe链接的SSD,您可能需要考虑用更可伸缩的存储i/o来代替Linux,但是这里存在吞吐量和可伸缩性的权衡。如果正确地划分工作,Windows和FreeBSD将在许多设备上进行更好的扩展,但是Linux在一些设备上会做得更好。祝好运!
https://stackoverflow.com/questions/51009873
复制相似问题