Considerazioni sul sistema Nitro per l'ottimizzazione delle prestazioni - Amazon Elastic Compute Cloud

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Considerazioni sul sistema Nitro per l'ottimizzazione delle prestazioni

Nitro System è una raccolta di componenti hardware e software generati da AWS che abilitano prestazioni elevate, alta disponibilità ed elevata sicurezza. Inoltre, Nitro System fornisce funzionalità simili a bare metal che eliminano gli impegni di virtualizzazione e supportano i carichi di lavoro che richiedono accesso completo per l'hosting di hardware. Per ulteriori informazioni dettagliate, consulta Nitro System AWS.

Tutti i tipi di EC2 istanze dell'attuale generazione eseguono l'elaborazione dei pacchetti di rete su schede Nitro. EC2 Questo argomento illustra la gestione di pacchetti di alto livello sulla scheda Nitro, gli aspetti comuni dell'architettura e della configurazione di rete che influiscono sulle prestazioni di gestione dei pacchetti e le azioni che si possono intraprendere per ottenere le massime prestazioni per le istanze basate su Nitro.

Le schede Nitro gestiscono tutte le interfacce di input e output (I/O), come quelle necessarie per i Virtual Private Clouds (). VPCs Per tutti i componenti che inviano o ricevono informazioni tramite la rete, le schede Nitro fungono da dispositivo di elaborazione autonomo per il traffico I/O, fisicamente separato dalla scheda madre del sistema su cui vengono eseguiti i carichi di lavoro dei clienti.

Flusso di pacchetti di rete sulle schede Nitro

EC2 le istanze basate sul sistema Nitro dispongono di funzionalità di accelerazione hardware che consentono un'elaborazione dei pacchetti più rapida, misurata in base alla velocità di trasmissione dei pacchetti al secondo (PPS). Quando una scheda Nitro esegue la valutazione iniziale di un nuovo flusso, salva le informazioni condivise per tutti i pacchetti del flusso, come i gruppi di sicurezza, gli elenchi di controllo degli accessi e le voci della tabella di routing. Quando elabora pacchetti aggiuntivi per lo stesso flusso, può utilizzare le informazioni salvate per ridurre il sovraccarico di tali pacchetti.

La velocità di connessione è misurata in base alla metrica delle connessioni al secondo (CPS). Ogni nuova connessione richiede un sovraccarico di elaborazione aggiuntivo che deve essere tenuto in considerazione nelle stime di capacità del carico di lavoro. È importante considerare sia le metriche CPS che PPS durante la progettazione dei carichi di lavoro.

Come viene stabilita una connessione

Quando viene stabilita una connessione tra un'istanza basata su Nitro e un altro endpoint, la scheda Nitro valuta l'intero flusso per il primo pacchetto inviato o ricevuto tra i due endpoint. Per i pacchetti successivi dello stesso flusso, generalmente non è necessaria una rivalutazione completa. Tuttavia, ci sono alcune eccezioni. Per ulteriori informazioni sulle eccezioni, consulta Pacchetti che non utilizzano l'accelerazione hardware.

Le seguenti proprietà definiscono i due endpoint e il flusso di pacchetti tra di loro. Queste cinque proprietà insieme sono note come flusso a 5 tuple.

  • IP di origine

  • Porta sorgente

  • IP di destinazione

  • Porta di destinazione

  • Protocollo di comunicazione

La direzione del flusso di pacchetti è nota come ingresso (in entrata) e uscita (in uscita). Le seguenti descrizioni generali riassumono il flusso di pacchetti di rete end-to-end.

  • Ingresso: quando una scheda Nitro gestisce un pacchetto di rete in entrata, valuta il pacchetto rispetto alle regole del firewall stateful e agli elenchi di controllo degli accessi. Tiene traccia della connessione, la misura ed esegue altre azioni, a seconda dei casi. Poi inoltra il pacchetto alla sua destinazione sulla CPU host.

  • Uscita: quando una scheda Nitro gestisce un pacchetto di rete in uscita, cerca la destinazione di interfaccia remota, valuta varie funzioni VPC, applica limiti di velocità ed esegue altre azioni pertinenti. Poi inoltra il pacchetto alla sua prossima destinazione dell'hopping sulla rete.

Progetta la tua rete per ottenere prestazioni ottimali

