2014-07-11 21 views
12

Yerel bir ağ üzerinden bir FTP sunucusuna çok sayıda veri (~ 100 dosya X 2GB) aktarmak için python'un ftplib'sini kullanıyorum. Bu kod Ubuntu'da çalışıyor.Python ftplib Optimal Blok Boyutu?

# Store file.  
self.ftpClient.storbinary('STOR ' + destination, fileHandle, blocksize = self.blockSize, callback = self.__UpdateFileTransferProgress) 

Benim sorum ben optimal blok boyutunu seçmek, nasıl: İşte benim kararım (öz ftplib istemci etrafında sarıcı benim FtpClient nesnesidir)? Benim anlayışım, optimal blok büyüklüğünün, en azından bağlantı hızı ve gecikme olmaksızın, bir dizi şeye bağlı olmasıdır. Kodum, gün boyunca farklı hızlarda ve değişen miktarlarda tıkanıklıkla birçok farklı ağda yayınlanacak. İdeal olarak, çalışma zamanında optimal blok boyutunu hesaplamak istiyorum.

En uygun FTP aktarım bloğu boyutu en uygun TCP pencere boyutuyla aynı mı? Bu doğruysa ve TCP pencere ölçeklendirme açıksa, çekirdekten en uygun TCP pencere boyutunu elde etmenin bir yolu var mı? Linux çekirdeği en uygun pencere boyutunu nasıl/ne zaman belirler? İdeal olarak, tekerleği yeniden icat etmekten kaçınmak için linux çekirdeğini optimal blok boyutu için sorabilirdim. http://erlerobotics.gitbooks.io/erle-robotics-python-gitbook-free/content/udp_and_tcp/udp_fragmentation.html

Ama, ayrıca düşünmek gerekir:;

+0

http://moo.nac.uci.edu/~hjm/HOWTO_move_data.html

sadece benim iki sent bir göz olmalıdır : //en.wikipedia.org/wiki/Nagle%27s_algorithm). Ayrıca 'TCP_CORK' seçeneğini de ayarlamayı düşünebilirsiniz. – Phillip

+0

Burada ne tür bir eşzamanlılık bekliyorsunuz veya kullanıyorsunuz? Bunun tek iş parçacıklı bir uygulama olması amaçlanmış mı? Çoklanmış Asenkronize I/O'dan yararlanabilir misiniz? –

cevap

7

bu ilginç bir soru ve ben biraz daha derin dalmaya vardı) Neyse

, burada MTU nasıl belirleneceği iyi bir örnektir Takip eden: MTU, yerel bir olay olan ve belki de yerel ağınızın sadece bir parçası olan bir şeydir. Ne düşündüğünüz, Yol MTU'su, tam taşıma yolunda en az MTU. http://en.wikipedia.org/wiki/Path_MTU_Discovery Yani, her ilgili bileşenin her MTU'sunu bilmelisiniz. Bu bir sorun olabilir, örneğin Jumbo Çerçeveleri ve bir anahtar kullanmıyorsanız, anahtarın kareleri bölmesi gerekir. Bir anahtarın jumbo çerçevelerini anlamadığı ve çerçeveleri düşürdüğü sorunu zaten vardı.

Şimdi en ilginç soru: optimal blok boyutu. Bir çok python işlevi, blok boyutu veya parçalanma gibi argümanları alır. Ancak, temel taşıma protokolünün blok boyutuna değinmiyorlar. Blok boyutu, gönderilecek/okunacak verileri içerecek bir okuma tamponu tanımlar. Ftplib'deki standart boyut 8K'dir (8192 bayt). Dolayısıyla, blok boyutunu ayarlamak, transfer hızını gerçekten etkilememelidir. altta yatan ulaşım protokolünün MTU Kontrol

işletim sistemi ve onun çekirdek tarafından ele alınacaktır şeydir.

Son olarak, ftp ile ilgili bazı kelimeler. ftp kurulumu ve kullanımı kolay eski bir dinozordur, ancak dosyaları aktarmak için her zaman en iyi yöntem değildir. Özellikle çok sayıda küçük dosya aktarırsanız. Tam olarak kullanım durumunuzu bilmiyorum, bu yüzden rsync veya bbcp gibi diğer transfer protokol alternatiflerini düşünmek mantıklı olabilir. Daha sonra kopya hızını büyük ölçüde arttırır. Gerçekten http (i/o g/ç [çekirdek sizin için halleder] diskten daha yavaştır ... ağa sürece