2009-12-23 20 views
14

Tenemos un sistema de negociación de baja latencia (controladores de alimentación, análisis, entrada de pedidos) escrito en Java. Utiliza TCP y UDP extensamente, no usa Infiniband u otras redes no estándar.¿El mejor sistema operativo para implementar una aplicación Java de baja latencia?

¿Alguien puede comentar las compensaciones de varios sistemas operativos o configuraciones de sistema operativo para implementar este sistema? Si bien el rendimiento es obviamente importante para mantener el ritmo de los precios de los alimentos modernos, la latencia es nuestra prioridad número uno.

Solaris parece ser un candidato natural ya que crearon Java; ¿Debo usar procesadores Sparc o x64?

He oído cosas buenas sobre RHEL y SLERT, son esas las versiones correctas de Linux para usar en nuestra evaluación comparativa.

¿Alguien ha probado Windows con los SO anteriores? ¿O se supone que no se mantiene al día?

Me gustaría dejar el debate Java vs C++ para un hilo diferente.

+2

Oh vamos, todos podríamos hacer con otra llamarada de Java vs C++ – Patrick

+0

"Solaris parece un candidato natural ya que crearon Java" ¿En serio? Esto es un reclamo tan poco científico como usted puede hacer. –

+1

Te puedo dar un consejo: un sistema operativo de 32 bits limitará el tamaño del almacenamiento dinámico de tu JVM. Los sistemas operativos de 32 bits * nix tienen un límite superior que win32; la ventana reserva ciertas áreas de la memoria, lo que evita que la JVM obtenga un bloque contiguo de memoria (el límite exacto varía, pero está en el estadio de 1.1-1.5GB). Si mal no recuerdo, el límite para * nix es 2GB. Los sistemas operativos de 64 bits no tienen esta limitación, pero su hardware debe ser compatible. – RMorrisey

Respuesta

17

A los vendedores les encanta este tipo de punto de referencia. Usted tiene el código, ¿verdad?

IBM, Sun/Oracle, HP les encantará ejecutar su aplicación en su equipo para demostrar sus ventajas.

Haz que hagan esto. Si tiene código, haga que los proveedores ejecuten una demostración en su equipo para mostrar cuál es la mejor para sus necesidades.

Es fácil, indoloro, gratis, y factual. La decisión final será fácil y obvia. Y sabrá cómo instalar y sintonizar para maximizar el rendimiento.


Lo que me gusta hacer es predecir este tipo de cosas antes de se escribe el código. Demasiados clientes han pedido una recomendación H/W y OS antes de que hayamos terminado de identificar todos los casos de uso. Pedir ese tipo de precognición es simple locura.

Pero tiene código. Puede producir casos de prueba que ejercen su código. Eso es perfecto.

+1

¿Cuánto necesita gastar en hardware para obtener este tipo de demostración? Tenemos aproximadamente 40 servidores implementados actualmente y creo que pensé que probablemente éramos demasiado pequeños para hacer lo del laboratorio de desempeño de proveedores. –

+2

@Ted Graham. Cero. Si quieren venderle hardware, deben demostrar que funciona. Ellos * amor * haciendo esto. Comience preguntando a sus vendedores para demostraciones. –

+2

¡Esta respuesta es maravillosa! A las compañías de hardware les ENCANTARÍA intentar mostrar su hardware de la mejor manera posible. Solo hazte un favor: especifica exactamente lo que estás midiendo ANTES de darles el código de prueba. En particular, es probable que desee un rendimiento sostenido, (número de transacciones durante un período más largo, como más de una hora) no la transacción más rápida. –

1

Probablemente me preocupe que la recolección de basura cause latencia mucho antes que el sistema operativo; ¿Has buscado afinar eso en absoluto?

Si estuviera dispuesto a pasar el tiempo probando diferentes sistemas operativos, probaría Solaris 10 y NetBSD, y probablemente una variante de Linux para una buena medida.

Experimentaría con las arquitecturas de 32 contra 64 bits; 64 bit le dará un espacio de direcciones de montón más grande ... pero le llevará más tiempo abordar cada bit de memoria.

Supongo que ha perfilado su aplicación y sabe dónde están los cuellos de botella; por el comentario sobre GC, has hecho eso. En ese caso, su aplicación no debería estar unida a la CPU, y la arquitectura del chip no debería ser una preocupación principal.

+0

Ya hemos sintonizado el GC bastante. –

+0

¿Windows no lo está cortando? O bien, ¿cuál es el problema que estás golpeando? –

+0

Esto es para un sistema de comercio, SIEMPRE quiere ser más rápido. –

1

Recomiendo encarecidamente que busque un sistema operativo con el que ya tenga experiencia. Solaris es una bestia extraña si solo conoces Linux, p.

También recomiendo usar una plataforma realmente compatible con de Sun, ya que esto hará que sea mucho más fácil obtener asistencia profesional cuando REALMENTE, REALMENTE la necesite.

http://java.sun.com/javase/6/webnotes/install/system-configurations.html

+0

La mayor parte de nuestra experiencia es en Windows; aunque estaríamos dispuestos a contratar un administrador de Solaris o Linux si es necesario –

0

