Domanda

Abbiamo un sistema di bassa latenza di trading (gestori di alimentazione, analisi, inserimento ordini) scritto in Java. Esso utilizza il protocollo TCP e UDP ampiamente, non fa uso di Infiniband o altro in rete non standard.

Chiunque può commentare i compromessi dei vari sistemi operativi o le configurazioni del sistema operativo per implementare questo sistema? Mentre il throughput è ovviamente importante per tenere il passo con le moderne feed dei prezzi, la latenza è la nostra priorità # 1.

Solaris sembra un candidato naturale in quanto hanno creato Java; devo usare processori SPARC o x64?

che ho sentito parlare bene di RHEL e SLERT, sono quelle le versioni corrette di Linux da usare nella nostra analisi comparativa.

Qualcuno ha testato di Windows contro i sistemi operativi di cui sopra? O è assunta di non tenere il passo?

Mi piacerebbe lasciare il Java vs C ++ dibattito per un thread diverso.

È stato utile?

Soluzione

I venditori amano questo tipo di benchmark. Si dispone di codice, giusto?

IBM, Sun / Oracle, HP saranno tutti l'amore per eseguire l'applicazione sul loro attrezzi per dimostrare i loro vantaggi.

fargli fare questo. Se si dispone di codice, fare i venditori una dimostrazione sul loro attrezzi per dimostrare che è meglio per le vostre esigenze.

E 'facile, indolore, libero , e di fatto. La decisione finale sarà facile e ovvio. E si sa come installare e sintonizzare per massimizzare le prestazioni.


Che Odio fare è prevedere questo genere di cose prima il codice è scritto. Troppi clienti hanno chiesto una H / W raccomandazione e sistema operativo prima abbiamo finito identificare tutti i casi d'uso. Chiedendo per questo tipo di precognizione è semplice follia.

Ma si dispone di codice. È possibile produrre casi di test che esercitano il proprio codice. Che è perfetto.

Altri suggerimenti

Per un ambiente di trading, oltre a bassa latenza si sono probabilmente preoccupati per coerenza, così come la latenza in modo concentrandosi sulla riduzione dell'impatto del GC pause per quanto possibile, potrebbe dare più benefici che le scelte del sistema operativo differnt.

  • Il G1 garbage collector nelle versioni recenti di Soli Hotspot VM migliora fermare il mondo mette in pausa un sacco, in modo simile alla JRockit VM
  • Per le garanzie reali prestazioni, però, la versione Azul Sistemi del compilatore Hotspot sul loro Java Appliance offre il più basso pause garantiti disponibili - anche scale a una dimensione massiccia -. 100s di GB pila e 100s di nuclei
  • Mi piacerebbe sconto Java in tempo reale - anche se si otterrebbe garanzie di risposta, che ci si sacrifichi il throughput per ottenere quelle garanzie

Tuttavia, se avete intenzione di utilizzare il sistema di trading in un ambiente in cui ogni microsecondo conta, sei davvero andando a vivere con la mancanza di coerenza si ottengono da l'attuale generazione di VM - nessuno di loro (ad eccezione in tempo reale) garantisce pause bassa microsecondo GC. Naturalmente, a questo livello la vostra intenzione di incorrere negli stessi problemi da attività OS (processo di prelazione, la gestione degli interrupt, errori di pagina, ecc). In questo caso una delle varianti in tempo reale di Linux sta per aiutarvi.

Non escluderei Windows da questo solo perché è di Windows. Il mio expirience nel corso degli ultimi anni è stato che le versioni di Windows di Sun JVM era di solito la performance più maturo saggio in contrasto con Linux o Soaris x86 sullo stesso hardware. La JVM per Solaris SPARC può essere buona, ma credo che con Windows su sistemi x86 si otterrà più potere per meno soldi.

Raccomando vivamente che si guarda in un sistema operativo hai già esperienza con. Solaris è una bestia strana, se si conosce solo Linux, per esempio.

Anche io consiglio vivamente di utilizzare una piattaforma in realtà supportato da Sun, come questo renderà molto più facile ottenere assistenza professionale quando si ha realmente, realmente bisogno.

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

Probabilmente mi preoccupo per la raccolta dei rifiuti causando latenza ben prima che il sistema operativo; hai guardato in accordatura che a tutti?

Se fossi disposto a spendere il tempo di processo diversi sistemi operativi, mi piacerebbe provare Solaris 10 e NetBSD, e probabilmente una variante di Linux per buona misura.

Mi piacerebbe sperimentare con 32 vs 64-bit architetture; 64 bit vi darà un più ampio spazio di indirizzamento mucchio ... ma ci vorrà più tempo per affrontare ogni po 'di memoria.

Sto assumendo che hai profilata l'applicazione e sapere dove sono i colli di bottiglia; dal commento su GC, che hai fatto. In tal caso, l'applicazione non dovrebbe essere CPU-bound, e l'architettura di chip non dovrebbe essere una preoccupazione primaria.

Non credo che gli ambienti di codice gestito e l'elaborazione in tempo reale vanno molto bene insieme. Se davvero a cuore la latenza, rimuovere lo strato imposta dal codice gestito. Questo non è un argomento Java vs C ++, ma un Java / C # / ... vs C / C ++ / Fortran / ... argomento, e credo che sia una discussione di progettazione valida avere.

E sì, io intendo FORTRAN, corriamo un certo numero di sistemi real-time vicino con una fondazione FORTRAN.

Un modo per gestire la latenza è di avere diverse JVM di dividere il lavoro con cumuli più piccole in modo che una fermare il garbage collection mondo non è come in termini di tempo quando succede e colpisce meno processi.

Un altro approccio è quello di caricare un gruppo di JVM con abbastanza memoria e allocare i processi per assicurare che non ci sarà una sosta il garbage collection mondo durante le ore che ti interessano di latenza (se questo non è un 24/7 app), e riavviare JVM sulle ore di riposo.

Si dovrebbe anche guardare altre implementazioni JVM come una possibilità (come JRocket). Naturalmente se qualcuno di loro sono appropriati dipende interamente dalla vostra applicazione specifica.

Se una qualsiasi delle questioni suddette vostro approccio, interesserà la scelta del sistema operativo. Ad esempio, se si va con un'altra implementazione JVM, che potrebbe limitare le scelte del sistema operativo, e se si va con il clustering o comunque l'esecuzione di un diverse JVM per l'applicazione, che potrebbe richiedere alcuni strumenti del sistema operativo migliore sottostanti per gestire in modo efficace, influenzando ulteriormente la scelta del sistema operativo .

La scelta del sistema operativo o configurabile è completamente ridondante considerando la disponibilità di tessuti rete più veloci.

Guarda 10GigE NIC con le dita dei piedi, o la soluzione più veloce di 4X QDR (40Gbs) InfiniBand ma con IPoIB presenta un'interfaccia Ethernet standard e il routing.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top