Team: Windows Platform Türkiye

Microsoft Türkiye Kurumsal Teknik Destek ekibinde görev yapan mühendislerin bilgilerini yazıya döktükleri bir ortam

Windows XP client'ların dosya kopyalarken yaşadıkları bir performans problemi üzerine

Windows XP client'ların dosya kopyalarken yaşadıkları bir performans problemi üzerine

  • Comments 3
  • Likes

Merhaba,

Ben Windows Platform Türkiye ekibinden Murat. Bugün sizlerle, çalıştığım bir network probleminde nasıl çözüme ulaştığımı paylaşmak istiyorum.

Üzerinde çalıştığım problemde, Windows XP client'lar NAS (Network attached Storage) server'a çok yavaş dosya kopyalıyorlardı. Özellikle bu tür sorunlar pek çok farklı nedenden kaynaklanabiliyor ve en önemli sorun giderme araçlarından birisi de Network Monitoring araçları. Başka blog'lar da bu konunun daha da ayrıntısına ayrıca gireceğiz.

Tekrar soruna dönecek olursak, problemin nedenini daha iyi anlayabilmek için bir test client üzerinde network trace toplayıp problemi tekrar oluşturduk ve sonra bu network trace'in analizini yaptık. İsterseniz şimdi biraz bunun ayrıntılarına bakalım:

Windows networklerde dosya kopyalama işlemi genellikle SMB protokolü üzerinden gerçekleştiriliyor. Windows 2000, XP ve 2003 sistemler SMBv1 kullanabilirken, Windows Vista, Windows server 2008 ve release olmak üzere olan Windows 7/Windows 2008 R2 sistemler ise hem SMBv1 hem de SMBv2 protokollerini kullanabilirler. Bizim sorunumuzda client taraf Windows XP olduğu için SMBv1 protokolü kullanılıyordu. SMBv1 protokolünde client, dosyayi SMB Create AndX komutu ile server üzerinde yarattıktan sonra (ya da mevcut bir dosyayı açtıktan sonra), ya SMB Read AndX komutlarıyla (eğer dosya server'dan client'a kopyalaniyorsa) ya da SMB Write AndX komutlarıyla (eğer dosya client'dan server'a kopyalanıyorsa), dosyayı server'a kopyalar (ya da server'dan kopyalar). Bizim senaryomuzda client dosyayı server'dan kopyalıyordu. Buna gore aşağıdaki adımlar gerçekleşecektir:

Client                                       Server
SMB Create AndX request ---->
                                          <---- SMB Create AndX response

SMB Read AndX request   ----> (61440 bytes)
                                          <---- SMB Read AndX response


SMB Read AndX request   ----> (61440 bytes)
                                          <---- SMB Read AndX response


SMB Read AndX request   ----> (61440 bytes)
                                          <---- SMB Read AndX response


SMB Read AndX request   ----> (61440 bytes)
                                          <---- SMB Read AndX response


Not: SMBv1 protokolünde client bir seferde server'dan en fazla 61440 byte'lık data isteyebilir.

Aşağıda, problem anında toplanan trace'den bir alıntı görebiliriz:

