相关疑难解决方法(0)

kmalloc的内存很慢

我们有一个应用程序,需要大约1MB缓冲区才能填充硬件设备,因此我们编写了一个使用kmalloc()分配缓冲区的内核模块.我们没有使用dma_alloc_coherent(),因为我们需要操纵缓冲区,因此希望它们被缓存(我们在需要时刷新缓存).其中一个操作是内核模块将一个缓冲区复制到另一个缓冲区.在计时这些副本时,我们看到复制缓冲区需要大约2ms.该时间不包括任何缓存刷新.

由于这似乎很慢,我们编写了一个标准的用户空间测试应用程序,它使用malloc()创建1MB缓冲区并复制它们.用户空间副本大约需要0.5毫秒,这大约是在我们正在使用的处理器/内存配置上移动此内存量的正确时间.

认为我们尝试过:为了确保它在内核空间和用户空间中不是一个不同的memcpy(),我们编写了自己的NEON优化副本,但没有任何区别.将缓冲区大小从100KB更改为10MB并没有任何区别.所有时间都超过10份,但始终非常一致.时间例程在用户空间中使用gettimeofday().

我们唯一可以想到的是,对于kmalloc()'ed memory然后malloc()'ed memory,数据缓存设置不同?

我们正在研究iMX6 ARM,Linaro kerne.

arm linux-kernel

5
推荐指数
1
解决办法
895
查看次数

如何创建100M字节缓冲区

我正在测试Linux上接口的吞吐量.我正在使用DMA todo进行数据传输.DMA需要连续的内存位置.但是kmalloc无法分配超过1MB.有没有其他方法可以创建高达100M字节的大缓冲区位置?

linux-kernel

4
推荐指数
1
解决办法
3144
查看次数

在内核中高效分配内存

我想编写一个内核模块,在那里我获得接近 8 mbps 的 TCP/IP 数据包。我必须将这些数据包存储 500 毫秒的持续时间。稍后这些数据包应按顺序转发。这些应该为 30 名成员完成。什么应该是最好的实施方法?我应该使用kmalloc一次(kmalloc(64000000, GFP_ATOMIC)吗?因为每次如果我这样做kmallockfree都需要时间,从而导致性能问题。另外,如果我一次性在内核中分配内存,Linux 内核会允许我这样做吗?

c linux-kernel

4
推荐指数
1
解决办法
2153
查看次数

您编写内核模块的目的是什么?

更多的是概述问题而不是技术问题。我可以看到周围的 Linux 内核开发人员职位,我想知道您希望成为什么内核模块?与使用系统调用和执行其他操作相比,哪些类型的任务最适合作为内核模块完成?

less /proc/modules在我的系统上显示 dm_log,设备映射器的记录器。为什么日志记录是从内核完成的,而不是在用户空间完成的?

linux kernel-module linux-kernel

4
推荐指数
1
解决办法
1382
查看次数

kzalloc() - 一次调用的最大大小?

我们可以在一次调用中使用 kzalloc() 分配的最大大小是多少?

这是一个非常常见的问题。另外请让我知道我是否可以验证该值。

kernel memory-management linux-kernel

2
推荐指数
1
解决办法
8288
查看次数

标签 统计

linux-kernel ×5

arm ×1

c ×1

kernel ×1

kernel-module ×1

linux ×1

memory-management ×1