Nivel de kernel distribuido RAM. ¿Cuáles son los retos?

Welll la “no sobrecarga de espacio de usuario” se vuelve difícil.

Hay procedimientos en Linux que pueden relacionarse con esto (Arquitectura de memoria no uniforme). Por lo general, esto se relaciona con las redes internas. Lo estás describiendo de manera diferente. En NUMA, el proceso tiende a migrar al nodo con la memoria en lugar de copiar la memoria (lo que también puede suceder).

Su descripción es de siempre copiarlo … que suena más como usar un archivo de intercambio remoto, donde todo el archivo de intercambio reside en la memoria del servidor.

Si ese es el caso, entonces es posible utilizar controladores iSCSI para conectarse a un servidor remoto, donde una aplicación admite el objetivo iSCSI como un dispositivo residente en memoria (bloqueado en la memoria) utilizado para la paginación. Esto reduciría el esfuerzo al enfocarse en la implementación del objetivo iSCSI (que también está disponible en Linux).

Gracias por el A2A.

Entiendo que almacenaría cosas en la RAM de una computadora cercana en lugar de en discos en un esfuerzo por mejorar la latencia. Estoy de acuerdo en que con tecnología como RDMA, esto suena atractivo.

La cuestión de la arquitectura, dónde y cómo implementarla, permanece. En mi opinión, dependería de su caso de uso. Tenga en cuenta que aunque podría tener un mejor rendimiento que el acceso al disco, RDMA aún sería notablemente más lento que la RAM local. La solución tiene que dar cuenta de esto. Puede haber un valor en permitir que el espacio de usuario acceda directamente al RDMA y dejar la implementación como una biblioteca de usuario en lugar del núcleo. Es posible que la lógica del espacio de usuario que utiliza esta característica tenga en cuenta la ubicación de los datos por razones de rendimiento. En ese caso, las interfaces invocadas también deberán ser conscientes de la distribución de memoria. La lógica general del manejo de transportes, de asignación, etc. también puede mantenerse en el espacio de usuario. Eso plantea la preocupación obvia sobre el impacto de la muerte del proceso, la pérdida de asignaciones de memoria, etc. Una solución similar a los archivos en el FS de rendimiento basado en RAMdisk podría funcionar lo suficientemente bien.

Para resumir, considere mover la mayor parte de la lógica al espacio de usuario, tal vez como una biblioteca y / o demonio, más algún almacén de respaldo de rendimiento persistente a través de las muertes del proceso.

Si todo lo que quiere hacer es crear un intercambio rápido en una red, asegúrese de que sea factible y bastante fácil. Por supuesto, ese es un criterio bastante débil, en comparación con el disco. Lo que realmente necesita comparar son referencias de memoria local versus remota, y los números allí son menos amables. (Las referencias locales son de alrededor de 50ns, pero necesita Infiniband para obtener latencias de red incluso 20 veces más altas que eso …)

Otro desafío es que el hardware proporciona un soporte razonable para la memoria distribuida a nivel de página, pero realmente preferiría distribuir 64B de caché en lugar de páginas de 4kB.

Tenga en cuenta que la memoria distribuida por software se ha realizado varias veces, ¡incluso hay una página de wikipedia!

Echa un vistazo a tmem, una extensión de Linux creada por Oracle. Creo que es lo que estás proponiendo Memoria Trascendente – oss.oracle.com