-
쓰레드 (thread)를 높이면 성능이 높아진다?성능, 오해와 진실 2021. 1. 14. 21:47
스토리지 성능 테스트 시 쓰레드를 과도하게 설정하여 부하를 주는 경우가 참 많다. 아마도 조금이라도 더 높은 처리량 (IOPS)을 획득하기 위한 마음으로 보인다. 결론을 이야기하기 전에, 예전의 경험을 먼저 끄집어내어 본다.
과거, 정보시스템의 성능을 검증할 때, 고객으로부터 항상 요청받는 것이 하나 있었다.
자기들 시스템은 사용자들이 많이 접속하니까, 부하를 많이 때려(?) 봐달라고 한다. 그래서 Virtual user를 많이 넣어달라고..
사실, 부하를 많이 넣는 것이 포인트가 아니라, 부하를 증가시키면서 나타나는 시스템의 반응과 변화를 모니터하고 최대 성능을 확인하는 것이 중요하다. 부하를 넣다 보면 어느 지점에서는 시스템의 처리량이 한계를 맞이하기 마련인데, 무조건 많이 넣어달라고만 하는 것이다.
정답은 부하 레벨 (Virtual user, Thread)은 필요한 만큼만 있으면 된다.
왜냐하면, 부하를 필요 이상으로 많이 넣어봐야 처리량은 고정된 상태에서 응답 시간만 증가하게 되므로, 필요 이상의 부하는 무의미하다. (가상 사용자는 공짜가 아니다. 라이선스 비용 발생)
스토리지 엔지니어들도 최대한의 IOPS를 도출해내기 위해 최적의 부하가 아닌 과부하를 주는 경우가 흔하다. 그 근거는, 응답 시간에 있다.
요즘 나와있는 올 플래시 스토리지는 Small block (4~16KB)을 처리할 때 대체로 1ms 내외의 Latency를 나타내는 것이 일반적이다. 그러나, 실제 테스트 결과는 2ms 이상의 (3~5ms) 지연 시간을 기록해놓은 경우를 자주 보게 된다. 과부하를 준 것이다.
처리량과 응답 시간의 상관관계를 보면, 부하 T (Thread)가 증가하면서 I/Os per second 역시 상승한다. 그러다 T7에 이르러서는 더 이상 증가하지 못한다. 즉, 성능 상의 임계점 (Saturation point)을 만난 것이다. 이후부터는 일정한 수준을 유지하게 된다. 이 수준이 스토리지가 낼 수 있는 최대의 I/O 처리량이다. 여기에서 부하 (Thread)를 더 주게 되면, 스토리지가 낼 수 있는 처리량은 한계에 다다랐기에 더 이상 증가하지 못하고, 응답 시간만 높아지게 된다. 즉, Little's law에 따라, 처리량 (IOPS)은 고정적이고, 부하 (Thread)는 증가하므로, 분모인 응답 시간은 커질 수밖에 없는 것이다. (상세 '컴퓨터 시스템의 처리량 곡선' , performance.tistory.com/7 참조)
일부 제품에 따라, 임계점 이후의 처리량 곡선이 수평이 아닌 아주 완만한 상승을 그리기도 한다. 바로 이 점 때문에 테스터로 하여금 부하를 더 넣게 만들도록 희망고문을 하게 한다. 그러나 이것이 스토리지가 가진 더 높은 성능이라고 생각하면 오산이다. 왜냐하면 응답 시간이 기하급수적으로 증가하기 때문이다. 실제 이런 상황이 닥치면 스토리지는 제 때에 I/O 응답을 못하게 된다. 그러므로 이런 상황을 재현한 테스트 결과는 현실에 일어나지 않을 상황을 억지로 대변한 것이기에 실효적 가치가 없다고 할 수 있다.
ps.
하기 글을 참조하면 더 유용할 것 같다.
'성능, 오해와 진실' 카테고리의 다른 글
캐싱 (Caching)은 무조건 성능이 좋다? (0) 2021.01.15 CPU 사양이 높다고 성능이 더 좋을까? (0) 2021.01.13 플래시는 비싸다? (feat. SSD는 HDD보다 비싸다?) (0) 2021.01.12 스토리지 1대 추가 시 더 빨라진다? (0) 2021.01.11 부하테스트 시 볼륨이 커야 메모리 캐싱 효과가 없다? (0) 2021.01.09