Frame#   Time delta           Source IP               Destination IP     Protocol  Information
=====   ========     =========           ==========     ======  ========
....
59269    0.000000              10.1.1.1                10.1.1.2                SMB       Read AndX Request, FID: 0x0494, 61440 bytes at offset 263823360
59270    0.000000              10.1.1.2                10.1.1.1                SMB       Read AndX Response, 61440 bytes
59271    0.000000              10.1.1.2                10.1.1.1                TCP        [Continuation to #59270] microsoft-ds > foliocorp [ACK] Seq=65993793
59272    0.000000              10.1.1.2                10.1.1.1                TCP        [Continuation to #59270] microsoft-ds > foliocorp [ACK] Seq=65995249
59273    0.000000              10.1.1.2                10.1.1.1                TCP        [Continuation to #59270] microsoft-ds > foliocorp [ACK] Seq=65996705
...
59320    0.000000              10.1.1.2                10.1.1.1                TCP        [Continuation to #59270] microsoft-ds > foliocorp [ACK] Seq=66049121
59321    0.000000              10.1.1.2                10.1.1.1                TCP        [Continuation to #59270] microsoft-ds > foliocorp [ACK] Seq=66050577
59322    0.000000              10.1.1.2                10.1.1.1                TCP        [Continuation to #59270] microsoft-ds > foliocorp [ACK] Seq=66052033
59323    0.000000              10.1.1.1                10.1.1.2                TCP        foliocorp > microsoft-ds [ACK] Seq=67600 Ack=66053489 Win=65535
59325    0.406250            10.1.1.2                10.1.1.1                TCP       [Continuation to #59270] microsoft-ds > folioc [PSH, ACK]Seq=66053489

59326    0.000000              10.1.1.1                10.1.1.2                SMB       Read AndX Request, FID: 0x0494, 61440 bytes at offset 263884800
59327    0.000000              10.1.1.2                10.1.1.1                SMB       Read AndX Response, 61440 bytes
59328    0.000000              10.1.1.2                10.1.1.1                TCP        [Continuation to #59327] microsoft-ds > foliocorp [ACK] Seq=66055297
...

Frame# 59269 => Client, FID: 0x0494 olan dosyanın (FID, dosya client tarafından açılırken, server tarafından atanan bir numaradır), 263823360. byte'indan itibaren 61440 byte okumak istediğini server'a bildiriyor
Frame# 59270 => Server, 61440 byte'lık data'yı client'a göndermeye başlıyor.
Frame# 59271 => 61440 byte'lık data'nın yaklaşık ilk 1440 byte'lık bölümü frame# 59270'de gönderildikten sonra, geri kalan kısımları da bu frame ve takip eden diğer frame'lerde gönderiliyor
Frame# 59272 => Data'nın yaklaşık 1460 byte'lık kısmı
Frame# 59273 => Data'nın yaklaşık 1460 byte'lık kısmı
..

Benim için bu aktivite içerisinde dikkat çeken şey, frame# 59325'de görülen yaklaşık 0.4 saniyelik gecikmeydi. ("Time Delta" sütunu, iki frame arasindaki zaman farkını saniye cinsinde gösteriyor)

Network trace içinde yer alan paketleri "Time delta" sütununa göre sıraladığımda, bu tür 0.4 saniyelik gecikmenin her 61440 byte'lık data blogu kopyalanirken oluştuğunu farkettim.

Normalde 0.4 saniye çok kısa bir zaman gibi gözükse de bir dosyayı kopyalarken yüzlerce SMB Read AndX gönderilmesi gerekebileğini düşündüğümüzde bunun ciddi bir problem haline gelebileceği çok net gözüküyor.

Normalde network trace'ler içinde gördüğümüz gecikmeler paket kaybı, karşı sistemden kaynaklanan performans sorunları, NIC driver problemleri gibi muhtelif nedenlerden kaynaklanabilir. Ancak düzenli olarak 0.4 saniyelik bir gecikme görüyor olmak, başka bir şeyden şüphelenmeme neden oldu: QoS

QoS (Quality of service), network üzerinde muhtelif politikalara göre data akışına müdahale edilmesini sağlayan dolayısıyla daha önemli görülen trafiğin
önceliklendirilmesini sağlayan bir mekanizma. Ve bugün, pek çok ağ cihazı (switch/router/vs) ve Windows işletim sistemleri QoS uygulamalarını destekliyor.
Müşterimize kendi network'lerinde bu tür bir QoS politikasının uygulanmış olma ihtimalinden bahsettikten sonra, müşterimiz, gerçekten kendi ağ cihazları
üzerinde QoS uygulandığını ve bu kapatıldıktan sonra problemin çözüldüğünü söyledi.

Teşekkürler,

Murat Kayacan


 

Comments
  • Murat bey çok teşekkürler bilgi için...

  • Teşekkürler.

  • Teşekkürler.

Your comment has been posted.   Close
Thank you, your comment requires moderation so it may take a while to appear.   Close
Leave a Comment