2012-02-27 10 views
8

Tengo algunas computadoras multi-core conectadas por la red Infiniband. Me gustaría tener un cálculo de baja latencia en un grupo de memoria compartida, con operaciones atómicas remotas. Sé que RDMA es el camino a seguir. En cada nodo, registraría una región de memoria (y un dominio de protección) para compartir datos.Compartir memoria RDMA

Los ejemplos de RDMA en línea a menudo se centran en una única conexión entre un servidor de subproceso único y un cliente de subproceso único. Ahora me gustaría tener un proceso multiproceso en cada nodo Infiniband. Estoy muy confundido acerca de la siguiente ...

  1. ¿Cuántos pares cola debería preparar en cada nodo, para un grupo de n nodos y los hilos de m en total? Para ser más específico, ¿pueden los subprocesos múltiples en el mismo nodo compartir el mismo par de colas?

  2. ¿Cuántas colas de finalización debo preparar en cada nodo? Tendré múltiples hilos que emiten operaciones remotas de lectura/escritura/cas en cada nodo. Si compartieran una cola de finalización común, los eventos de finalización se mezclarán. Si los hilos tienen sus propias colas de finalización separadas, habría realmente muchas de ellas.

  3. ¿Sugiere que tenga alguna biblioteca existente en lugar de escribir este software? (hmm, ¿o debería escribir uno y de código abierto? :-)

Gracias por su amable sugerencia (s).

Respuesta

8

En Linux al menos, la biblioteca de verbos InfiniBand es completamente segura para subprocesos. De modo que puede usar tantos o tan pocos pares de colas (QP) en su aplicación de subprocesos múltiples como desee; múltiples subprocesos pueden publicar solicitudes de trabajo en un solo QP de forma segura, aunque, por supuesto, deberá asegurarse de que el seguimiento de los sobresalientes solicitudes, etc. que usted hace en su propia aplicación es seguro para subprocesos.

Es cierto que cada cola de envío y cada cola de recepción (recuerde que QP es realmente un par de colas :) se adjunta a una única cola de finalización (CQ). Entonces, si quieres que cada hilo tenga su propia CQ, entonces cada hilo necesitará su propia QP para enviar trabajo.

En general, los QP y CQ no son realmente un recurso limitado: puede tener cientos o miles en un solo nodo sin problemas. Así que puedes diseñar tu aplicación sin preocuparte demasiado por la cantidad absoluta de colas que estás usando. Esto no quiere decir que no tenga que preocuparse por la escalabilidad, por ejemplo, si tiene muchas colas de recepción y muchos búferes por cola, entonces puede acumular demasiada memoria en el búfer de recepción, por lo que termina necesidad de utilizar colas de recepción compartidas (SRQ).

Existen varias bibliotecas de middleware que utilizan IB; probablemente MPI (p. ej., http://open-mpi.org/) es el más conocido, y probablemente valga la pena evaluarlo antes de llegar a reinventar las cosas. Los desarrolladores de MPI también han publicado muchas investigaciones sobre el uso eficiente de IB/RDMA, que probablemente valga la pena buscar en caso de que decida construir su propio sistema.

+0

Y el código fuente de los pares de cola (QP), cola de finalización (CQ) y colas de recepción compartidas (SRQ) tienen que escribir el suyo, o puedo preparar su implementación (como mejor práctica) y dónde pueden ¿tomar? – Alex

Cuestiones relacionadas