Hi all, I've got a Xenomai-based program that consists of a Xenomai real-time thread, plus a number of non-realtime/regular Linux threads.
As the program runs, the regular Linux threads allocate and deallocate a fairly large number of 128kB buffers at various times, as well as doing various smaller allocations and deallocations of various sizes. Pointers to these buffers are passed to the Xenomai real-time thread when appropriate, so that it can read data from the buffers as necessary. (Steps are taken, of course, to make sure that the real-time thread stops reading from a buffer before it gets deallocated by a non-real-time thread). This all works well, but there is one minor issue where I'd like to improve things: after running for a while, the allocation and deallocation of 128kB buffers, interspersed with smaller allocations/deallocations, causes fragmentation in the process's heap, with the end result that the process appears to be using a lot more memory than it actually has allocated. This doesn't cause real problems (AFAICT), but because the GUI for the system has a RAM Usage Indicator (that gets its info from /proc/meminfo, and displays total memory-usage as a percentage of physical RAM), users are prone to wonder why so much RAM is being used even when the program is idle. The heap fragmentation makes it look like there is a memory leak, even when there technically isn't. So my question is, is there some Xenomai-friendly way for me to allocate, say, 2GB of virtual address space, and manually control (from a non-realtime thread) when and how the underlying physical memory gets paged in and out of RAM? That way I could do that at startup, and then allocate physical 128kB buffers as needed from that dedicated address space, without worrying about fragmentation caused by mixing the 128kB allocations with smaller ones in a single heap. Note that I don't want to actually allocate 2GB of physical RAM at startup, since that would defeat the purpose of minimizing the program's RAM footprint (User: "why is it using 2GB already? I haven't even done anything yet!"). So it seems like the required mlockall(MCL_CURRENT | MCL_FUTURE) command might cause me some headaches here. I apologize if this is a newbiew/obvious question... any advice, or pointers to the web page(s) I should have read before posting will be welcomed. :^) Jeremy _______________________________________________ Xenomai-help mailing list [email protected] https://mail.gna.org/listinfo/xenomai-help