No creo entornos de código administrado y procesamiento en tiempo real van muy bien juntos. Si realmente te preocupa la latencia, elimina la capa impuesta por el código administrado. Este no es un argumento Java vs C++, sino un argumento Java/C#/... vs C/C++/FORTRAN/..., y creo que es una discusión de diseño válida.

Y sí, me refiero a FORTRAN, ejecutamos varios sistemas casi en tiempo real con una base de FORTRAN.

+2

Fortran smortran. Puede compilar Java a silicio http://cscott.net/Publications/design.ps y cortar el intermediario. –

+1

Las JVM tienen algunas ventajas de rendimiento (por ejemplo, auto-perfil en tiempo de ejecución) que se perderían al compilar Java en un exe o compilarlo en un chip. –

+0

La compilación de silicio anula la premisa original de OP sobre qué sistema operativo ejecutar. Si se compila, la pregunta del sistema operativo no se preocupa por el idioma de origen original. – cdkMoose

0

Una forma de administrar la latencia es tener varias JVM dividiendo el trabajo con montones más pequeños para que detener la recolección de basura mundial no consuma demasiado tiempo cuando sucede y afecte menos procesos.

Otro enfoque es cargar un conjunto de JVM con memoria suficiente y asignar los procesos para garantizar que no se detendrá la recolección de basura mundial durante las horas que usted se preocupa por la latencia (si esto no es un 24/7 aplicación) y reinicie las JVM en horas de inactividad.

También debe considerar otras implementaciones de JVM como una posibilidad (como JRocket). Por supuesto, si alguno de ellos es apropiado depende completamente de su aplicación específica.

Si cualquiera de los anteriores es importante para su enfoque, afectará la elección del sistema operativo. Por ejemplo, si va con otra implementación de JVM, eso podría limitar las opciones de SO, y si usa clústeres o ejecuta varias JVM para la aplicación, eso podría requerir algunas mejores herramientas de SO subyacentes para administrar de manera efectiva, influyendo aún más en la elección del sistema operativo .

5

Para un entorno comercial, además de una baja latencia, probablemente le preocupe la consistencia y la latencia, por lo que concentrarse en reducir al máximo el impacto de las pausas de GC puede proporcionarle más beneficios que las diferentes opciones de SO.

  • El G1 garbage collector en las versiones recientes de Soles Hotspot VM mejora detener el mundo se detiene mucho, de una manera similar a la JRockit VM
  • Para garantías de rendimiento real, aunque, Azul Systems versión del compilador Hotspot en su Java dispositivo entrega las pausas garantizadas más bajas disponibles, también se amplía a un tamaño masivo: 100 s de pila GB y 100 s de núcleos.
  • me descarto de Java en tiempo real - a pesar de que te dan garantías de respuesta, te sacrificas rendimiento para conseguir esas garantías

Sin embargo, si su planificación sobre el uso de su sistema de comercio en un entorno donde cada microsegundo cuenta, realmente vas a tener que vivir con la falta de consistencia que obtendrás de la generación actual de máquinas virtuales, ninguna de ellas (excepto en tiempo real) garantiza pausas GC de microsegundos bajos. Por supuesto, en este nivel se encontrará con los mismos problemas de la actividad del sistema operativo (prevención de procesos, manejo de interrupciones, fallas de página, etc.). En este caso, una de las variantes en tiempo real de Linux lo ayudará.

+0

Estoy menos preocupado con las pausas de GC que con lo que clasificó como "Actividad de SO" Creo que los dispositivos de Azul no brindan latencia de menos de milisegundos. –

+0

OK. Ninguna VM en el mercado proporciona latencia sub-ms - el colector G1 le permite especificar la pausa máxima del objetivo en ms, pero los ejemplos siempre bajan en el rango ms. Cuando llega al punto en que la actividad del sistema operativo le está causando problemas, obtendrá un gran salto en el rendimiento de RDMA basado en infiniband. En el orden de 10usec en lugar de alrededor de 70usec por 10GigE para una transferencia. –

+0

Estoy de acuerdo en que ninguna VM proporciona garantías de latencia de menos de milisegundos para un GC, pero creo que Azul no proporciona latencia inferior a la del procesamiento de eventos cuando el GC no está involucrado. Lo recibí de http://blogs.azulsystems.com/cliff/webtech/page/2/ (mira la entrada del 28 de octubre de 2008) –

2

No excluiría Windows de esto solo porque es Windows. Mi expiriencia en los últimos años ha sido que las versiones de Windows de Sun JVM solían ser las más maduras en cuanto a rendimiento, en comparación con Linux o Soaris x86 en el mismo hardware. La JVM para Solaris SPARC también puede ser buena, pero supongo que con Windows en x86 obtendrá más potencia por menos dinero.

+0

Nuestra evaluación comparativa ha demostrado que Windows es muy competitivo hasta el momento. Estamos a punto de comenzar nuevas pruebas, por lo que hice mi pregunta. –

0

La elección del sistema operativo o configurable es completamente redundante teniendo en cuenta la disponibilidad de telas de red más rápidas.

Mire 10GigE con ToE NICs, o la solución más rápida de 4X QDR (40Gbs) InfiniBand pero con IPoIB presentando una interfaz Ethernet estándar y enrutamiento.

Cuestiones relacionadas