volevo segnalarvi un bug (presumo software) di Mac che ho riscontrato con diverse combinazioni hardware e software.
Già segnalato anche ad Apple in modo molto dettagliato su form apposito e anche su Bug reporter due mesi fa, ma non ho mai avuto risposte.
Il problema riguarda l'instabilità della rete (cablata) quando si utilizza un MTU superiore al classico 1500 bytes (comunemente chiamato Jumbo Frames) ed è piuttosto assurdo.
Perché MTU superiore a 1500
Dunque, senza stare a scendere troppo nel tecnico di come funziona una rete, il layer 3, ecc...
il concetto è che con la velocità della rete gigabit, in caso di alto throughput (es. backup in corso, trasferimento di dati, ecc..) si va ad aumentare il carico CPU per gestire l'elevato numero di pacchetti (cosa più vera in passato rispetto ad ora, quando le schede di rete non facevano offload tramite buffer ed algoritmi, ma comunque presente in certe situazioni).
Quindi ad esempio, se sto trasferendo un file grosso da un NAS al mio computer, mi troverò un processo "kernel_task" che mi occupa 30-40% di un thread (su iMac 5K con cpu i7). Su questa macchina la faccenda non è rilevante, ma finché avevo il Mac Mini, il carico era moooolto più marcato.
Portando l'MTU a valori più elevati, il carico sulla CPU diminuisce sensibilmente (perché chiaramente il mio dato in transito dovrà essere "spezzato" in molti meno pacchetti).
Quindi è una cosa utile solo in particolari situazioni e con particolari condizioni. Ad esempio: tutti i device dello stesso segmento di rete devono avere lo stesso MTU impostato (oltre a supportarlo, ovviamente) perché il tutto funzioni senza problemi.
Suggerisco di evitare sperimentazioni, se non sapete bene cosa state facendo, perché potreste trovarvi "problemi inspiegabili" più avanti
Setup jumbo frame su Mac
Ve lo descrivo nel caso qualcuno abbia avuto esperienze analoghe.
Su Mac è possibile impostare un MTU dal pannello "Hardware" della configurazione di rete. Dopo di che, si può verificare il corretto funzionamento da Terminale con il comando "ping".
Codice: Seleziona tutto
ping -D -s <packet size> <destinazione>
Esempio del risultato verso il mio nas, prima con packet size giusto per rete standard a 1500 bytes di MTU, dopo con un byte in più:
Codice: Seleziona tutto
edo@eMac:~> ping -D -s 1472 nas.local
PING nas.local (10.0.1.3): 1472 data bytes
1480 bytes from 10.0.1.3: icmp_seq=0 ttl=64 time=0.427 ms
1480 bytes from 10.0.1.3: icmp_seq=1 ttl=64 time=0.457 ms
edo@eMac:~> ping -D -s 1473 nas.local
PING nas.local (10.0.1.3): 1473 data bytes
ping: sendto: Message too long
ping: sendto: Message too long
Request timeout for icmp_seq 0
ping: sendto: Message too long
Request timeout for icmp_seq 1
Bene, veniamo ora al problema.
Avevo impostato correttamente tutta la rete per MTU elevato e tutto funzionava correttamente tra ogni singolo apparato.
Dopo diverse settimane di utilizzo, mi trovo un giorno con il Mac mini (che avevo prima) che non naviga più e non da segni di vita sulla scheda di rete.
Disattivo-riattivo e torna a funzionare, poi dopo qualche ora crolla nuovamente.
Dopo varie prove, sembra che mantenendo un terminale con un ping sempre attivo, la cosa si stabilizzi.
Dopo diverso tempo di prove e questo problema che si ripresenta in maniera del tutto casuale (senza alcuna correlazione con uptime o carico sulla rete), scopro che il tutto è relazionato al settaggio di un MTU più elevato del 1500 bytes standard!
A questo punto ho fatto una serie di prove man mano che cambiava qualcosa (versioni di OS X, e passaggio da Mac Mini mid 2011 al nuovo iMac), ma niente... il comportamento è sempre il medesimo.
Appena preso il nuovo iMac ho fatto una serie di test a macchina totalmente pulita, appena installata.. stesso comportamento.
- Attivo MTU superiore a 1500
- Riconnessione perfetta alla rete, recupero indirizzo da DHCP ok, test di trasferimenti a piena banda perfetti
- Dopo un certo lasso di tempo (casuale e variabile), rete morta
Per "rete morta" intendo che il sistema operativo sembra non accorgersi affatto della disconnessione (sia da preferences, sia con comando "ifconfig") e non da alcun log strano in console.
Disabilitando e riabilitando la rete, la stessa riprende a funzionare per qualche istante e poi muore nuovamente.
Qua lo screenshot del terminale, dove si nota che l'OS sembra non accorgersi del problema: (primo comando dato a rete funzionante, secondo comando dato dopo qualche secondo che non era più funzionante)
Le prove sono state fatte con diverse configurazioni hardware:
- Mac Mini - Mid 2011 (Macmini5,2)
- iMac 5K - Late 2015 (iMac17,1)
...con diversi OS:
- Sierra (10.12.3)
- El capitan, quasi tutti i minor updates
Da quanto ricordo, mi pare non succedesse con Yosemite o versioni precedenti, ma non sono sicuro
e con diversi switch di rete:
- Cisco Catalyst 3560G-24TS
- ZyXEL GS108B
- D-Link DGS-1008D
- D-Link DGS-1005D
ed anche con diversi cablaggi..tanto per essere sicuri
Qualcuno ha mai avuto problemi analoghi?
(oddio...bisognerebbe prima trovare qualcuno che abbia mai avuto esigenze simili in effetti... )
Ciao,
Edo