Nowe posty

xx Dystrybucja pod HP Omen (6)
2024-03-27, 23:30:08
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
lamp Problem z Linux Lite po instalacji (0)
2024-03-27, 19:50:30
xx Ile pingwinów? (1)
2024-03-27, 08:59:24
xx konfiguracja pale moon (0)
2024-03-24, 21:53:42
xx Plasma 6 w Neonie ssie trochę mniej ... (10)
2024-03-23, 02:38:11
xx problem z instalacja sterowników do karty sieciowej (3)
2024-03-18, 18:10:16
xx Plik abc.001 (1)
2024-03-17, 17:48:27
xx Zlecę dopracowanie programu w MatLab (0)
2024-03-13, 15:28:40
xx Linux Mint 21.3 XFCE brak dźwieku po paru minutach (karta muzyczna zintegrowana) (5)
2024-03-12, 23:07:01

Autor Wątek: 9-krotnie wolniejszy zapis na sda1 przy dwóch (dlaczego różnych?  (Przeczytany 4486 razy)

arctgx

  • Gość
9-krotnie wolniejszy zapis na sda1 przy dwóch (dlaczego różnych?) sposobach montowania (za długi tytuł jak na okienko;)


Mam pamięć USB 512 MB, nieważne jakiej firmy. Problem polega na tym, że gdy ręcznie montuję jego partycję sda1, to jest OK, ale gdy już za pomocą "mount /dev/sda1", to 9 razy wolniej. Zaczęło mi to przeszkadzać od momentu zainstalowania ivmana. Co zrobić, by ten pierwszy sposób był tak szybki jak drugi?

Podaję szczegóły.

Wpis w fstab:

/dev/sda1       /q/z            vfat    noauto,umask=0,sync,iocharset=iso8859-2,codepage=852,quiet,users 0 0
a   ~ $ lsmod|grep hci   :
ehci_hcd               30664  0 
usbcore               116864  3 ehci_hcd,usb_storage
Zbudowałem dla testu plik 10 MB:

dd if=/dev/zero of=/tmp/plik bs=10M count=1
Pamięć już sobie siedzi w gnieździe, ivman zatrzymany, sda1 nie zamontowany.

  ~ $ sudo mount /dev/sda1
    ~ $ time { cp /tmp/plik /q/z; sync; rm -f /q/z/plik; }
    `/tmp/plik' -> `/q/z/plik'

    real    0m26.976s
    user    0m0.008s
    sys     0m0.507s
Straszne, nieprawda? Zrobiłem to też z roota i na jedno wychodzi. No to odmontowuję sda1 i...

  ~ $ sudo mount /dev/sda1 /q/z -t vfat -o umask=000,quiet,iocharset=iso8859-2,codepage=852
  ~ $ time { cp /tmp/plik /q/z; sync; rm -f /q/z/plik; }
  `/tmp/plik' -> `/q/z/plik'

  real    0m3.406s
  user    0m0.003s
  sys     0m0.147s
Tym razem 3.5 sekundy starczy. Polecenie sync mimo podania opcji dodałem na wszelki wypadek. Nie wiem też, dlaczego /proc/bus/usb nic nie zawiera.

ed:BBCode

jk33

  • Gość
9-krotnie wolniejszy zapis na sda1 przy dwóch (dlaczego różnych?
« Odpowiedź #1 dnia: 2006-12-18, 16:42:06 »
1) Jest to właśnie związane z opcją sync przy montowaniu.
Niebuforowany zapis zawsze będzie wolniejszy.

 > Nie wiem też, dlaczego /proc/bus/usb nic nie zawiera.
2) Musisz wcześniej zamontować usbfs, fstab:
none          /proc/bus/usb     usbfs   defaults    0 0

chmooreck

  • Gość