Per sfruttare le funzionalità prestazionali del sistema Nitro, devi capire quali sono le esigenze di elaborazione di rete e in che modo tali esigenze influiscono sul carico di lavoro delle risorse Nitro. Quindi puoi progettare per ottenere prestazioni ottimali per il tuo panorama di rete. Le impostazioni dell'infrastruttura e la progettazione e configurazione del carico di lavoro delle applicazioni possono influenzare l'elaborazione dei pacchetti e le velocità di connessione. Ad esempio, se l'applicazione ha un'elevata velocità di creazione delle connessioni, come un servizio DNS, un firewall o un router virtuale, avrà meno possibilità di sfruttare l'accelerazione hardware che si verifica solo dopo aver stabilito la connessione.

Puoi configurare le impostazioni dell'applicazione e dell'infrastruttura per snellire i carichi di lavoro e migliorare le prestazioni di rete. Tuttavia, non tutti i pacchetti sono idonei all'accelerazione. Il sistema Nitro utilizza l'intero flusso di rete per nuove connessioni e per pacchetti non idonei all'accelerazione.

La parte restante di questa sezione si concentrerà sulle considerazioni relative alla progettazione di applicazioni e infrastruttura per aiutare a garantire che i pacchetti fluiscano il più possibile all'interno del percorso accelerato.

Considerazioni sulla progettazione di rete per il sistema Nitro

Quando si configura il traffico di rete per la tua istanza, occorre considerare molti aspetti che possono influenzare le prestazioni del PPS. Una volta stabilito un flusso, la maggior parte dei pacchetti regolarmente in entrata o uscita sono idonei all'accelerazione. Tuttavia, vi sono alcune eccezioni per garantire che i progetti dell'infrastruttura e i flussi di pacchetti continuino a soddisfare gli standard del protocollo.

Per ottenere le migliori prestazioni dalla tua scheda Nitro, occorre considerare attentamente i pro e i contro dei seguenti dettagli di configurazione per infrastruttura e applicazioni.

Considerazioni sull'infrastruttura

La configurazione dell'infrastruttura può influire sul flusso dei pacchetti e sull'efficienza di elaborazione. L'elenco seguente include alcune importanti considerazioni.

Configurazione dell'interfaccia di rete con asimmetria

I gruppi di sicurezza utilizzano il monitoraggio delle connessioni per tracciare le informazioni sul traffico che fluisce da e verso l'istanza. Il routing asimmetrico, in cui il traffico entra in un'istanza attraverso un'interfaccia di rete ed esce da un'altra interfaccia di rete, può ridurre le prestazioni di picco che un'istanza può raggiungere se i flussi vengono tracciati. Per ulteriori informazioni sul tracciamento delle connessioni dei gruppi di sicurezza, sulle connessioni non tracciate e sulle connessioni tracciate automaticamente, consulta Monitoraggio delle connessioni dei gruppi di EC2 sicurezza Amazon.

Driver di rete

I driver di rete vengono aggiornati e rilasciati periodicamente. Se i driver non sono aggiornati, ciò può influire in modo significativo sulle prestazioni. Mantieni aggiornati i driver per assicurarti di avere le patch più recenti e di poter sfruttare i miglioramenti delle prestazioni, come la funzionalità di percorso accelerato disponibile solo per i driver di ultima generazione. I driver precedenti non supportano la funzionalità di percorso accelerato.

Per sfruttare la funzionalità di percorso accelerato, ti consigliamo di installare il driver ENA più recente sulle tue istanze.

Istanze Linux – Driver ENA Linux 2.2.9 o versione successiva. Per installare o aggiornare il driver ENA Linux dal GitHub repository Amazon Drivers, consulta la sezione sulla compilazione dei driver del file readme.

Istanze Windows – Driver ENA Windows 2.0.0 o versione successiva. Per installare o aggiornare il driver ENA Windows, consulta Installare il driver ENA su istanze EC2 Windows.

Distanza tra endpoint

Una connessione tra due istanze nella stessa zona di disponibilità può elaborare più pacchetti al secondo rispetto a una connessione tra regioni per via della finestra TCP a livello di applicazione, che determina la quantità di dati che possono essere trasmessi in un dato momento. Le lunghe distanze tra le istanze aumentano la latenza e diminuiscono il numero di pacchetti che gli endpoint possono elaborare.

Considerazioni sulla progettazione delle applicazioni

Vi sono alcuni aspetti della progettazione e della configurazione delle applicazioni che possono influire sull'efficienza di elaborazione. L'elenco seguente include alcune importanti considerazioni.

Dimensioni del pacchetto

