저는 rsync
대용량 폴더를 외부 3.5" 드라이브에서 내부 3.5" 드라이브로 옮기고 있습니다. 둘 다 5.400rpm입니다. 이를 사용하여 dstat
현재 처리량을 볼 때 다음과 같은 패턴이 자주 나타납니다.
--total-cpu-usage-- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai stl| read writ| recv send| in out | int csw
20 6 34 40 0| 98M 90M|1272B 3652B| 0 0 |1702 4455
21 6 37 37 0| 121M 90M|1646B 4678B| 0 0 |2057 6488
17 24 29 30 0| 77M 95M| 630B 2416B| 0 0 |1581 4644
20 5 33 43 0| 86M 84M|1372B 2980B| 0 0 |1560 4146
20 6 30 44 0| 80M 75M| 700B 2722B| 0 0 |1484 3942
11 2 47 39 0| 39M 65M| 642B 1332B| 0 0 | 765 1507
0 0 50 50 0| 0 91M| 70B 354B| 0 0 | 136 70
0 0 50 49 0| 0 71M| 306B 346B| 0 0 | 146 119
0 0 50 50 0| 0 83M| 70B 346B| 0 0 | 145 60
0 0 50 50 0| 0 0 | 70B 346B| 0 0 | 36 84
0 0 50 50 0| 0 0 | 164B 646B| 0 0 | 35 71
0 0 50 50 0| 0 0 | 140B 802B| 0 0 | 30 64
0 0 50 50 0| 0 0 | 70B 346B| 0 0 | 27 68
0 0 50 50 0| 0 34M| 134B 346B| 0 0 | 86 68
0 0 50 50 0| 0 0 | 70B 346B| 0 0 | 30 71
0 0 50 50 0| 0 0 |2320B 346B| 0 0 | 40 76
0 0 50 50 0| 0 0 | 70B 346B| 0 0 | 29 71
0 0 50 50 0| 0 0 | 70B 346B| 0 0 | 25 50
-----------------------------[snip]------------------------------
0 0 50 50 0| 0 0 |2230B 346B| 0 0 | 35 61
0 0 50 50 0| 0 60M| 70B 346B| 0 0 | 118 83
1 7 42 50 0| 256k 104M| 230B 500B| 0 0 | 281 480
21 5 31 42 0| 117M 76M|1120B 3392B| 0 0 |1849 4309
23 5 36 36 0| 137M 56M|1202B 3958B| 0 0 |2149 5782
24 5 36 35 0| 138M 100M|1284B 4112B| 0 0 |2174 6021
예를 들어 몇 초에서 1분 내에 읽기 및 쓰기 처리량이 모두 0으로 떨어졌습니다. 여기서 병목 현상은 무엇입니까?
내 말은 두 드라이브의 속도가 거의 같기 때문에 어느 쪽도 너무 오랫동안 유휴 상태로 있어서는 안 된다는 것입니다. 한 단계 더 나아가, 적어도 하나의 드라이브는 항상 읽거나 쓸 수 있어야 합니다. 시스템은 무엇을 기다리고 있나요?
시스템은 유휴 상태이고 CPU를 사용하는 유일한 것은 rsync
작업입니다. 메모리는 8GB, CPU는 7세대 i5 쿼드코어다. 내장 하드 드라이브는 SATA를 통해 마더보드(Gigabyte G170X-Ultra Gaming)에 연결됩니다. 두 경우 모두 파일 시스템은 내부(쓰기) 측에서 dmcrypt/LUKS를 사용하여 암호화된 ext4입니다. 이것이 이유일까요? 그렇다면 dmcrypt의 성능을 어떻게 확인할 수 있나요? 전송 손실이 발생하면 CPU는 50% 유휴 상태이고 50% 대기 상태인 것을 알 수 있습니다. 이것으로부터 나는 어떤 결론을 내릴 수 있습니까?
커널 버전을 갖춘 최신 Archlinux입니다 4.13.11-1-ARCH
. 주의가 필요한 것이 있나요? 미리 감사드립니다.
고쳐 쓰다: iotop
보다 더 정확한 것으로 지적됐다 dstat
. 불행하게도 처리량이 0으로 떨어지면 처리량 iotop
도 0으로 표시됩니다. dstat
내가 하나 만들었어스크린캐스트그것을 보여주기 위해.
답변1
일부 블록 수준 장치 통계를 얻을 수 있는 두 가지 도구 세트가 있습니다. 첫 번째는지연브렌든 그레그에서성능 도구. 이는 디스크 작업 대기 시간에 대한 간단한 히스토그램을 생성합니다. 예를 들면 다음과 같습니다.
>=(ms) .. <(ms) : I/O |Distribution |
0 -> 1 : 1913 |######################################|
1 -> 2 : 438 |######### |
2 -> 4 : 100 |## |
4 -> 8 : 145 |### |
8 -> 16 : 43 |# |
16 -> 32 : 43 |# |
32 -> 64 : 1 |# |
도구 세트의 또 다른 스크립트는 iosnoop
명령과 해당 작업을 표시합니다. 예를 들면 다음과 같습니다.
COMM PID TYPE DEV BLOCK BYTES LATms
/usr/bin/mon 31456 R 8,0 9741888 4096 2.14
/usr/bin/mon 31456 R 8,0 9751408 4096 0.16
/usr/bin/mon 31456 R 8,0 20022728 4096 1.44
/usr/bin/mon 31456 R 8,0 19851752 4096 0.26
jbd2/sda3-41 416 WS 8,0 130618232 65536 1.89
jbd2/sda3-41 416 WS 8,0 209996928 65536 1.92
jbd2/sda3-41 416 WS 8,0 210006528 8192 1.94
이후블록 추적패키지는 낮은 수준의 블록 작업을 기록한 다음 다음 blktrace
의 blkparse
간단한 요약을 포함하여 다양한 정보와 기타 많은 명령을 표시합니다.btt
pdf 사용자 가이드):
$ sudo blktrace /dev/sda # ^C to stop
=== sda ===
CPU 0: 180 events, 9 KiB data
CPU 1: 1958 events, 92 KiB data
Total: 2138 events (dropped 0), 101 KiB data
$ ls -ltra # one file per cpu
-rw-r--r-- 1 root root 8640 Nov 5 10:16 sda.blktrace.0
-rw-r--r-- 1 root root 93992 Nov 5 10:16 sda.blktrace.1
$ blkparse -O -d combined.output sda.blktrace.* # combine cpus
$ btt -i combined.output
ALL MIN AVG MAX N
Q2Q 0.000001053 0.106888548 6.376503027 253
Q2G 0.000000795 0.000002266 0.000011060 184
G2I 0.000000874 0.000979485 0.002588781 328
Q2M 0.000000331 0.000000599 0.000002716 70
I2D 0.000000393 0.000480112 0.002435491 328
M2D 0.000002044 0.000028418 0.000126845 70
D2C 0.000080986 0.001925224 0.010111418 254
Q2C 0.000087025 0.002603157 0.010120629 254
...
예를 들어 D2C는 하드웨어 장치가 작업을 수행하는 데 걸리는 시간입니다.
sudo smartctl -a /dev/sda
각 디스크에서 실행하여 결함이 있는지 확인할 수도 있습니다.
답변2
나는 이것이 dstat
응용 프로그램 호출에 대한 파일 설명자 수준 I/O 통계를 사용하고 write()
시스템 dstat
호출이 반환되면 데이터가 증가하는 것을 볼 것이라고 추측합니다.
하지만 그렇다고 해서 데이터가 실제로 기록되었다는 의미는 아닙니다. 일시 정지된 것처럼 보이는 이러한 단계는 버퍼가 블록 장치에 기록되는 단계인 것으로 추측됩니다. 이는 이 시간 동안 I/O 대기 값 dstat
이 데이터 전송이 측정되는 단계보다 훨씬 높다는 점에서 의미가 있습니다.
iotop
디스크와 캐시에 대한 쓰기와 읽기를 구별합니다. 어쩌면 이 도구는 흥미로운 추가 정보를 제공할 수도 있습니다.