9-krotnie wolniejszy zapis na sda1 przy dwóch (dlaczego różnych?
« Odpowiedź #2 dnia: 2006-12-18, 17:22:43 »
z man'a mount'a:
sync
    All I/O to the file system should be done synchronously. In case of media with limited number of write cycles (e.g. some flash drives) "sync" may cause life-cycle shortening.

bez użycia opcji sync dane po prostu nie są fizycznie zapisywane na nośniku, zapisze je dopiera komenda sync, lub od'mount'owanie partcji, jeśli wyciągniesz pendrive'a bez zsynchronizowania zapisu, to najprawdopodobniej dane nie zostana na nim fizycznie zapisane

EDIT: Zalecałbym mount'owanie bez opcji sync i od'mount'owywanie napędu przed jego odłączeniem

arctgx

  • Gość
9-krotnie wolniejszy zapis na sda1 przy dwóch (dlaczego różnych?
« Odpowiedź #3 dnia: 2006-12-19, 15:08:56 »
Dzięki, ale od jakiegoś czasu wiem, do czego służy opcja lub polecenie sync.

Nie wiem, czy zauważyliście: w ciągu instrukcji poprzedzonym poleceniem time znajduje się sync, czyli zrzut z bufora na docelowe miejsce. Zatem w obu porównywanych przypadkach czas pomiaru zawiera też synchronizację niezależnie od opcji montowania.

Zakładam, że jeśli wpisuję sync, a po średniku rm, to wykonanie rm następuje dopiero PO ZAKOŃCZENIU wykonywania sync.

W jednej z porad Klaus Knopper proponuje z jakiegoś powodu wykonać sync trzykrotnie po sobie, dla pewności - tak jakby sync nie opróżniał bufora całkowicie.

Mogę zrobić w chacie kolejne porównanie, w którym do ciągu instrukcji dopiszę dodatkowe sync ;) i odmontowanie sda1.

micu

  • Gość
9-krotnie wolniejszy zapis na sda1 przy dwóch (dlaczego różnych?
« Odpowiedź #4 dnia: 2006-12-19, 16:26:05 »
Cześć!

No cóż, jeden 'sync' na koniec powinien być wydajniejszy niż sychroniczne I/O dla każdej operacji z osobna - choć skala przyspieszenia jest imponująca :-) . Myślę, że ma to związek m.in. z optymalizacjami jakie aplikuje kernel podczas zapisu grup bloków na urządzenia (łączenie itp.). Jak widać, sprawdza się to nie tylko dla dysków twardych... Ponadto, całość zajęła ci poniżej 30 s więc raczej nie było zapisów wymuszonych przez 'bdflush'.

 > Zakładam, że jeśli wpisuję sync, a po średniku rm, to wykonanie rm następuje dopiero PO ZAKOŃCZENIU wykonywania sync.
Zgadza się.
 
> W jednej z porad Klaus Knopper proponuje z jakiegoś powodu wykonać sync trzykrotnie po sobie,
 > dla pewności - tak jakby sync nie opróżniał bufora całkowicie.
A, to takie uniksowe voodoo :-)

Pozdrawiam
Micu

arctgx

  • Gość
