2013-02-05 29 views
11

Sto usando pycurl come back-end per la libreria Python boto. È molto veloce e versatile, ma ho il problema che gli upload di grandi file spesso falliscono al reset della connessione. Quando uso il semplice boto con lo standard httplib, è molto più affidabile.S3 Upload con interrupt pycurl

Quello che ho trovato usando Wireshark è che dopo un po '(o qualche volta anche piuttosto presto), la mia macchina smette di ricevere ACK da S3, quindi ripristina la connessione. Sembra quasi che lo pycurl sia così veloce da soffocare la connessione. E se accelero il caricamento (utilizzo l'interfaccia multipla) o utilizzo una connessione internet più lenta, il caricamento funziona correttamente.

Mi chiedo ancora cosa avrei potuto fare di sbagliato.

Ho anche provato a caricare con .NET S3 SDK. È circa 3 volte più lento, ma ha successo. Inoltre, è tutto su Windows 7, la macchina OS X sulla stessa rete carica di nuovo molto più lentamente, ma in modo affidabile.

+1

Suoni come il driver NIC in Windows sta soffocando. Ho visto questo comportamento anche in altre applicazioni. Le prove aneddotiche affermano che disattivare le varie opzioni di offload TCP nel driver potrebbe aiutare. – nikola

risposta

3

Dato che hai menzionato il problema su Windows 7, puoi eseguire un prompt dei comandi come amministratore e pubblicare i risultati di netsh int tcp show global? Si dovrebbe vedere qualcosa di simile al seguente:

TCP Global Parameters 
---------------------------------------------- 
Receive-Side Scaling State   : enabled 
Chimney Offload State    : automatic 
NetDMA State      : enabled 
Direct Cache Acess (DCA)   : disabled 
Receive Window Auto-Tuning Level : normal 
Add-On Congestion Control Provider : none 
ECN Capability      : disabled 
RFC 1323 Timestamps     : disabled 

Si consiglia di copiare/incollare i risultati in un file txt per rendere nota delle impostazioni correnti. Le impostazioni che ti interessano sono Chimney Offload, Receive-Side Scaling (RSS) e NetDMA. Queste sono tutte funzionalità che tentano di scaricare l'elaborazione da/verso la NIC o la CPU e possono a volte causare problemi con sintomi simili a quelli che hai descritto.

Prima di scherzare con RSS o NetDMA, proverei a disattivare Chimney Offload eseguendo netsh int tcp set global chimney=disabled e disabilitando TCP offload in Device Manager > Network Adapters > Advanced tab.

Se ciò non risolve il problema, potrebbe essere necessario sperimentare con le altre due opzioni. Ecco uno Microsoft KB article con dettagli sulla modifica di tutti loro.

+0

Grazie, sembra interessante, ma sfortunatamente, non posso verificarlo ora, perché qualcosa è cambiato sul mio posto di lavoro e gli upload sono sempre piuttosto lenti ma costanti. Ma mi sto ancora chiedendo come mitigare questo problema nel mio SW ... –