Niska wydajność podczas kopiowania plików do iz urządzeń USB

11

Kiedy kopiuję pliki do iz urządzeń USB (aparat, dysk twardy, karta pamięci), mój system działa bardzo wolno. Na przykład, jeśli chcę zamknąć okno, poruszam myszą, ale ruch kursora zajmuje około 2 sekund lub więcej. Kiedy w końcu przeciągam kursor nad x i klikam, nic się nie dzieje przez ponad 10 sekund. Próbowałem tego z wyłączonymi wszystkimi efektami pulpitu, ale problem nadal występuje.

Oprogramowanie: Linux Mint 9 KDE Sprzęt:

  • Płyta główna Asus SLI
  • Karta graficzna NVidia 6600
  • 2 GB pamięci RAM
  • Zamiana 2 GB
  • AMD Athlox X2 @ 3800+

Dla mnie ten sprzęt nie powinien mieć żadnych problemów z uruchomieniem tego oprogramowania i nie dzieje się to dopóki nie skopiuję plików za pomocą USB. Gdzie powinienem zacząć szukać tego? Myślę, że sterownik grafiki może być częścią problemu, ale nie jestem tego pewien.

Jan
źródło
2
sprawdź, czy porty USB obsługują USB 2.0. niektóre porty USB, szczególnie z przodu komputerów stacjonarnych, były kiedyś tylko USB 1.0. Sprawdź także, czy ustawienia BIOS są optymalne dla wydajności USB. Mogą występować pewne ustawienia prędkości USB i / lub starsze ustawienia USB, które mogą wpłynąć na wydajność.
Tim Kennedy,
Czy urządzenie jest sformatowane jako NTFS? Jeśli tak, spróbuję sformatować go jako FAT32 (lub EXT4, jeśli planujesz używać go tylko w systemie Linux).
RobinJ,
3
Wydaje się, że jest problem z dużymi stronami w zarządzaniu pamięcią systemu Linux . Rzadko się zdarza, ale brzmi tak, jakbyś to zaobserwował.
artistoex,
@artistoex - ten artykuł całkowicie podsumowuje zachowanie, którego doświadczałem. Szkoda, że ​​nie ma konkretnego rozwiązania. Czy ktoś wie, czy jest to naprawione w późniejszych wersjach? W każdym razie czas na aktualizację.
John,
jak mówi artykuł, ponownie skompiluj jądro z wyłączoną funkcją przezroczystych ogromnych stron.
artistoex,

Odpowiedzi:

7

Wydaje się, że jest problem z dużymi stronami w zarządzaniu pamięcią linuksową . Rzadko się zdarza, ale brzmi, jakbyś to zaobserwował.

Przyczyna

To jest moja rażąco uproszczona relacja o tym, co zgodnie z artykułem się dzieje.

W przypadku pecha proces zostaje zablokowany w momencie wydania dostępu do pamięci. Dzieje się tak, ponieważ gdy włączone są przezroczyste ogromne strony, dostęp do pamięci może wyzwalać synchroniczne kompaktowanie (defragmentacja pamięci głównej) synchroniczne, co oznacza, że ​​dostęp do pamięci nie kończy się przed kompakcją. To samo w sobie nie jest złe. Ale jeśli zdarzy się, że w tym samym czasie nastąpi zapis (np. Buforowanych danych na USB), to z kolei zagęszczenie może się zatrzymać, czekając na zakończenie zapisu.

Tak więc każdy proces może skończyć się czekaniem, aż wolne urządzenie zakończy zapisywanie buforowanych danych.

Lekarstwo

Aktualizacja pamięci głównej, podobnie jak OP, może pomóc w opóźnieniu problemu. Ale dla tych, którzy nie uważają tej opcji, istnieją dwa oczywiste obejścia. Oba wymagają ponownej kompilacji jądra:

artistoex
źródło
2

Brzmi podobnie do mojego pytania tutaj (gdzie odpowiedź wskazała mi to pytanie):

/programming/10105203/how-can-i-limit-the-cache-used-by-copying-so-there-is-still-memory-available-for

Ale teoria jest zupełnie inna, a zastosowane przeze mnie rozwiązanie nie ma związku z twoim, ale działa idealnie.

Korzystałem z rsync, więc wystarczyło użyć opcji --drop-cache. (co powoduje, że kopia jest nieco wolniejsza jako efekt uboczny)

Piotr
źródło
0

Jedyna sztuczka, którą znalazłem, która naprawdę działa: Gnome, nautilus kopiuje pliki na USB zatrzymuje się na 100% lub blisko

Jeśli chcesz wypróbować kilka sztuczek dla zaawansowanych użytkowników, możesz zmniejszyć rozmiar bufora używanego przez Linuksa, ustawiając / proc / sys / vm / dirty_bytes na około 15728640 (15 MB). Oznacza to, że aplikacja nie może uzyskać więcej niż 15 MB przed faktycznym postępem.

Efektem ubocznym jest to, że komputer może mieć mniejszą przepustowość zapisu danych przy tym ustawieniu, ale ogólnie uważam, że warto zauważyć, że program działa przez długi czas, gdy zapisuje dużo danych, w przeciwieństwie do zamieszania związanego z posiadaniem program wydaje się być skończony ze swoim zadaniem, ale system źle się opóźnia, gdy jądro wykonuje właściwą pracę. Ustawienie wartości dirty_bytes na względnie małą wartość może również pomóc w zapobieganiu braku reakcji systemu, gdy brakuje wolnej pamięci i uruchamia program, który nagle zapisuje dużo danych.

Ale nie rób tego zbyt małego! Używam 15 MB jako przybliżonego oszacowania, że ​​jądro może opróżnić bufor na normalnym dysku twardym w 1/4 sekundy lub mniej. Dzięki temu mój system nie czuje się „opóźniony”.

Volunteer4F
źródło