느린 하드 드라이브를 시뮬레이션 할 수 있습니까?


19

디스크 읽기 속도가 느린 경우 특정 간헐적 버그만 나타날 수 있습니다. 안정적으로 재현 할 수 없기 때문에 문제 해결이 어렵습니다.

우선 순위가 높은 프로세스에서 단순히 IO를 고갈시키지 못하는 경우, 느린 하드 드라이브 사용을 시뮬레이션 할 수있는 방법이 있습니까?


하드 드라이브가 특정 버스 속도로 실행되도록 명령하는 것을 본 기억이 있습니다. 내가 그것을 파낼 수 있는지 볼 것이다.
제레미

man hdparm-X 옵션을 보시겠습니까? 거기에는 드라이브 속도를 늦추기 위해 사용할 수있는 몇 가지가 있지만 그중 일부는 데이터에 불쾌한 일을 할 위험이 있습니다!
제레미

또한 네트워크 공유를 폴더 (Google이 당신의 친구입니다)로 마운트하십시오.
제레미

1
이것은 직접적인 대답은 아니지만, 이와 같은 간헐적 버그가 있으면 IO 레이스 조건을 포착 할 수 있기 때문에 Valgrind (컴파일 된 언어 인 경우)에서 프로세스를 실행하려고 시도합니다.
poolie

1
응용 프로그램, 커널 또는 장치 드라이버의 버그에 대해 이야기하고 있습니까? 아니면 전혀 몰라? 더 설명하면 도움이 될 것입니다.
poolie

답변:


15

사용 NBD 말을 사용하려면 네트워크 차단 장치, 다음 속도 제한 액세스 trickle.

sudo apt-get install nbd-client nbd-server trickle

꽤 멋진 솔루션 인 경우 +1 그러나 문제가있을 수있는 실제 하드 디스크 장치 드라이버를 사용하지 않기 때문에 실제 테스트는 아닙니다.
유닉스 청소부

1
나는 그가 드라이버 버그에 대해 이야기하고 있다고 생각하지 않았지만 그것은 단지 가정에 불과했습니다. 보자
poolie

10
이 답변에 실제 명령을 추가 할 수 있습니까? 현재 필요한 도구를 설치하는 방법 만 보여줍니다 :)
Rich

5
# echo 1> / proc / sys / vm / drop_caches

그것은 당신을 느리게 할 것입니다 :)

캐시 된 페이지를 이용하는 대신 디스크에서 읽어야합니다.

정말로 정교 해지고 싶다면 scsi 결함 주입 프레임 워크를 사용하여 매 n 번마다 가짜 읽기 오류와 같은 작업을 수행 할 수 있습니다.

http://scsifaultinjtst.sourceforge.net/


1
참고 : 캐시는 한 번만 삭제됩니다. 그런 다음 즉시 캐싱을 다시 시작합니다. 루프로 감싸고 싶을 수도 있습니다.
Androbin

@Androbin 나는 그 아이디어를 좋아한다. 루프에 휴면 간격을 추가 할 수도 있습니다. 감사!
ppetraki

4

USB 1.1 허브가 있습니까? 아니면 느린 SD 카드? 그들은 당신을 10mbps 이하로 떨어 뜨릴 것입니다.


nice ... 기술적으로 충분하지는 않지만 +1이지만 좋은
RobotHumans

3

이것은 완전한 솔루션은 아니지만 다른 측정과 관련하여 도움이 될 수 있습니다. 프로세스 스케줄러와 매우 유사한 I / O 스케줄러가 있으며 조정할 수 있습니다.

가장 주목할만한 것은 실제로 다른 스케줄러 중에서 선택할 수 있습니다.

~# 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 더 강력하게 재현 가능한 결과를 얻는 데 도움이 될 수 있습니다.

noop이름에서 알 수 있듯이 멍청한 일이며 약간의 노력으로 I / O 성능에 절대적인 혼란을 줄 수 있습니다.

anticipatory그리고 cfq비록 모두의 시도는, 그것에 대해 현명하게 cfq일반적으로 두 가지의 똑똑한입니다. (제 생각 anticipatory에는 커널이 여러 스케줄러를 지원하기 직전의 레거시 스케줄러입니다.)



2

Ubuntu 설치 CD의 iso와 같은 큰 파일의 사본을 실행하여 두 번 실행할 수 있습니다. 드라이브 속도가 약간 느려집니다.


질문에 따르면 "단순히 IO를
고갈시키는

2

하드 드라이브 자체를 느리게하는 것 외에도, bonnie ++ 와 같은 파일 시스템 벤치마킹 도구를 사용하여 많은 디스크 I / O를 유발할 수 있습니다.

sudo apt-get install bonnie++

1
질문에 따르면 "단순히 IO를
고갈시키는

0

방법은 make -j64? 새로운 200line 성능 패치를 설명하는 기사 make -j64에서 많은 컴퓨터 리소스를 먹는 작업이었습니다.


2
그 명령이 실제로 무엇을하는지 설명해야합니다.
papukaija

질문에 따르면 "단순히 IO를
고갈시키는

0

iotop디버그하려는 프로세스로 인해 많은 디스크 읽기 / 쓰기가 발생하는지 확인하고 실행 해보십시오.


3
프로세스가 많은 IO를 수행한다는 사실이 이미 알려져 있거나 자체적으로 문제가 아니기 때문에이 답변은 도움이되지 않는 것으로 보입니다. 문제는 IO를 처리하는 방식에 타이밍 관련 버그가 있다는 것입니다.
poolie

0

최근에 내가 설정을 알아 냈습니다.

  • 디렉토리를 내 Google 드라이브 로 옮겼습니다.
  • super-duper-slow 클라이언트를 통해 마운트 google-drive-ocamlfuse
  • 원래 경로에서 새로운 경로로 심볼릭 링크 를 만들었습니다.

경우 16초는 대기 시간이 느린 충분하지, 당신은 당신의 라우터를 분리 할 수 있습니다.

참고로 다음은 원래 사용 사례입니다. https://github.com/goavki/apertium-apy/pull/76#issuecomment-355007128

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.