위와 같은 경우 10MB/s 정도의 througput을 처리할 수있는 별도의 전용 CPU가 있으면 어떨까? QNX의 APS(Adaptive Partitioning Scheduler) 는 한개의 CPU를 논리적으로 여러개의 파티션으로 나누어 위와 같이 특정 프로그램를 위한 전용 CPU로 사용할 수 있도록 해준다(Partitioning).
예를들어 CPU의 총 성능 중 20%만 사용하면 네트워크 througput 10MB/s가 달성된다면 CPU를 80:20로 나누어 네트워크 관련 프로그램을 20% 영역에서 실행시키는 것인다. 이 경우 나머지 프로그램은 80%영역에서 실행되며 사용자가 느끼기에는 마치 서로 영역별로 별개의 CPU를 사용하는 것처럼 스케쥴링이 이루어진다.
이 기능이 제공하는 더 좋은 점은, CPU가 100% 풀 로드가 아닌 상황에서는 파티션이 가변적(Adaptive)으로 동작한다는 점이다. 즉 시스템에 네트워크 기능이 동작하지 않을때는 80%영역에 있던 프로그램이 20%영역의 CPU를 사용할 수 있으며, 반대로 80% 영역에 여유가 많을 때에는 네트워크 관련 프로그램이 80%쪽 CPU를 끌어다 사용할 수 있다.
APS 기능을 사용하려면 IFS 이미지 빌드 스크립트에 아래와 같이 [module=aps]를 추가하여 IFS를 빌드하여야 한다.
[module=aps] PATH=/proc/boot:/bin:/usr/bin:/opt/bin LD_LIBRARY_PATH=/proc/boot:/lib:/usr/lib:/lib/dll:/opt/lib procnto-instr즉, 만일 현재 사용중인 IFS가 [module=aps]가 없이 빌드된 것이라면 IFS를 바꿔야 한다.
APS 기능은 아래와 같이 실행시킬 수 있다.
위 예제에서는 inetd에 20%의 CPU가 할당되었다. QNX에서 실제로 네트워킹은 io-pkt가 담당하게 되는데, 이 경우에 io-pkt는 서버, inetd는 클라이언트가 된다. 위 예에서 io-pkt가 System쪽에서 실행되었다고 가정하면 inetd의 요청을 받은 io-pkt 서버는 비록 시스템 파티션에서 실행 되었지만 Network partition에서 CPU를 사용하고 inetd 이외의 프로그램이 요청한 네트워크 요청만 System partition에서 수행이 된다.
댓글 없음:
댓글 쓰기