Newsgroup: it.comp.reti.locali
Titolo: Socket TCP che stallano... AIUTO!

Ragazzi qua ho un problemone...
Abbiamo un server "Storage" Linux che fa da fileserver Samba, SCP e 
SFTP. Tutti i client sono Windows: XP e Vista, 32 e 64bit. La rete del 
palazzo � gigabit. Trasferiamo anche molti TB di dati per volta.
Abbiamo provato da vari client allo stesso Server e c'� sempre lo stesso 
problema: dopo ore che va un trasferimento la socket improvvisamente va 
in stallo: 0 bytes/sec trasferiti. Non � che rallenta: va in stallo di 
colpo.
Da quel momento la socket TCP rimane cos� in stallo per sempre ed 
entrambi i lati la vedono ancora attiva (Established) per sempre.
Succede con qualunque protocollo (Samba, SCP, SFTP) e qualunque client.
Succede anche nel mezzo del trasferimento di un file e non al cambio di 
file.
Se il protocollo � Samba quello che succede � ancora un po' pi� strano: 
se ci sono due o pi� trasferimenti in atto fra lo stesso client e il 
server (notare che in questo caso con Samba tutti i trasferimenti 
passano attraverso alla stessa socket TCP) stallano indipendentemente 
l'uno dall'altro. La socket quindi funziona... posso anche interrompere 
il trasferimento piantato e farlo ripartire ed � sempre sulla stessa socket.
Il server � un linux Ubuntu 9.10 kernel ubuntu 2.6.31-14-server . Le 
ethernet sono le due Intel integrate nella mainboard (ho provato entrambe):
Ethernet controller: Intel Corporation 80003ES2LAN Gigabit Ethernet 
Controller (Copper) (rev 01)
Il driver � l'e1000 del kernel.
Questo � lo stack trace dei processi server durante uno stallo di SFTP:
root       327  [CUT] \_ sshd: miouser [priv]
1011       380  [CUT]     \_ sshd: miouser
1011       382  [CUT]         \_ /usr/lib/openssh/sftp-server
root@mystorage:/proc# cat /proc/327/stack   (questo � sshd)
[<ffffffff814b428a>] unix_stream_data_wait+0xaa/0x110
[<ffffffff814b50cd>] unix_stream_recvmsg+0x36d/0x570
[<ffffffff81426399>] sock_aio_read+0x149/0x150
[<ffffffff8111e232>] do_sync_read+0xf2/0x130
[<ffffffff8111e8e1>] vfs_read+0x181/0x1a0
[<ffffffff8111edec>] sys_read+0x4c/0x80
[<ffffffff81011fc2>] system_call_fastpath+0x16/0x1b
[<ffffffffffffffff>] 0xffffffffffffffff
root@mystorage:/proc# cat /proc/380/stack   (questo � il secondo sshd)
[<ffffffff8112e644>] poll_schedule_timeout+0x34/0x50
[<ffffffff8112ef4f>] do_select+0x58f/0x6b0
[<ffffffff8112f8b5>] core_sys_select+0x185/0x2b0
[<ffffffff8112fc32>] sys_select+0x42/0x110
[<ffffffff81011fc2>] system_call_fastpath+0x16/0x1b
[<ffffffffffffffff>] 0xffffffffffffffff
root@mystorage:/proc# cat /proc/382/stack (questo � sftp-server)
[<ffffffff8112e644>] poll_schedule_timeout+0x34/0x50
[<ffffffff8112ef4f>] do_select+0x58f/0x6b0
[<ffffffff8112f8b5>] core_sys_select+0x185/0x2b0
[<ffffffff8112fc32>] sys_select+0x42/0x110
[<ffffffff81011fc2>] system_call_fastpath+0x16/0x1b
[<ffffffffffffffff>] 0xffffffffffffffff
come si vede sembra tutto normale, sembra che la socket sia 
semplicemente in attesa di dati...
Se vedessi solo il caso Samba direi che c'� un bug nello stack TCP di 
Linux o nel driver e1000, che probabilmente rimanda al client un Ack 
senza payload e quindi la socket funziona ma lo strato applicativo non 
vede conferma dei dati mandati e non manda i successivi... Per� nel caso 
SFTP secondo me lo stesso ack � sufficiente per i client perch� spingano 
dentro i nuovi dati nella socket, cosa che invece non succede. 
D'altronde se non arrivasse l'ack la connessione cadrebbe... e invece 
non cade!!
Insomma non ci capisco niente e non so dove sbattere la testa. E fra un 
po' i capi mi fanno il *ulo :-(((((
Vi do anche questo:
Socket di SFTP, quando va: (lato server)
# cat /proc/net/tcp
    2: 0F12A8C0:0016 2612A8C0:C0C6 01 00000000:00000000 02:000AB698 
00000000     0        0 267816 4 ffff88084b1e6180 24 4 1 11 -1
Pi� tardi, quando � andata in stallo gi� da un po':
# cat /proc/net/tcp
    2: 0F12A8C0:0016 2612A8C0:C0C6 01 00000000:00000000 02:0002AC6B 
00000000     0        0 267816 2 ffff88084b1e6180 27 4 1 21 -1
Se guardate gli ultimi valori... sono molto simili! Si sono allungati 
solo un po' i timeout e la window.
Questa � la pagina dove � spiegato cosa sono questi valori:
http://www.mjmwired.net/kernel/Documentation/networking/proc_net_tcp.txt
Grazie per qualunque aiuto

 po' i capi mi fanno il *ulo :-(((((
Potrebbe essere un bug del kernel, ubuntu ha questa mania di usare 
sempre l'ultimo disponibile :-)
Prova un altro kernel e/o un altro driver per la scheda di rete e/o una 
scheda di rete diversa.
Ciao.
-- 
Pubblicita' regresso: 
http://www.ferrero.org
** Per scrivermi in mail, sostituire nutella con ferrero...
** To contact me by email, change nutella to ferrero...