Created
September 19, 2025 14:30
-
-
Save fabriziosalmi/77b287a3f27ec133895c813e7a29f5fc to your computer and use it in GitHub Desktop.
tuning-qa.txt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Tier 1: Fondamentale e Architetturale | |
| 1. Utilizzare Hardware Fisico Adeguato (NIC) (Lo strato fisico è il collo di bottiglia finale; non si possono inviare 100Gbps su una porta da 10GbE.) | |
| 2. Abilitare sendfile on; (Abilita il trasferimento "zero-copy" dei file, riducendo drasticamente il carico sulla CPU.) | |
| 3. Sfruttare Storage NVMe ad Alte Prestazioni (Lo storage deve leggere i dati più velocemente di quanto la rete possa inviarli.) | |
| 4. Massimizzare la RAM di Sistema per la Page Cache di Linux (Usa la RAM libera come cache super-veloce per i file richiesti di frequente.) | |
| 5. Usare un RAM Disk (tmpfs) per i Segmenti Video Live (Elimina l'I/O del disco per i file live temporanei, operando alla velocità della memoria.) | |
| 6. Aumentare i Buffer di Memoria di Rete del Kernel (net.core.mem) (Permette al kernel di gestire più dati per ogni connessione, saturando link ad alta banda.) | |
| 7. Aumentare i Descrittori di File (File Descriptors) di Sistema e per Processo (Evita errori "Too many open files" gestendo migliaia di connessioni simultanee.) | |
| 8. Abilitare l'I/O Asincrono con Thread (aio threads;) (Impedisce ai processi worker di bloccarsi in attesa della lettura da disco.) | |
| 9. Impostare i Processi Worker sul Numero di Core CPU (worker_processes auto;) (Massimizza l'uso della CPU senza causare eccessivo cambio di contesto.) | |
| 10. Aumentare le Connessioni per Worker (worker_connections) (Definisce il numero massimo di connessioni che ogni processo worker può gestire.) | |
| 11. Fissare i Processi Worker ai Core della CPU (worker_cpu_affinity auto;) (Migliora le prestazioni aumentando l'efficacia della cache della CPU (cache hit rate).) | |
| 12. Ottimizzare l'Invio di Pacchetti TCP (tcp_nopush on; e tcp_nodelay on;) (Invia i dati in modo efficiente in pacchetti completi e garantisce bassa latenza iniziale.) | |
| 13. Mettere in Cache i Descrittori di File Aperti (open_file_cache) (Evita di aprire e chiudere ripetutamente gli stessi file, riducendo le chiamate di sistema.) | |
| 14. Bilanciare gli Interrupt di Rete (IRQ Affinity) (Distribuisce il carico di elaborazione dei pacchetti di rete su più core della CPU.) | |
| 15. Scalabilità Architetturale (Load Balancing / CDN) (La scalabilità orizzontale è il modo definitivo per superare i limiti di una singola macchina.) | |
| Tier 2: Ottimizzazione Core NGINX e Kernel | |
| 16. Abilitare reuseport sulla Direttiva listen (Distribuisce le nuove connessioni in modo più efficiente tra i processi worker.) | |
| 17. Aumentare la Coda di Backlog (net.core.somaxconn e listen backlog) (Fornisce un buffer per gestire picchi di connessioni in arrivo senza scartarle.) | |
| 18. Abilitare HTTP/2 o HTTP/3 (QUIC) (Riducono la latenza e migliorano l'esperienza utente grazie al multiplexing.) | |
| 19. Abilitare e Ottimizzare il Caching delle Sessioni SSL/TLS (Riducono il carico sulla CPU riutilizzando i parametri delle sessioni TLS già negoziate.) | |
| 20. Abilitare i Session Ticket SSL/TLS (ssl_session_tickets on;) (Un'alternativa scalabile al session caching che non richiede stato condiviso tra server.) | |
| 21. Impostare la Dimensione dei Ring Buffer della NIC (ethtool -G) (Aumenta i buffer della scheda di rete per gestire picchi di traffico senza perdita di pacchetti.) | |
| 22. Disabilitare gli Access Log per i Segmenti Video (Elimina un'enorme quantità di I/O su disco inutile, migliorando le prestazioni.) | |
| 23. Usare un Buffer per gli Access Log, se Abilitati (Scrive i log su disco in blocchi, riducendo la frequenza e l'overhead delle operazioni di scrittura.) | |
| 24. Usare directio per VOD (con cautela) (Bypassa la page cache per i file "freddi", preservando la RAM per i contenuti "caldi".) | |
| 25. Ottimizzare le Sotto-Direttive di open_file_cache (Controlla finemente cosa e per quanto tempo viene tenuto nella cache dei file aperti.) | |
| 26. Mettere in Cache gli Errori sui File con open_file_cache_errors on; (Evita ripetute ricerche su disco per file che non esistono.) | |
| 27. Aumentare tcp_max_syn_backlog (net.ipv4.tcp_max_syn_backlog) (Migliora la gestione dei picchi di connessioni e la protezione da attacchi SYN flood.) | |
| 28. Abilitare il Receive Packet Steering (RPS) (Distribuisce via software il carico di elaborazione dei pacchetti su più CPU.) | |
| 29. Abilitare il Receive Flow Steering (RFS) (Indirizza i pacchetti di una connessione alla stessa CPU che esegue l'applicazione, per una migliore efficienza della cache.) | |
| 30. Usare epoll come Metodo per gli Eventi (Assicura l'uso del meccanismo di notifica I/O più efficiente e scalabile su Linux.) | |
| 31. Impostare il CPU Governor su performance (Forza la CPU a funzionare sempre alla massima frequenza per una latenza minima.) | |
| 32. Disabilitare gli Stati C della CPU nel BIOS/UEFI (Evita la latenza introdotta dal "risveglio" della CPU da stati di risparmio energetico.) | |
| 33. Ottimizzare le Connessioni Keep-Alive (keepalive_timeout e keepalive_requests) (Riduce l'overhead di handshake TCP/TLS per client che richiedono molti file in sequenza.) | |
| 34. Resettare le Connessioni in Timeout (reset_timedout_connection on;) (Libera le risorse di connessione in modo più rapido ed efficiente rispetto a una chiusura standard.) | |
| 35. Scegliere Cifrari SSL/TLS Efficienti (Utilizza cifrari moderni accelerati via hardware per ridurre il carico sulla CPU durante le operazioni crittografiche.) | |
| Tier 3: Tuning Avanzato I/O e SSL/TLS | |
| 36. Abilitare OCSP Stapling (ssl_stapling on;) (Accelera la connessione TLS iniziale del client, evitando una richiesta di verifica separata.) | |
| 37. Usare un Certificato/Chiave SSL Condiviso (Fa sì che NGINX carichi il certificato in memoria una sola volta, risparmiando un po' di RAM.) | |
| 38. Regolare il Timeout TCP FIN (net.ipv4.tcp_fin_timeout) (Pulisce più rapidamente le vecchie connessioni che sono in attesa di chiusura, liberando memoria.) | |
| 39. Abilitare il Riciclo TCP TIME-WAIT (net.ipv4.tcp_tw_reuse) (Permette di riutilizzare socket in stato TIME-WAIT, utile per evitare l'esaurimento delle porte.) | |
| 40. Ottimizzare l'Algoritmo di Controllo della Congestione TCP (BBR) (Offre un throughput migliore su reti con perdita di pacchetti o alta latenza.) | |
| 41. Regolare le Opzioni di Mount del Filesystem (noatime, nodiratime) (Disabilita gli aggiornamenti dei timestamp di accesso ai file, eliminando inutili operazioni di scrittura.) | |
| 42. Scegliere un Filesystem Appropriato (XFS o ext4) (XFS ha spesso un leggero vantaggio prestazionale per file di grandi dimensioni e alta concorrenza.) | |
| 43. Usare una Dimensione Maggiore per i Blocchi del Filesystem (Può migliorare le prestazioni per file video di grandi dimensioni riducendo l'overhead dei metadati.) | |
| 44. Disabilitare lo Swapping (vm.swappiness = 0 o 1) (Evita che il sistema scriva su disco (swap), operazione catastrofica per le prestazioni di un server di streaming.) | |
| 45. Ottimizzare aio_write per Stream Live in Proxy (Permette la scrittura asincrona nella cache senza bloccare la connessione del client.) | |
| 46. Regolare output_buffers (Controlla la dimensione dei buffer usati per leggere la risposta dal disco; un tuning marginale.) | |
| 47. Dimensione di sendfile_max_chunk (Imposta la quantità massima di dati inviati in una singola chiamata sendfile(), riducendo le chiamate di sistema.) | |
| 48. Comprimere (Gzip) Solo i Manifest (Non comprimere mai i segmenti video, è un enorme spreco di CPU per nessun beneficio.) | |
| 49. Utilizzare limit_conn e limit_req per Protezione (Protegge il server da client abusivi, riservando le risorse per gli utenti legittimi.) | |
| 50. Implementare il Caching dei Segmenti HLS/DASH (Se NGINX agisce da proxy, mettere in cache i segmenti video riduce il carico sull'origine.) | |
| 51. Usare Blocchi location Specifici (Permette di applicare impostazioni ottimizzate e diverse per manifest e segmenti video.) | |
| 52. lingering_close e lingering_timeout (Gestisce più efficientemente la chiusura delle connessioni da parte di client anomali.) | |
| 53. client_max_body_size 0; per l'Ingest Live (Rimuove il limite sulla dimensione del corpo della richiesta per permettere flussi di ingest continui.) | |
| 54. Installare e Usare libjemalloc o tcmalloc (Allocatori di memoria ad alte prestazioni che possono ridurre la frammentazione e migliorare le prestazioni della CPU.) | |
| 55. Disabilitare Moduli NGINX Inutili (Crea un eseguibile NGINX più piccolo e leggermente più veloce se compilato da sorgente.) | |
| Tier 4: Tuning Granulare di Sistema e CPU | |
| 56. Comprendere e Ottimizzare per NUMA (Mantiene processi, memoria e NIC sullo stesso socket della CPU per evitare accessi lenti alla memoria remota.) | |
| 57. Aumentare net.core.netdev_max_backlog (Aumenta la coda per i pacchetti in ingresso, prevenendo perdite durante picchi di traffico.) | |
| 58. Disabilitare il Kernel Samepage Merging (KSM) (Disattiva una funzione di de-duplica della memoria che consuma cicli di CPU non necessari in questo scenario.) | |
| 59. Aumentare vm.max_map_count (Aumenta il numero massimo di aree di mappa di memoria per un processo, richiesto da alcune configurazioni.) | |
| 60. Regolare le Soglie di Scrittura delle Dirty Page (Controlla quando il kernel scrive su disco i dati modificati in memoria; utile per l'ingest.) | |
| 61. Disabilitare i Servizi di Sistema Inutilizzati (Libera CPU e memoria disattivando tutto ciò che non è essenziale per lo streaming.) | |
| 62. Usare un Kernel Real-time o a Bassa Latenza (Avanzato) (Può fornire tempi di risposta più consistenti, anche se potrebbe ridurre leggermente il throughput grezzo.) | |
| 63. Usare le Huge Pages per la Memoria (Riduce l'overhead della gestione della memoria migliorando le prestazioni della cache TLB.) | |
| 64. Disabilitare l'Hyper-Threading (Dipendente dai Test) (Per alcuni carichi di lavoro, usare solo core fisici può dare prestazioni migliori; richiede benchmark.) | |
| 65. Linkare Staticamente NGINX con OpenSSL (Assicura l'uso di una versione specifica e ottimizzata della libreria crypto, migliorando le prestazioni TLS.) | |
| 66. Regolare tcp_keepalive_time, _intvl, _probes (Aiuta il server a rilevare e chiudere più rapidamente le connessioni "morte", liberando risorse.) | |
| 67. Abilitare l'Opzione Socket SO_TIMESTAMP (Utile per analisi approfondite delle performance e per diagnosticare problemi di latenza.) | |
| 68. Usare io_uring (Orientato al Futuro) (Una nuova interfaccia I/O asincrona di Linux che promette prestazioni superiori a epoll e aio.) | |
| 69. Regolare le Impostazioni di Entropia del Kernel (Assicura che ci sia abbastanza casualità per la generazione veloce di chiavi SSL/TLS.) | |
| 70. Disabilitare le Mitigazioni per Spectre/Meltdown (Alto Rischio) (Può recuperare prestazioni della CPU a costo di un rischio di sicurezza significativo.) | |
| 71. Impostare txqueuelen della NIC (Regola la dimensione della coda di trasmissione della scheda di rete.) | |
| 72. Usare la Direttiva multi_accept on; (Permette a un worker di accettare quante più nuove connessioni possibili in una sola volta.) | |
| 73. Impostare la Dimensione dell'Hash Bucket per gli Header (server_names_hash_bucket_size) (Accelera la ricerca del server name corretto se ce ne sono molti.) | |
| 74. Impostare la Dimensione Massima dell'Hash per gli Header (server_names_hash_max_size) (Permette una tabella hash più grande per un numero molto elevato di server name.) | |
| 75. Compilare NGINX con -O2 o -O3 e -march=native (Applica ottimizzazioni aggressive del compilatore specifiche per l'architettura della CPU.) | |
| Tier 5: Ottimizzazioni Operative e Specifiche per il Contenuto | |
| 76. Ottimizzare la Dimensione dei Segmenti Video (Trova un equilibrio tra bassa latenza all'avvio ed efficienza del trasferimento.) | |
| 77. Usare lo Streaming a Bitrate Adattivo (ABR) (Migliora l'esperienza utente permettendo ai client di scegliere la qualità adatta alla loro rete.) | |
| 78. Pre-generare il Contenuto VOD (Evita la transcodifica "on-the-fly" che consuma enormi risorse di CPU e aggiunge latenza.) | |
| 79. Implementare un Monitoraggio Robusto (Non puoi ottimizzare ciò che non puoi misurare; è essenziale per identificare i colli di bottiglia.) | |
| 80. Usare eBPF per Analisi Approfondite delle Prestazioni (Permette un'ispezione a basso overhead del kernel e delle applicazioni per diagnosticare problemi complessi.) | |
| 81. Usare Strumenti di Monitoraggio Per-Core (Permette di vedere se un singolo core è al 100% invece di guardare solo l'uso medio della CPU.) | |
| 82. Usare Strumenti di Monitoraggio I/O e di Rete (Fornisce visibilità in tempo reale su quali processi stanno utilizzando disco e banda.) | |
| 83. Eseguire una Pianificazione Regolare della Capacità (Capacity Planning) (Prevedi quando raggiungerai i limiti hardware attuali per scalare in anticipo.) | |
| 84. Implementare Header di Caching (Expires, Cache-Control) (Indica a browser e proxy per quanto tempo possono memorizzare i contenuti, riducendo le richieste.) | |
| 85. Usare HSTS (add_header Strict-Transport-Security) (Risparmia la latenza di un reindirizzamento da HTTP a HTTPS.) | |
| 86. Separare Contenuti Dinamici e Statici (Evita che un backend lento possa bloccare i worker dedicati alla distribuzione video.) | |
| 87. Mantenere Aggiornati Sistema e NGINX (Gli aggiornamenti spesso contengono correzioni di sicurezza e miglioramenti delle prestazioni.) | |
| 88. Eseguire Regolari Test di Carico (Load Test) (L'unico modo per verificare le modifiche e trovare il punto di rottura del server.) | |
| 89. Scrivere un nginx.conf Leggibile e Manutenibile (Una configurazione ben organizzata riduce gli errori e facilita la gestione delle modifiche.) | |
| 90. Disabilitare IPv6 se Inutilizzato (Libera una piccola quantità di risorse del kernel se la tua rete è solo IPv4.) | |
| 91. Considerare i Thread Pool per Altre Operazioni Bloccanti (Scarica operazioni bloccanti (diverse dalla lettura di file) su thread separati per non bloccare il loop principale.) | |
| 92. Regolare il Buffer di Log (log_buffers) ((NGINX Plus) Fornisce un controllo più fine sul buffering dei log di errore.) | |
| 93. Sincronizzare l'Ora con NTP (Un tempo accurato è cruciale per il logging e il debug in ambienti distribuiti.) | |
| 94. Usare error_page per la Gestione Personalizzata degli Errori (Migliora l'esperienza utente e previene tentativi ripetuti su link non validi.) | |
| 95. Servire Manifest Pre-compressi (gzip_static on;) (Serve un file .gz già pronto invece di comprimerlo al volo, risparmiando CPU.) | |
| 96. Minimizzare le Espressioni Regolari nei Blocchi location (La corrispondenza di prefissi è meno intensiva per la CPU rispetto alle espressioni regolari.) | |
| 97. Minimizzare l'Uso delle Istruzioni if (La direttiva if in NGINX può avere comportamenti inattesi ed è meno performante di un map.) | |
| 98. Disabilitare i Server Token (server_tokens off;) (Risparmia pochi byte per richiesta e migliora la sicurezza nascondendo la versione di NGINX.) | |
| 99. Automatizzare il Deployment della Configurazione (L'automazione con strumenti come Ansible garantisce coerenza e riduce gli errori umani.) | |
| 100. Documentare Tutto (Documenta il "perché" di ogni modifica per facilitare il debug futuro e la gestione del sistema.) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment