[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Midnight Commander + file(1) sorunu



Merhaba,

Bir kaç zamandır dikkatimi çeken bir sorunla bugün ilgilenme fırsatı
buldum.  Benzer sorundan muzdarip olanlara da yararlı olabilir düşüncesiyle
buraya yazayım dedim.

Midnight Commander, nam-ı diğer "mc" sık kullandığım bir programdır.  Bu
sık kullandığım programda en sık yaptığım işlem de F3 (veya Enter) tuşu ile
dosyalara bakmak veya F4 ile düzenlemek.  Gel gelelim makinede tam tarihini
hatırlayamadığım bir güncellemeden beri mc'deki bu göz atma ve düzenleme
işlemlerinde, özellikle büyük dosyalarda, olağanüstü bir yavaşlık oluyordu.
Örnek vermem gerekirse, 170K civarı bir dosyaya (1.4GHz'lik Pentium M
işlemcili makinede) F3 ile bakınma işlemi yaklaşık 9 sn sürüyordu.

strace(1) ile programın ne iş çevirdiğini inceledim ve bu bakınma/düzenleme
işlemlerinde mc'nin dosya tipini tayin etmek için file(1) komutunu fork
ettiğini farkettim.  Yani (en azından bu makinede) sorun file(1) komutunda:

        $ du -h iri.tex
        172K    iri.tex

        $ file --version
        file-4.21
        magic file from /etc/magic:/usr/share/file/magic

        $ time file iri.tex
        iri.tex: LaTeX 2e document text

        real    0m9.232s
        user    0m8.865s
        sys     0m0.016s

Görüldüğü gibi file(1) kararını ~9 s'de veriyor!  Süreç zamanı ağırlıklı
olarak "user" tarafında olduğundan bunun çekirdek ile alakalı olmadığını
düşünebiliriz.  Sorun Türkçe'ye özel mi?

        $ (export LC_ALL=en_US.UTF-8; time file iri.tex)
        iri.tex: LaTeX 2e document text

        real    0m3.190s
        user    0m3.092s
        sys     0m0.008s

Biraz öyle görünüyor.  Devam edelim...

        $ (export LC_ALL=C; time file iri.tex)
        iri.tex: LaTeX 2e document text

        real    0m0.076s
        user    0m0.060s
        sys     0m0.000s

Sonuç:

        $ echo "9.232/0.076" | bc
        121

121 katlık bir fark!  Öyle anlaşılıyor ki file(1)'ın bu yeni sürümlerinde
öncelikle UTF8 ile alakalı ve Türkçe işin içine girdiğinde katmerleşen bir
sorun var.  Burada verdiğim rakamları (mümkünse farklı dağıtımlarda) siz de
doğrularsanız memnun olurum, hata raporu geçmeden önce emin olalım.  Geçici
bir çözüm olarak aşağıdaki adımları uyguladım:

        $ cp /usr/bin/file /usr/bin/file.exec
        $ cat >/usr/bin/file
        #!/bin/sh
        LC_ALL=C exec /usr/bin/file.exec "$@"
        (bu noktada Ctrl-D tuşluyoruz)

Tabii bu çözümün yan etkileri olacaktır mutlaka.  Yine de önceden 9 s'de
açılan bir dosyayı saniye altında açmak için buna değer...

-- 
roktas


Reply to: