我试图使用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问题。 –