Pacchetti di dimensioni maggiori possono aumentare il throughput dei dati che un'istanza è in grado di inviare e ricevere sulla rete. Pacchetti di dimensioni minori possono aumentare la velocità di elaborazione dei pacchetti, ma ciò può ridurre la larghezza di banda massima ottenuta quando il numero di pacchetti supera le tolleranze PPS.

Se la dimensione di un pacchetto supera l'unità di trasmissione massima (MTU) di un hop di rete, un router lungo il percorso potrebbe frammentarlo. I frammenti di pacchetto risultanti sono considerati eccezioni e vengono elaborati alla velocità standard (non accelerata). Ciò può causare variazioni nelle prestazioni. Amazon EC2 supporta i jumbo frame da 9001 byte, tuttavia non tutti i servizi lo supportano. Consigliamo di valutare la topologia per la configurazione della MTU.

Compromessi del protocollo

I protocolli affidabili come TCP hanno un sovraccarico maggiore rispetto ai protocolli inaffidabili come UDP. Il minore sovraccarico e l'elaborazione di rete semplificata per il protocollo di trasporto UDP possono comportare un tasso di PPS più elevato, ma a scapito di una fornitura affidabile dei pacchetti. Se la fornitura affidabile dei pacchetti non è fondamentale per la tua applicazione, UDP potrebbe essere una buona opzione.

Micro-bursting

Il micro-bursting avviene quando il traffico supera le tolleranze consentite per brevi periodi di tempo anziché essere distribuito uniformemente. Ciò si verifica in genere su una scala di microsecondi.

Ad esempio, supponiamo di avere un'istanza in grado di inviare fino a 10 Gbps e che l'applicazione invii tutti i 10 Gb in mezzo secondo. Questo micro-burst supera la tolleranza consentita durante il primo mezzo secondo e non lascia nulla per il resto del secondo. Anche se hai inviato 10 Gb nell'arco di tempo di 1 secondo, le tolleranze nel primo mezzo secondo possono far sì che i pacchetti vengano messi in coda o eliminati.

Puoi utilizzare uno strumento di pianificazione di rete come Linux Traffic Control per aiutare a velocizzare il throughput ed evitare che i pacchetti vengano messi in coda o persi a causa del micro-bursting.

Numero di flussi

Un singolo flusso è limitato a 5 Gbps a meno che non si trovi all'interno di un gruppo di posizionamento cluster che supporta fino a 10 Gbps o se utilizzi ENA Express, che supporta fino a 25 Gbps.

Allo stesso modo, una scheda Nitro può elaborare più pacchetti su molteplici flussi invece di utilizzare un singolo flusso. Per raggiungere la massima velocità di elaborazione dei pacchetti per istanza, consigliamo almeno 100 flussi su istanze con una larghezza di banda aggregata pari o superiore a 100 Gbps. Con l'aumento delle capacità di larghezza di banda aggregata, aumenta anche il numero di flussi necessari per raggiungere le velocità di elaborazione di picco. Il benchmarking aiuta a determinare la configurazione necessaria per raggiungere le velocità di picco sulla rete.

Numero di code per Adattatore elastico di rete (ENA)

Per impostazione predefinita, il numero massimo di code per ENA viene assegnato a un'interfaccia di rete in base alla dimensione e al tipo di istanza. La diminuzione del numero di code può ridurre la velocità PPS massima raggiungibile. Consigliamo di utilizzare l'allocazione predefinita della coda per prestazioni ottimali.

Per Linux, un'interfaccia di rete è configurata con il valore massimo per impostazione predefinita. Per le applicazioni basate sul Piano Dati Kit Sviluppo (DPDK), consigliamo di configurare il numero massimo di code disponibili.

Sovraccarico di elaborazione delle funzionalità

Funzionalità come Traffic Mirroring ed ENA Express possono aumentare il sovraccarico di elaborazione, il che può ridurre le prestazioni assolute di elaborazione dei pacchetti. Puoi limitare l'uso delle funzionalità o disabilitarle per aumentare la velocità di elaborazione dei pacchetti.

Monitoraggio della connessione per mantenere lo stato

I gruppi di sicurezza utilizzano il monitoraggio delle connessioni per archiviare le informazioni sul traffico da e verso l'istanza. Il tracciamento delle connessioni applica regole a ogni singolo flusso di traffico di rete per stabilire se il traffico è consentito o negato. La scheda Nitro usa il tracciamento del flusso per mantenere lo stato del flusso. Man mano che vengono applicate più regole del gruppo di sicurezza, è necessario più lavoro per valutare il flusso.

Nota

