Tengo una gran cantidad de código en una biblioteca compartida ELF que solo se utiliza durante la inicialización de la biblioteca (se llama desde inicializadores estáticos). Si coloco este código en su propia sección (o tal vez puede ir en la sección .init), lo que puedo hacer usando __attribute__((section(".mysection")))
, ¿hay alguna manera de forzar esta página a ser paginada después de que la biblioteca se haya cargado?Sección Flush ELF de la RAM después de la inicialización de la biblioteca
This question está relacionado, pero se llegó a la conclusión de que el kernel desplegará páginas no utilizadas cuando no tenga suficiente memoria, por lo que no es necesario hacerlo explícitamente. Sin embargo, estoy trabajando en un entorno integrado donde la memoria es escasa y el costo de paginación en el código del disco (una unidad flash USB lenta) es alto. Por lo tanto, prefiero enjuagar este código de forma explícita, que sé que nunca volverá a usarse, en lugar de que el kernel decida enjuagar algún otro código que eventualmente necesite ser devuelto.
Estoy Seguro que recuerdo haber leído sobre un syscall para pedirle al núcleo que entre o salga de ciertas regiones de la memoria, aunque no puedo encontrar ninguna referencia a esto en ninguna parte, así que tal vez lo imaginé. ¿Existe tal cosa?
El syscall 'madvise', en particular con el parámetro MADV_WILLNEED/MADV_DONTNEED, es en lo que estaba pensando. Sin embargo, todavía estoy interesado en saber si hay una manera fácil de forzar el desplazamiento de una sección ELF en particular. – jchl