|
이전에 신성조님의 입장을 실드 치는 내용에서
다시 생각해보니, '로드율'이라는 용어에서 오류가 있었습니다.
이용률이나 사용률로 생각하면서 작성한 글이므로, 의미는 크게 다르지 않는데
제가 잘못 사용한 용어였던 것이죠
그래서 이미 작성된 글에 용어를 급히 수정하고, 다시 새로 정리하고자 합니다.
제 글을 읽은 모든 분들께 뒤늦게나마 사과드립니다. ( _ _ )
목차
1. 용어 정의
2. load를 값으로 산출하기
3. 서버 분야에서의 load
4. 일반 게이밍 분야에서의 load
5. load 파악의 어려움
6. 병목의 정도를 판단할 수 있는 그나마 최선의 방법
7. 구매 예정자들에게는 가격까지...
8. 참고
1. 용어 정의
컴퓨터계에서의 병목은 시스템 내 데이터의 집중적인 사용으로 인해, 사용 빈도가 늘어나
그 부분의 성능이 저하되어 전체 시스템이 마비되는 현상을 말합니다.
무슨 말인지 모르겠다면 음료수병이나 요금소, 휴게소같은 곳에 나타나는 교통 체증을 떠오르시면 됩니다.
영어로는 bottleneck이라고 부릅니다.
CPU 및 GPU가 얼만큼 일하고, 얼만큼 놀고 있냐를 보여주는 지표는
이용률, 사용률, 활용률 등... 여러 용어들이 있는데 모두 유의어이고
이 개념은 (CPU가 실행 중인 작업의 양) ÷ (CPU가 수행해야할 모든 작업의 양) × 100으로 환산한 값을 의미합니다.
영어로는 utilization, usage 등이 있습니다.
참고로 Windows의 작업 관리자에서는 영문판의 경우 모두 utilization로 나오지만
한국어판의 경우 CPU, 디스크, 네트워크에서는 '이용률', GPU, 메모리에서는 '사용률'로 나옵니다.
그리고 CPU가 수행해야할 모든 작업의 양,
그러니까 (실행 중인 작업의 양) + (대기 중인 작업의 양)을 부하라고 부르는데
순간적인 양으로는 잘 쓰이지 않고, 일정 시간 단위만큼 합한 다음, 일정 시간으로 나눈 평균치로 나타냅니다.
이런 말은 어렵기 때문에 보통은 얼마나 빡세게 일하는가, 아닌가를 보여주는 지표이기도 합니다.
영어로는 load라고 부릅니다.
용어 혼선을 방지하기 위해
이용률 또는 사용률을 utilization, 부하를 load라고 부르겠습니다.
2. load를 값으로 산출하기
load는 실행 중인 작업의 양과 대기 중인 작업의 양들을
일정 시간 단위로 합산 → 일정 시간 단위만큼 평균치로 계산 → 정규화 → 멀티코어 CPU일 경우 코어 개수만큼 곱절
이렇게 산출되는데, 싱글코어 CPU는 1, 옥타코어 CPU는 8이 기준치가 됩니다.
기준치보다 낮다면 실행 중인 작업의 양이
CPU가 감당할 수 있는 작업의 양보다 더 작아서 대기 중인 작업의 양이 없는 여유로운(반대로는 낭비되는) 경우이고,
기준치보다 높다면 그 반대가 되어 대기 중인 작업의 양이 발생하여 빡센 경우입니다.
코어당 2-way SMT 기술인 하이퍼스레딩을 적용하면
load의 기준치가 옥타코어 CPU 기준 16이 되지 않을까 생각할 수도 있지만
그냥 코어 개수의 2배의 스레드 개수로 증가할 뿐, load의 기준치가 16이 되지 않습니다.
물리적인 코어 개수는 똑같이 옥타코어이기 때문입니다.
그래도 하이퍼스레딩을 적용하면 남아도는 자원을 더 많이 활용해서
utilization를 더 높이고, 효율성이 높아지는 장점이 있습니다.
애초에 그럴 목적으로 2001년에 인텔이 개발하고 발표한 기술이 하이퍼스레딩이니까요
3. 서버 분야에서의 load
서버 분야에서는 OS 레벨에서 여러 프로세스들을 모니터링하는데
각각의 프로세스들이 싱글스레드만 지원하는 프로그램들일 경우
(작업의 개수) = (프로세스의 개수)로 취급할 수도 있겠지만
요즘에는 멀티스레드 지원 프로그램들이 많아지고 있으니, (작업의 개수) ≥ (프로세스의 개수)가 되겠고
작업의 개수와 프로세스의 개수가 어떻든, 대기 중인 녀석과 실행 중인 녀석으로 구분해서
utilization과 load를 엄격하게 구분합니다.
안 그러면 온라인 게임 할 때 서버가 터지는 일이...
4. 일반 게이밍 분야에서의 load
하지만, 우리같은 비전공자, 비전문가들이 즐기는 게임은
일반적으로 게임 하나 실행할 때 하나의 프로세스로만 표시되기 때문에
서버 분야와 개념은 똑같지만 조금 다르게 봐야 합니다.
요즘에 많이 지원하고 있는 추세인 멀티스레드 게임을 기준으로 보자면
하나의 프로세스에 여러 개의 스레드가 동시에 동작하는 구조이고
각각의 스레드마다 감당할 수 있는 작업의 양과 주어진 작업의 양을 통해 load를 가늠합니다.
주어진 작업의 양과 감당할 수 있는 작업의 양이 같다면
싱글코어 CPU는 1, 옥타코어 CPU는 8이 됩니다. (CPU한테 이상적인 경우)
주어진 작업의 양이 감당할 수 있는 작업의 양의 절반이라면
싱글코어 CPU는 0.5, 옥타코어 CPU는 4가 됩니다. (CPU한테 여유있는, 낭비되는 경우)
반대로 주어진 작업의 양이 감당할 수 있는 작업의 양의 2배라면
싱글코어 CPU는 2, 옥타코어 CPU는 16이 됩니다. (CPU한테 모자르는, 빡센 경우)
5. load 파악의 어려움
문제는 utilization이 작업 관리자에서 바로 볼 수 있는 용어라서 쉽게 파악할 수 있지만
load는 작업 관리자에서 나타나지 않기 때문에
얼만큼 빡센지는 절대적, 정량적으로 파악하기 어렵다는 것입니다.
CPU와 GPU가 똑같이 utilization 100%이더라도
게임에 따라, 같은 게임이라도 그래픽 설정에 따라
소비 전력, 방열량, 온도가 다르면 load가 다르다 정도는 파악할 수 있겠지만
어디까지나 상대적, 정성적, 간접적인 방법에 지나지 않을 뿐이고
게임의 최종적인 퍼포먼스 지표인 프레임 레이트도 마찬가지입니다.
load라는 지표 자체의 첫 번째 맹점이라면
소비 전력, 방열량, 온도, 쿨링팬 소음에 항상 비례하다는 것이 아니라는 것입니다.
이는 같은 load 수준이라도
게임의 특성, 그러니까 어떻게 프로그래밍 되어 있냐,
어떤 함수(= 메소드 ≒ 프로시저)와 명령어를 써먹었냐에 따라
소비 전력, 방열량, 온도, 소음이 일정하지 않을 수 있다는 것입니다.
차량으로 비유하면 차종(소형차, 중형차, 대형차 등)이나
같은 차종이지만 차량 대수에 대응됩니다.
두 번째 맹점이라면, load는 순간 load가 아닌 평균 load 값으로 취급하는데
평균 load가 이상적일지라도 순간 load가 평균 이상으로 치솟는 경우가 있습니다.
한마디로 정확도가 떨어질 수 있다는 것입니다.
이전에 언급했던 load 1이 이상적인 값이, 현실적으로는 이상적이지 않다는 것인데
가끔 load가 1 이상으로 튀는 경우를 고려해서
1보다 작은 0.7 정도가 이상적인 평균 load라고 합니다.
병목 현상은 순전히 데이터 이동에 관련된 용어이니
외적인 환경과는 관련성이 떨어지지만, 그 외적인 환경 때문에
하드웨어의 안전 장치 차원으로 하얗게 타오르지 않게 쓰로틀링이 걸린다면
하드웨어가 제클럭을 발휘하지 못 할 수도 있고
그렇게 되면 load율에 영향을 줌으로써 병목에도 영향을 미칠 것입니다.
그래서 병목의 정도를 가늠해서 판단하는 것이 매우 어려운 일입니다.
6. 병목의 정도를 판단할 수 있는 그나마 최선의 방법
그럼 load를 정확히 알기 어렵고, 병목의 정도도 정확히 알 수 없으니
어떻게 판단하면 좋을까요?
아쉽게도 비전공자, 비전문가로서 가늠할 수 있는 정확한 방법은 없습니다.
그래도 그나마 최선의 방법은 utilization만 모니터링 하지 말고
소비 전력, 온도, 프레임 레이트와 함께 모니터링 하는 것입니다.
그리고 하나의 하드웨어 사양만 놓고 판단하지 말고, 하나의 게임만 놓고 판단하지 말고
여러 하드웨어 사양마다 확인, 여러 게임들마다 확인한 후
본인이 하고자, 하는 중인 게임이 있다면 그 게임을 콕 집어서 판단하면 됩니다.
거기서 본인의 하드웨어 사양에 대입해서 확인해보면
병목이 얼마나 약한지, 심한지를 대충 판단할 수 있을 것입니다.
하지만 그렇게 판단하기 좋은, 이상적으로 방대한 자료를 가진 곳은 아마 없을 것입니다.
방대한 정보를 만들기 위해 측정하는 사람한테는 매우 피곤한 실험이기 때문이죠
그래서 충분한 메인 메모리 용량에 최상위 그래픽 카드로 변인 통제된 'CPU 벤치마크',
충분한 메모리 용량에 최상위 CPU로 변인 통제된 '그래픽 카드 벤치마크'를 같이 놓고 보는 것이
수고로움을 덜어낼 수 있는 방법입니다.
두 벤치마크는 CPU 및 글카 신제품이 나왔을 때 리뷰에서 항상 나오는 단골 벤치마크니까요
어느 게임의 하드웨어별 병목을 확인하려면
해당 게임의 리뷰에서 프레임 레이트만 보는 것이 아니라
모든 측정 자료들을 다 보라는 이유가 그것입니다.
7. 구매 예정자들에게는 가격까지...
여기까지는 쇼핑하지 않는 사용자들을 위한 기술적인 판단이었고
가성비를 따져야 하는 구매 예정자들에게는 기술적인 판단과 함께 경제적인 판단도 중요합니다.
한정된 예산 범위 내에 어느 하드웨어에 더 투자해서
더 높은 성능 이득을 볼 것인지를 고민해야 하기 때문입니다.
8. 참고
CPU 지표 정리
https://brunch.co.kr/@leedongins/75
CPU Load에 대해
https://brunch.co.kr/@leedongins/76
CPU Usage vs Load
https://estl.tech/cpu-usage-vs-load-ecca22287b21
Understanding Linux CPU Load - when should you be worried?
https://scoutapm.com/blog/understanding-load-averages
Load (computing)
https://en.wikipedia.org/wiki/Load_(computing)
CPU time ≒ CPU usage
https://en.wikipedia.org/wiki/CPU_time
CPU 타임 ≒ CPU 사용률
첫댓글 사실 그거 혼용해서 말해도 이해할때 알아서 변환해서 들어서 굳이 ㅋㅋㅋ 이렇게 자세히 안적으셨어도됩니다
신성조님이야 당연히 알아들으셨을거라 믿고 있었지만
오해하시는 분들이 있을 것 같아서, load라는 것이 정확히 뭔지 찾아보고 정정하기로 했습니다