Non vengono monitorati tutti i flussi di traffico di rete. Se una regola del gruppo di sicurezza è configurata con Connessioni non tracciate, non è necessario alcun lavoro aggiuntivo, ad eccezione delle connessioni che vengono tracciate automaticamente per garantire un routing simmetrico in presenza di molteplici percorsi di risposta validi.

Pacchetti che non utilizzano l'accelerazione hardware

Non tutti i pacchetti possono sfruttare l'accelerazione hardware. La gestione di queste eccezioni comporta un sovraccarico di elaborazione, necessario per garantire l'integrità dei flussi di rete. I flussi di rete devono soddisfare in modo affidabile gli standard del protocollo, conformarsi alle modifiche nella progettazione del VPC ed effettuare il routing dei pacchetti solo verso destinazioni consentite. Tuttavia, il sovraccarico riduce le prestazioni.

Frammenti di pacchetti

Come indicato nella sezione Considerazioni sull'applicazione, i frammenti di pacchetti derivanti da pacchetti che superano l'MTU di rete vengono gestiti come eccezioni e non possono sfruttare l'accelerazione hardware.

Connessioni inattive

Quando una connessione non ha attività per un certo periodo di tempo, anche se non ha raggiunto il limite di timeout, il sistema può sottoporla a un abbassamento della priorità. Quindi, se i dati arrivano dopo l'abbassamento della priorità della connessione, il sistema deve gestirli come un'eccezione per riconnettersi.

Per gestire le connessioni, puoi utilizzare i timeout di tracciamento delle connessioni per chiudere le connessioni inattive. Puoi anche utilizzare i keepalive TCP per mantenere aperte le connessioni inattive. Per ulteriori informazioni, consulta Timeout di tracciamento delle connessioni inattive.

Mutazione del VPC

Gli aggiornamenti ai gruppi di sicurezza, alle tabelle di routing e agli elenchi di controllo degli accessi devono essere tutti rivalutati nel percorso di elaborazione per garantire che le voci route e le regole dei gruppi di sicurezza continuino ad essere applicate come previsto.

Flussi ICMP

Internet Control Message Protocol (ICMP) è un protocollo a livello di rete utilizzato dai dispositivi di rete per diagnosticare i problemi di comunicazione di rete. Questi pacchetti usano sempre il flusso completo.

Massimizza le prestazioni di rete sul sistema Nitro

Prima di prendere decisioni di progettazione o modificare le impostazioni di rete sulla tua istanza, ti consigliamo di attenerti alla seguente procedura per aiutarti a ottenere il miglior risultato:

  1. Scopri i pro e i contro delle azioni che puoi intraprendere per migliorare le prestazioni esaminando Considerazioni sulla progettazione di rete per il sistema Nitro.

    Per ulteriori considerazioni e best practice per la configurazione delle tue istanze su Linux, consulta ENA Linux Driver Best Practices and Performance Optimization Guide su. GitHub

  2. Effettua un benchmark dei tuoi carichi di lavoro con il numero di flussi attivi di picco per determinare un riferimento per le prestazioni delle tue applicazioni. Con una linea di base delle prestazioni, puoi testare le variazioni nelle impostazioni o nella progettazione dell'applicazione per capire quali considerazioni avranno l'impatto maggiore, soprattutto se prevedi di aumentare orizzontalmente o aumentare verticalmente.

L'elenco seguente contiene le azioni che puoi intraprendere per ottimizzare le prestazioni del PPS, a seconda delle esigenze del sistema.

  • Riduci la distanza fisica tra due istanze. Quando le istanze di invio e ricezione si trovano nella stessa zona di disponibilità o utilizzano gruppi di posizionamento cluster, puoi ridurre il numero di hop necessari a un pacchetto per viaggiare da un endpoint all'altro.

  • Utilizza Connessioni non tracciate.

  • Utilizza il protocollo UDP per il traffico di rete.

  • Per EC2 le istanze con larghezza di banda aggregata pari o superiore a 100 Gbps, distribuisci il carico di lavoro su 100 o più flussi individuali per distribuire il lavoro in modo uniforme sulla scheda Nitro.

Monitora le prestazioni sulle istanze Linux

Puoi utilizzare le metriche Ethtool sulle istanze Linux per monitorare gli indicatori delle prestazioni di rete delle istanze, come larghezza di banda, velocità dei pacchetti e tracciamento della connessione. Per ulteriori informazioni, consulta Monitora le prestazioni di rete per le impostazioni ENA sulla tua EC2 istanza.