Application: fMRI - functional Magnetic Resonance Imaging of the brain.
I wrote few device drivers for AD converter cards (HP, SGI and Linux).
Because experimental medical data are unique and not repeatable - not
a single image can be lost. Time-course functions are unique too.
For this reason I used vmalloc() in kernel module to create unswappable
memory that was later mmap'ed to a user space.
It worked like a champ on Linux 2.2.12 and users were stretching this
memory above 512 MBs. Ya, 3-D images are huge and a series could contain
more than thousand of such images.
On Linux 2.4.18 I found a problem, a limit of ~90 MBs. There is nothing
about the limit in a Rubini book (Linux Device Driver 2d edition).
I found that the limit is in asm-i386/page.h file in the form:
#define __VMALLOC_RESERVE (128 << 20)
Tried to increase it and, with 2GB of physical memory, the max working is:
#define __VMALLOC_RESERVE (512 << 20)
The 1024 and up fails the kernel at the boot time. Not funny :-)_____//
In the kernel 2.2.12 I had no problem with large allocations.
What's going on?
Is Bill Gates "developing" a kernel for a Linux community?
For me this limitation is a step backward. I want to use USB, 1394, etc.
on new machines. Should I use old kernel for data acquisition and loose this
Appetites for long data, ~1GB per session, are growing. These machines are
dedicated to MRI scanning and are not for a net browsing. Frequently, during
a fast acquisition, other activities are slowed down including a system time
clock. No mercy. Imagine that unfiltered data are even 8 time bigger.
I have to filter them in real time straight from a DMA buffer (yea,
bigphysarea) using floating point operations within an interrupt routine!
YES, it is possible. It it much easier on Intel processors than on SGI, for
example, with few tweaks in an assembler. Yes: C o m p u t e r s are U S !
Any advice are welcome before I become an expert on virtual memory :-).
It is not my main task so I don't intend to hack.
The kernel 2.2.12 was compiled with CONFIG_2GB=y, the 2.4.18 with
CONFIG_HIGHMEM4G=y. Both SMPs. I browsed the net intensively and found
nothing useful on a new strategy on vmalloc() and friends. I heard that
there is a big over-hole of the mm, but have no details.
Any outline of a new strategy on memory assignment is welcome. I have
mm.pdf doc file, but VMALLOC_RESERVE is there barely mentioned.
Remove 'removespam.' from the address,