Czy mogę zasymulować wolny dysk twardy?

19

Mam przeczucie, że pewien przerywany błąd może objawiać się tylko wtedy, gdy szybkość odczytu dysku jest niska. Rozwiązywanie problemów jest trudne, ponieważ nie mogę go wiarygodnie odtworzyć.

Czy po prostu pożeram IO procesem o wysokim priorytecie, czy jest jakiś sposób na symulację wolnego dysku twardego?

ændrük
źródło
Pamiętam, jak widziałem polecenie nakazujące dyskom twardym działanie z pewną prędkością autobusu. Zobaczę, czy uda mi się to wykopać.
Jeremy,
man hdparmmoże spojrzeć na opcję -X? Istnieje wiele rzeczy, których możesz użyć, aby spowolnić dysk, ale niektóre z nich ryzykują paskudne działanie na danych!
Jeremy,
Spróbuj także zamontować udział sieciowy jako folder (Google jest twoim przyjacielem), może nawet przez Wi-Fi, jeśli jest to prawdopodobne.
Jeremy,
1
To nie jest bezpośrednia odpowiedź, ale: gdybym miał taki sporadyczny błąd, prawdopodobnie spróbowałbym uruchomić proces w Valgrind (jeśli byłby to skompilowany język), ponieważ prawdopodobnie uchwyciłoby to warunki wyścigu IO.
poolie
1
Czy mówisz o błędzie w aplikacji, jądrze lub sterowniku urządzenia? Czy w ogóle nie wiesz? Może ci pomóc, jeśli wyjaśnisz więcej.
poolie

Odpowiedzi:

15

Użyj nbd , Network Block Device, a następnie ogranicz dostęp do niego za pomocą powiedz trickle.

sudo apt-get install nbd-client nbd-server trickle
poolie
źródło
+1 za całkiem fajne rozwiązanie. nie jest to jednak prawdziwy test, ponieważ nie przechodzisz do prawdziwego sterownika urządzenia dysku twardego, na którym może leżeć problem.
The Unix Janitor,
1
Nie sądziłem, że mówił o błędzie sterownika, ale to było tylko przypuszczenie. Zobaczmy.
poolie
10
Czy do tej odpowiedzi można dodać rzeczywiste polecenie? W tej chwili pokazujesz tylko, jak zainstalować wymagane narzędzia :)
Rich
5
# echo 1> / proc / sys / vm / drop_caches

To cię spowolni :)

Zmusi Cię do czytania z dysku zamiast korzystania ze strony z pamięci podręcznej.

Jeśli naprawdę chcesz się wyrafinować, możesz zrobić coś takiego jak fałszywy błąd odczytu za każdym razem przy użyciu frameworku SCSI.

http://scsifaultinjtst.sourceforge.net/

ppetraki
źródło
1
Uwaga: spowoduje to upuszczenie pamięci podręcznej tylko raz. Następnie natychmiast zacznie ponownie buforować. Możesz owinąć to w pętlę.
Androbin
@Androbin Podoba mi się ten pomysł. Możesz nawet dodać interwał snu do pętli. Dzięki!
ppetraki
4

Masz koncentrator USB 1.1? A może wolna karta SD? Sprowadzą cię do poziomu poniżej 10 Mb / s.

Oli
źródło
fajnie ... nie dość technicznie dla +1, ale fajnie
RobotHumans
3

Nie jest to bynajmniej kompletne rozwiązanie, ale może pomóc w połączeniu z innymi środkami: Istnieje harmonogram we / wy podobny do harmonogramu procesów i można go modyfikować.

Co najważniejsze, możesz faktycznie wybierać spośród różnych harmonogramów:

~# cat /sys/block/sda/queue/scheduler 
noop anticipatory deadline [cfq] 
~# echo "deadline" > /sys/block/sda/queue/scheduler
~# cat /sys/block/sda/queue/scheduler 
noop anticipatory [deadline] cfq 
~# 

deadline może pomóc uzyskać bardziej powtarzalne wyniki.

noop, jak sama nazwa wskazuje, jest niesamowicie głupi i pozwoli ci zniszczyć absolutne spustoszenie w wydajności I / O przy niewielkim wysiłku.

anticipatoryi cfqoboje starają się być mądrzy w tej kwestii, choć cfqogólnie jest mądrzejszy z nich obu. (O anticipatoryile pamiętam, to tak naprawdę wcześniejszy program planujący, zanim jądro zaczęło obsługiwać wiele programów planujących).

Nicholas Knight
źródło
2

Możesz spróbować uruchomić kopię dużego pliku, takiego jak ISO płyty instalacyjnej Ubuntu, i uruchomić ją dwukrotnie. To powinno trochę spowolnić twój dysk.

RolandiXor
źródło
Jak mówi pytanie: „Krótko po prostu pożeram IO”…
poolie
2

Oprócz spowolnienia samego dysku twardego, możesz spróbować użyć narzędzi do testowania systemu plików, takich jak bonnie ++, które mogą powodować wiele operacji we / wy dysku.

sudo apt-get install bonnie++
ajmitch
źródło
1
Jak mówi pytanie: „Krótko po prostu pożeram IO”…
poolie
0

jak o make -j64? w artykułach opisujących tę nową poprawkę wydajności 200line make -j64było zadaniem zjedzenia dużej ilości zasobów komputerowych

Pawełkowy
źródło
2
Powinieneś wyjaśnić, co faktycznie robi to polecenie.
papukaija
Jak mówi pytanie: „Krótko po prostu pożeram IO”…
poolie
0

Dlaczego nie uruchomić iotopi sprawdzić, czy proces, który próbujesz debugować, powoduje wiele odczytów / zapisów na dysku?

The Unix Janitor
źródło
3
Myślę, że ta odpowiedź jest postrzegana jako nieprzydatna, ponieważ sam fakt, że proces wykonuje wiele OI, może być już znany lub sam w sobie nie może stanowić problemu. Problem polega na tym, że istnieje pewien rodzaj błędu związanego z czasem w sposobie, w jaki obsługuje te IO.
poolie
0

Ostatnio wymyśliłem konfigurację, w której mam

  • przeniosłem katalog na mój Dysk Google
  • zamontowałem go za pomocą klienta superduper-slow google-drive-ocamlfuse
  • utworzył dowiązanie symboliczne z oryginalnej ścieżki do nowej

Jeśli 16-sekundowe opóźnienie nie jest wystarczająco wolne, możesz po prostu odłączyć router.

Dla porównania, oto oryginalny przypadek użycia, w którym wpadłem na pomysł: https://github.com/goavki/apertium-apy/pull/76#issuecomment-355007128

Androbin
źródło