IO bound Job
책에 보면은 IO bound job, cpu bound job으로 리눅스 프로세스를 분류한것을 본적이 있습니다.
IO bound job 은 네트워크를 통한 대량의 트래픽 송수신 정도의 작업이 될 것이고, cpu bound job은 멀티미디어 재생 등의 작업이 되리라 생각합니다. (맞나요 ?--;)
하드에서 데이터를 읽어와서 메모리에 이를 write하고 이를 네트웍으로 송신하는 작업도 전형적인 io bound job일것 같습니다. 이때 하드에서 데이터를 읽어와서 메모리에 쓰는 작업은 DMA 로 발생할것이구요..
(예를 들면 vod server로 동작하는 시스템인 경우는 자신의 하드에 있는 데이터를 계속 해서 메모리에 쓰고, 이를 다시 네트웤으로 송신하는 작업을 계속 수행하는 경우가 이에 해당하겠지요...)
여기서 질문입니다.
먼저 제가 알고 있는 내용이 맞다면 위와 같은 작업을 수행하는 동안 해당 시스템의 cpu 점유율은 얼마안될것이라고 생각합니다. 왜냐하면 하드에서 메모리로 데이터를 읽어오는 작업은 DMA로 발생할 것이고 기껏해야 vod 서버 응용에서 시스템 콜 몇번 수행해서 네트워크로 write하는게 전부이기 때문이라고 생각합니다. 제가 알고 있는게 맞나요 ?
위의 내용이 맞다면 요새 나오는 성능 빵빵한 pc에서 HD급 2채널 정도의 데이터(약 40Mbps 정도가 되겠지요 ?)를 네트워크로 write하는 것은 일도 아닐것 같은데요..막상 테스트해보면 이게 그렇지가 않다고 하네요...제가 직접 테스트해 본것은 아닙니다만... 저는 예전에 ttcp로 tcp 채널을 열어서 거의 90메가 이상의 성능이 나온것을 확인 했었거든요..ttcp와 위의 예와의 차이는 데이터를 하드에서 부터 읽어 오고 아니고의 차이밖에 없는데요..(참고로 ttcp는 패킷을 생성해서 송신하는 기능을 하는 프로그램입니다.)
질문이 영 두서가 없네요...급한 맘에 적느라..
제가 뭘 잘못 알고 있는거고 뭘 모르고 있는건지 알려주세요.;..
그럼 답변 기다리겠습니다.
음. 하드에서 읽는
음. 하드에서 읽는 작업은 DMA가 해준다고 해도 프로세스는 IOWAIT로 블럭되기 때문은 아닐까요?
May the F/OSS be with you..
----------------------------
May the F/OSS be with you..
댓글 달기