I use a kernel that supports POPSHM pages and I have initialized the number of

pages at each kernel to be 4. So the output of 'cat /proc/meminfo | grep POPSHM'

is (core 0):

POPSHM pages: 4

POPSHM page size: 16384 kB

POPSHM buffer size: 65536 kB

POPSHM base address: 0x00000000

If I understand correct in this case the kernel has allocated 4*16MB=64MB contiguous

physical memory in 4 LUT entries. Which are those 4 LUT entries and these are

the same for all cores?

Thank you,

Anastasios Papagiannis

Hello Anastasios,

the location of the 4 LUTs is determined at kernel initialization. It is only necessary (for the initialization of the library) to know the first one, since as you correctly state, they are contiguous.

unsigned int popshm_data(int value, int coreid);
By passing POPSHMDATA_LUT as the first parameter and the core id in question as the second parameter.
Another option is to call the function:

void popshm_print(int to_print);

with the POPSHMPRINT_TABLE option, and it will output information about the internal state of the POPSHM in table form. The information includes the first LUT entry of each core. If you pass it POPSHMPRINT_PAGE_LIST, it will print each POPSHM page together with their LUT entries; this option is very verbose.

Another option is to look at the location in shared memoryh where the LUT data is located. You can tell from the header that these are located in:

This way of setting the pages at runtime is no longer supported. That worked in the 2.6.16 kernel, but no longer in the 2.6.38 one.

The number of pages for the 2.6.38 kernel can only be set at boot time. This was also added as an option to the GUI, but I am not aware how this was added to the comman line tools. Let's wait for Ted or Michael on how to do this from the CLI.