linux给模块分配专用内存,使用vmalloc为内核模块分配大量内存

在64位Linux系统上,一个内核模块尝试使用vmalloc()分配超过2GB内存失败。代码示例显示了如何通过模块参数设置驱动大小。尽管理论上vmalloc可以分配至32TB,但在实践中遇到限制。讨论了可能存在的内核消息和替代分配策略。
摘要由CSDN通过智能技术生成

我试图使用vmalloc()为内核模块分配大内存。 我无法在具有64GB RAM的64位Linux(3.10.0-514.2.2.el7.x86_64)上分配超过2GB的内存。使用vmalloc为内核模块分配大量内存

这些都是相关的部分代码:

...

static int logical_block_size = 512;

module_param(logical_block_size, int, 0);

static int nsectors = 1024; /* How big the drive is */

module_param(nsectors, int, 0);

...

/*

* The internal representation of our device.

*/

static struct sbd_device {

unsigned long size;

spinlock_t lock;

u8 *data;

struct gendisk *gd;

} Device;

...

static int __init sbd_init(void) {

/*

* Set up our internal device.

*/

Device.size = nsectors * logical_block_size;

spin_lock_init(&Device.lock);

Device.data = vmalloc(Device.size);

...

是否有限制的内存的大小,可以通过vmalloc分配?有没有另一种方式来分配大量的内存到内核模块?

2017-05-30

curious

+0

从理论上讲,限制应该是32TB或物理可用的RAM,无论先到先得;)在尝试分配内存时,你是否收到内核发来的消息? –

+0

向我们展示你使用'vmalloc()'的方式。 –

+2

在内核模块中分配2GiB RAM听起来像是一个非常糟糕的主意。看起来像一个XY问题。 –

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值