我試圖使用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
分配?有沒有另一種方式來分配大量的內存到內核模塊?
從理論上講,限制應該是32TB或物理可用的RAM,無論先到先得;)在嘗試分配內存時,你是否收到內核發來的消息? – Ctx
向我們展示你使用'vmalloc()'的方式。 – syntagma
在內核模塊中分配2GiB RAM聽起來像是一個非常糟糕的主意。看起來像一個XY問題。 – Olaf