9-krotnie wolniejszy zapis na sda1 przy dwóch (dlaczego różnych?
« Odpowiedź #5 dnia: 2006-12-20, 14:29:45 »
Na początek: usbfs zamontowałem i działa podgląd w /proc. Zanim odniosę się do posta micu, przytoczę na surowo wnioski z chaty:

Eksperyment z dodanym montowaniem i odmontowaniem, bez dodatkowych sync-ów zdaje się potwierdzać, że czas zapisu zależy od dodania opcji sync przy montowaniu. Jaką więc rolę spełnia tu polecenie sync? Niby powinien to samo.

  $ time { mount /dev/sda1; cp /tmp/plik /q/z; sync; rm -f /q/z/plik; umount /dev/sda1; } 

  real    0m27.189s
  user    0m0.009s
  sys     0m0.516s
  ~ $ time { sudo mount /dev/sda1 /q/z -t vfat -o umask=000,quiet,iocharset=iso8859-2,codepage=852; cp /tmp/plik /q/z; sync; rm -f /q/z/plik; umount /dev/sda1; }

  real    0m3.720s
  user    0m0.011s
  sys     0m0.145s
  ~ $ time { sudo mount /dev/sda1 /q/z -t vfat -o umask=000,quiet,iocharset=iso8859-2,codepage=852,sync; cp /tmp/plik /q/z; sync; rm -f /q/z/plik; umount /dev/sda1; }

  real    0m26.987s
  user    0m0.020s
  sys     0m0.478s
Przy okazji praktyczniejsza wersja przyszła mi do głowy. Bez kasowania i bez opcji sync. Dlaczego praktyczniejsza? Bo po odmnontowaniu mogę wyjąć teoretycznie dysk. Zrzut bufora jest (podczas sync lub odmontowania), a wszystko dzieje się w 3.7 sekundy. Na podstawie tego eksperymentu mogę być z kolei przekonany, że z tymi 26 sekundami jest coś nie tak.

  ~ $ time { sudo mount /dev/sda1 /q/z -t vfat -o umask=000,quiet,iocharset=iso8859-2,codepage=852; cp /tmp/plik /q/z; sync; umount /dev/sda1; }
  `/tmp/plik' -> `/q/z/plik'

  real    0m3.697s
  user    0m0.011s
  sys     0m0.162s
Problem pozostaje więc nierozwiązany.

**********

Tyle opisu wczorajszej zabawy. Gdy widzę po opisie micu, w jakich bebechach (jądra) może kryć się zagadka, składam broń i pozostaje mi przez jakiś czas przyjmować po prostu, że tak jest, i cieszyć się, że znam w ogóle sposób tego szybszego przesyłu danych. Okolice man 3 (różne dziwne funkcje w programach - tak to postrzegam;) na razie chyba przerastają moje możliwości czasowe i zwykłe potrzeby, choć od czasu do czasu przydałby się pewien kawałek wiedzy stamtąd. Trzeba jednak wiedzieć w ogóle, jak szukać.

Wrócę jeszcze do usbfs. Mam taki programik graficzny usbview, który chętnie zastąpiłbym czymś konsolowym, ale nie w tym problem. Z informacji w jego okienku wynika, że mój dysk obsługiwany jest przez kontroler EHCI ( to widać także w /proc/bus/usb/devices), no i widzę linię Speed: 480Mb/s (high). Chciałbym wiedzieć, czego jest to przepustowość: samej szyny, a po drodze coś innego by wadziło? Nie ma to na pewno nic wspólnego z prędkością z eksperymentu...

Dzięki wszystkim za podpowiedzi w głównej części problemu i pozdrawiam :)

Ed: BBCode

chmooreck

  • Gość
9-krotnie wolniejszy zapis na sda1 przy dwóch (dlaczego różnych?
« Odpowiedź #6 dnia: 2006-12-20, 14:55:01 »
Być może jeśli włączysz opcje sync przy mount'owaniu synchronizacja zachodzi częściej (dla mniejszych paczek danych) w porównaniu z jednokrotnym zrzutem danych z bufora na nośnik przy mount'owaniu bez opcji sync i synchronizacji 'ręcznej' (sync lub umount)

To tylko moje domysły ;-)

P.S. faktycznie, wcześniej nie doczytałem z tym sync'iem - przepraszam

micu

  • Gość
9-krotnie wolniejszy zapis na sda1 przy dwóch (dlaczego różnych?
« Odpowiedź #7 dnia: 2006-12-21, 14:38:08 »
2006-12-20 14:55:01 chmooreck napisał:

> Być może jeśli włączysz opcje sync przy mount'owaniu synchronizacja zachodzi częściej (dla
 > mniejszych paczek danych) w porównaniu z jednokrotnym zrzutem danych z bufora na nośnik przy
 > mount'owaniu bez opcji sync i synchronizacji 'ręcznej' (sync lub umount)
 >
 > To tylko moje domysły ;-)
 >

Chmooreck, Twoje domysły są jak najbardziej słuszne :-)
(zerknij na początek mojego poprzedniego posta :-)) )

Pozdrawiam
Micu

chmooreck

  • Gość
9-krotnie wolniejszy zapis na sda1 przy dwóch (dlaczego różnych?
« Odpowiedź #8 dnia: 2006-12-21, 21:45:47 »
2006-12-21 14:38:08 micu napisał:

 > Chmooreck, Twoje domysły są jak najbardziej słuszne :-)
 > (zerknij na początek mojego poprzedniego posta :-)) )
 >
 > Pozdrawiam
 > Micu

znowu nie doczytałem... za mało snu, za dużo kawy... ;-)