더욱 빠르고 신뢰성 있는 웹 퍼포먼스를 위한 새로운 기능들
Level: Intermediate
Li Ge
Staff Software Engineer, Linux Technology Center, IBM
2004년 2월 10일
리눅스 2.6 커널이 엔터프라이즈 애플리케이션에 맞게 발전을 거듭했다. 이 글은 IBM Linux Technology Center가 리눅스 커널 2.4와 2.6의 다양한 측면을 비교하며 수행했던 웹 서빙 테스트 결과이다. 이 글에서 강조한 부분은 2.6 커널에서 뚜렷한 향상을 보인 것이다. 또한 테스트 방법과 테스트 결과도 설명할 것이다. 2.6 커널은 웹 페이지 공급력에 있어서 2.4 보다 훨씬 빠르다. 신뢰성에 대한 손실도 전혀 없다.
IBM Linux Technology Center (LTC)의 리눅스 웹 서빙 테스트 목적은 리눅스 커널의 단점들을 밝혀내는 것이다. 웹 서버/애플리케이션 서버를 사용하는 실제 엔터프라이즈 사용자 환경과 관계 있는 워크로드를 주로 테스트 했다. 또한 리눅스 커널의 안정성, 확장성, 웹 서버/애플리케이션 서버와의 호환성 면에서 어떤 발전이 있는지도 연구했다. 웹 서버와 애플리케이션 서버의 단점 규명은 이 글의 핵심 주제가 아니다.
테스트 개요
웹 서빙 테스트의 두 가지 범주
웹 서빙에 사용할 수 있는 두 가지 주요 서버가 있다. 웹 서버와 애플리케이션 서버가 그것이다. 이 글에서는 이들을 웹 서빙이라는 용어로 표현하겠다.
웹서버는 HTTP 프로토콜을 통해 요청을 처리할 때 웹 브라우저에 보여지는 페이지를 공급한다.
애플리케이션 서버는 비즈니스 로직을 다양한 프로토콜(대게 HTTP)을 통해 클라이언트 애플리케이션에 노출하는 일반적인 서버이다. 웹 서버 보다 복잡하고 강력한 기능을 제공한다. 세션 관리, 로드 밸런싱, 메시징, 트랜잭션 관리, 보안 등이 그 기능이다. 어떤 면에서는 애플리케이션 서버는 웹 서버의 상위 개념이다.
리눅스 커널 테스트 환경을 위해 몇 가지 웹 서버와 애플리케이션 서버들을 선택했다. Apache, Jakarta-Tomcat, IBM? WebSphere? Application Server, Jboss 등이다. 이들 대부분은 오픈 소스 프로젝트이고 무료로 다운로드 할 수 있다. (참고자료)
2.4와 2.6 커널의 테스트 차이
테스트 워크로드로서 웹 서버와 애플리케이션 서버를 사용한 2.5/2.6 커널의 테스트 작업은 2.4 커널 보다 훨씬 더 확대된 것이다. 2.4 커널을 테스트 할 때는, Apache와 WebSphere Application Server가 통합 테스트 시나리오에 사용된 유일한 두 개의 서버였다. Web Performance Tool (WPT)은 주요한 웹 테스트 툴로 사용되었다. 웹 서빙 테스트는 커널에 주요한 변화가 생겼을 때 수행되거나 가끔씩 소프트웨어 인증 요청이 있을 때 수행되었다.
2.5/2.6 커널 테스트에서, 보다 견고하고 완전한 테스트 플랜을 만들었다. (참고자료) 테스트 범위, 테스트 방법, 테스트 시간표 등이 그 계획표에 잘 정의되어 있다. 웹 서버와 애플리케이션 서버 테스팅은 통합 테스트, 집중 테스트, 시뮬레이션 테스트에서 광범위하게 사용되었다.
더 많은 서버를 사용할 것 외에도 다양한 웹 클라이언트 테스트 툴(WPT, Hammerhead, Httperf, Pagepoker)을 사용하여 다양한 유형의 사용자 환경을 시뮬레이션 했다. 모든 서버와 클라이언트 툴은 시간에 변화를 주어(24시간/96시간) 실행되었다.
테스트 하드웨어는 인텔 기반의 싱글 프로세서 시스템으로만 제한하지 않았다. 1-way, 4-way, 8-way IBM eServer™ xSeries? 머신에서 수행되었으며 64-bit IBM PowerPC? 시스템에서도 수행되었다. 커널의 단점들은 리눅스 커널 버그 트래킹 시스템에 개방되었다.
2.6 커널의 주요 변화
웹 서빙은 엔터프라이즈 세계에서 중요한 역할을 한다. 2.6 커널은 엔터프라이즈 애플리케이션에 맞게 발전과 변화를 거듭했다. 새로운 하드웨어 지원, 소프트웨어 지원, 커널 내부 향상으로 인해 2.6 커널은 보다 확장성있고 안정적인 커널이 되었다. 2.6 커널은 많은 CPU와 많은 메모리, 높은 부하 하에서도 2.4 커널 보다 훨씬 낳은 수행력을 보였다. 2.6의 몇 가지 핵심 기능들은 엔터프라이즈 애플리케이션에 딱 들어 맞는다:
새로운 하드웨어 지원
리눅스는 광범위한 하드웨어 플랫폼을 지원한다. 2.6 커널은 64-bit PowerPC, 64-bit AMD Opteron, 임베디드 프로세서 같은 새로운 아키텍쳐를 지원한다.
하이퍼 쓰레딩(Hyper-threading)
하이퍼 쓰레딩은 2.6 커널에서 돋보이는 하드웨어 레벨의 변화이다. 기본적으로 하이퍼 쓰레딩은 동시 멀티 쓰레딩 기술(SMT)를 사용하여 하나의 물리적 프로세서에 기반하여 많은 가상 프로세서들을 만들 수 있다. 멀티 애플리케이션 쓰레드는 하나의 프로세서에서 동시에 실행될 수 있다. 이를 완전히 사용하기 위해서는 멀티쓰레디드 애플리케이션이 필요하다.
하이퍼 쓰레딩으로 웹 서버와 애플리케이션 서버는 많은 혜택을 누릴 수 있다. 프로세스 될 수 있는 트랜잭션의 수를 늘릴 수 있고 서버 응답 시간이 빨라지며 많은 워크로드와 더욱 많은 사용자 요청을 서버가 핸들 할 수 있다. 현재는 Intel Pentium 4 Xeon 프로세서에 하이퍼 쓰레딩 하드웨어가 빌트인 되었다.
NUMA (Non-Uniform Memory Access)
NUMA는 시스템 퍼포먼스를 향상시키기 위해 리눅스 2.6 커널에 추가된 또 하나의 주요 기능이다. 전통적인 멀티프로세서 지원 모델(symmetric multiprocessing(SMP))에서 각 프로세서는 메모리와 I/O에 같은 액세스를 가지고 있다. 프로세서 버스의 높은 경쟁률은 퍼포먼스 병목현상의 원인이 된다. NUMA 아키텍쳐는 프로세서 버스에 부하를 늘리지 않고도 프로세서 속도를 높일 수 있다. NUMA 시스템에서 각 프로세서는 메모리의 일부와 유사하다. 프로세서는 노드라고 하는 더 작은 구역에 정렬된다. 각 노드는 자신의 프로세서와 메모리를 갖고 있다. 다른 노드 보다는 로컬 노드에서 메모리에 액세스 하는 것이 더 빠르다. 노드 간 통신을 최소화 하면 시스템 퍼포먼스를 높일 수 있다.
NUMA 하드웨어를 지원하기 위해 리눅스 커널은 스케쥴러, 다중-경로 I/O, 사용자 레벨 API 내부 커널 API를 추가했다.
디바이스 지원 확대
2.6 커널에서는 더욱 많은 유형의 디바이스들이 지원을 받는다. 2.6 커널은 메이저 넘버의 한계를 255에서 4095로 확대하고 유형 당 백만 개 이상의 하위 디바이스를 허용했다. 최첨단 엔터프라이즈 시스템의 효율적 지원이 기대된다.
쓰레딩 향상
2.6 커널은 새로운 쓰레드 라이브러리인 Native POSIX Thread Library (NPTL)를 채택했다. 이 새로운 라이브러리는 1:1 모델과 완전한 POSIX 호환에 기반한다. Red Hat에서 수행된 테스트에서, NPTL을 사용하여 구 IA-32 dual 450MHz PII Xeon 시스템에서 100,000 쓰레드가 만들어질 수 있고 2.3초안에 파괴될 수 있다는 결과가 나왔다.
NPTL은 SMP 환경에서 멀티 쓰레딩 애플리케이션의 퍼포먼스 향상에 기여했다. 대단위의 멀티 쓰레디드 엔터프라이즈급 애플리케이션- Java? 애플리케이션, 웹 서버, 애플리케이션 서버 애플리케이션-에 특히 가치가 있다.
2.6 커널의 또 다른 쓰레딩 향상을 들자면, 할당될 수 있는 PID의 수가 32,000에서 10억 개로 증가했다는 것이다. 쓰레딩의 변화로 인해 높은 부하 시스템에서의 애플리케이션 시작 퍼포먼스가 향상된다.
O(1) 스케쥴러
O(1) 스케쥴러는 2002년 공식적인 리눅스 2.5 커널 트리에 허용되었다. O(1) 스케쥴러는 리눅스 확장성과 전체 퍼포먼스를 높인다. O(1)은 많은 태스크와 CPU에 더욱 잘 확장되고 CPU들 간 태스크 바운싱을 피한다. O(1) 스케쥴러는 CPU와 NUMA 인식의 로드 밸런싱을 통한 로드 밸런싱을 적용한다..
I/O 향상
Block I/O Layer
2.6 커널의 Block I/O Layer는 커널 확장성과 퍼포먼스를 위해 재작성되었다. 2.4의 글로벌 I/O 요청 락(lock)은 제거되었다. 2.6 커널의 block I/O 버퍼 (kiobuf)는 PAGE_SIZE 보다 큰 I/O 요청을 허용한다. 대부분의 문제들은 버퍼 헤드와 kiobuf의 사용 때문에 발생하고 새로운 레이어에서 다뤄진다. I/O 스케쥴러는 전부 재작성되었다. SCSI 지원에 있어 혁혁한 향상을 보인다.
비동기식 I/O
비동기식 I/O는 2.6 커널의 새로운 점이다. 웹 서버와 데이터베이스 같은 엔터프라이즈 애플리케이션들이 복잡한 내부의 풀링(pooling) 메커니즘에 의지하지 않고서도 확장될 수 있는 방식을 제공한다. .
기타
이외에도 뚜렷한 변화와 새로운 기능들이 몇 가지 있다. 예를 들어 2.6 커널은 여러 가지 새로운 파일 시스템들을 지원한다. JFS, XFS, NFS v4, Andrew File System (AFS) 등이 그것이다. 새로운 네트워킹 프로토콜과 기능들 (Stream Control Transmission Protocol (SCTP), Internet Protocol Security (IPSec), IPv6 지원 확대, IP Payload Compression (IPComp) 등은 리눅스 2.6 커널의 네트워크 안정성과 전송 품질에 기여했다.
2.6 커널의 이런 개선점들이 엔터프라이즈 애플리케이션에 모두 적용되는 것은 아니다. 특별한 하드웨어 및 소프트웨어 요구 사항들이 있기 마련이다. 하지만 여기에서 언급한 대부분은 리눅스가 엔터프라이즈 장벽을 깰 수 있도록 하는데 기여한 것은 틀림없다.
테스트 인프라
이 섹션에서는 웹 서빙 테스트가 수행되었던 방법을 설명하겠다. 하드웨어 환경을 포함하여 웹 서버/애플리케이션 서버와 웹 테스트 툴, 전형적인 테스트 시나리오를 이용한 테스팅 전략 등을 소개하겠다. 이어지는 논의는 2.6 커널 기반이다.
웹 서빙 서버
리눅스 2.6 커널 테스팅에는 네 개의 웹 서빙 서버가 사용되었다. 두 개는 웹 서버(Apache 와 Jakarta-Tomcat)이고 나머지 두 개는 애플리케이션 서버(WebSphere Application Server 와 Jboss)이다.
Apache는 시장을 선도하는 웹 서버이다. Netcraft Web Server Survey는 64% 이상의 웹 사이트가 Apache를 사용하고 있음을 밝힌 바 있다. 이는 오픈 소스 프로젝트이다.
Jakarta-Tomcat은 Apache 라이센스로 사용할 수 있는 JSP 환경을 포함하고 있는 오픈 소스 서블릿 컨테이너이다. Jakarta-Tomcat은 빌트인 웹 서버를 가지고 있고 다른 환경의 웹 서버를 이용할 수도 있다.
WebSphere Application Server는 엔터프라이즈급 애플리케이션 서버로서 동적 이비지니스 애플리케이션을 위한 서버이다. J2EE와 웹 서비스는 이 서버의 기초가 된다. IBM WebSphere Application Server는 고성능의 확장성 있는 트랜잭션 엔진을 제공한다. 점점 더 많은 WebSphere 애플리케이션 서버들이 전통적인 UNIX OS에서 리눅스로 마이그레이션 되고 있다. 비슷한 퍼포먼스에 가격이 더 적게 들기 때문이다.
Jboss Application Server 역시 완전한 J2EE 기능을 갖춘 오픈 소스 애플리케이션 서버이다. 오픈 소스 EJB 컨테이너로 시작한 Jboss는 엔터프라이즈 애플리케이션 서버를 겨냥하고 있다.
웹 테스트 툴
상당수의 웹 테스트 툴과 벤치마크를 온라인으로도 이용할 수 있다. 다음은 네 개의 오픈 소스 툴로서 2.6 커널 테스트 환경에서 웹-클라이언트 스트레스를 시뮬레이션 할 때 사용했었다.(참고자료):
Httperf는 웹 서버 퍼포먼스 측정 툴이다. Httperf 툴은 요청이 발생하는 비율, 총 연결 수, 타임아웃 한계 등을 제어할 수 있다.
Hammerhead는 스트레스 테스트 툴로서 웹 서버 테스트에 쓰인다. Hammerhead는 IP 앨리어스에서 많은 커넥션을 초기화하고 많은 (256+) 사용자들을 주어진 시간동안 시뮬레이션 할 수 있다.
PagePoker는 웹 서버 테스팅 기능을 갖춘 브라우저 에이전트를 정의하는 Perl 패키지이다. PagePoker는 멀티 클라이언트, 스트레스 테스팅, 벤치마킹을 포함하여 다양한 사용자들을 위한 세 개의 스크립트를 제공한다.
Web Performance Tool (WPT)은 IBM이 개발한 웹 테스트 툴이다.
웹 서빙 테스트에서 논의한 툴 외에도 Trade3(IBM) 라는 툴도 있다. 이것은 WebSphere end-to-end 벤치마크 이며 퍼포먼스 샘플 애플리케이션이다. Trade3 벤치마크는 온라인 주식 거래 애플리케이션을 모델링하고 WebSphere 컴포넌트와 기능을 구동하여 실제 워크로드를 제공한다.
테스트 전략
웹 서빙 테스트는 시스템을 전체적으로 관찰하는 사용자 시나리오를 만들기로 했다. 테스트 기간의 경우, 첫 번째 실행은 24시간 이다. 두 번째 실행은 96 시간으로 늘렸고 세 번째, 네 번째 실행은 각각 7일과 14일로 늘어났다. 서버와 클라이언트 툴의 다양한 조합에 근거한 모든 시나리오는 8-way IBM xSeries 및 pSeries? 서버에서 실행되었다. 시스템 유틸리티 모니터링 툴은 커널 스트레스 레벨을 기록하는데 사용되었다.
그림 1은 다양한 테스트 툴들이 다양한 웹 서버 또는 애플리케이션 서버로 가는 방법을 보여준다. 다양한 테스트 툴은 다양한 유형의 사용자 환경을 시뮬레이션 하려고 했다.
그림 1.테스트 환경
그림 2는 IBM WebSphere 제품과 벤치마크 툴(Trade3)을 사용하는 스트레스 테스트 환경이다. 온라인 주식 거래 환경을 시뮬레이션 했다.
테스트 결과 요약
이 섹션에서는 2.4/2.6 커널에서 사용한 전형적인 시나리오에 근거한 웹 서빙 테스팅의 스냅샷을 보여주겠다. 8-way SMP IBM xSeries 시스템에서 수행된 전형적인 Apache/WPT 테스트는 2.6 커널에서 눈에 띄는 퍼포먼스 향상을 보여주고 있다.
테스트 환경
Machine: IBM xSeries Netfinity 8500R 8681-7RY
CPU: (8) Pentium III-700MHz
Memory: 9 GB
Swap space: 2 GB
Linux distribution: Red Hat 7.3
Web server: Apache Http Server 2.0.47
Web test tool: WPT 1.9.4
관찰
두 개의 테스트가 같은 시스템, 같은 설정으로 수행되었다. 유일한 차이는 커널 버전이였다.
자동화된 웹 서비스 툴(WPT)은 웹 클라이언트를 시뮬레이션 하는데 사용하였다. 30 개의 가상 클라이언트가 만들어졌고 각 클라이언트는 두 개의 쓰레드를 가졌다.
같은 기간동안, 2.6 커널에서, Apache 서버는 2.4 커널 보다 6 배나 많은 웹 페이지를 공급했다. 2.6 커널의 페이지 프로세싱 시간은 2.4 커널의 5분의1에 불과했다.
서버 조기 종료, 요청 쓰기 실패, 타임아웃 등의 연결 실패는 24시간 실행 시간동안 발생하지 않았다.
표1. 결과 비교
커널
CPU사용 평균
메모리 사용 평균
스왑 사용 평균
제공된 총 웹 페이지
초당 제공된 페이지
프로세스 시간(millisecs)
연결 실패
2.4.18 -smp
100% (user:7.38% system:92.62%)
6.41%
0%
8,845,147
102.37
294.44
0
2.6.0 ?test5
99.42% (user:39.35% system:60.07%)
35.96%
0%
53,827,939
623.00
57.71
0
그림 3. 제공된 웹 페이지 vs. 시간
참고자료
test plan & execution plan
Linux kernel bug tracking system.
Httperf
Hammerhead
PagePoker
Rational Suite Test Studio & WebSphere Studio Workload Simulator
Trade3
ApacheJakarta-Tomcat, IBM WebSphere Application Server & Jboss
What’s new in Linux 2.6
The Wonderful World of Linux 2.6
"Improving Linux kernel performance and scalability" (developerWorks, January 2003)
"Putting Linux reliability to the test" (developerWorks, December 2003)
developerWorks Linux zone.
Linux section
본문 기사 : http://www-903.ibm.com/developerworks/kr/linux/library/l-web26.html