요즘 시스템 퍼포먼스 성능 튜닝을 하고 있습니다. 제가 개발에 참여한 시스템이 Java로 구현되어 있어서, Java 성능 튜닝을 하는 중입니다.
그런데 작업을 하다가 아주 재미난 현상을 발견했습니다. 쓰레드 (아주 작습니다) 를 아주 빠른 주기로 생성해서 프로세싱을 하는데 (하다가 성능이 잘 안나올 것 같아서 쓰레드 풀을 만들어 쓰고 있습니다) 쓰레드 객체가 new되어서 실제로 run 되는데 까지 16ms가 (정확하게는 15.5ms쯤 되는 것 같습니다) 걸리는 현상이 1초당 20~40회 정도 목격된 것이죠.
이 현상이 최초로 목격된 것은 Windows 2003 서버였는데, 비스타나 Windows 7에서도 똑같았습니다.
그래서 쓰레드를 만드는 부분의 코드만 아주 작은 테스트 프로그램으로 분리한 다음에 Windows 시스템들에서 각각 돌려봤습니다. 똑같더군요. ㅋㅋ
같은 프로그램을 Mac OS X에서 돌려봤습니다. 거기서는 그런 현상이 관측되지 않았습니다. Mac OS X에서 실행한 그래프는 다음과 같습니다. Eclipse를 썼습니다. 프로그램 초반에는 쓰레드 풀과 객체 풀이 초기화되느라 약간의 삽질을 하는 것이 보입니다만, sample 수를 감안한다면 적당한 성능을 보입니다.
Windows 플랫폼에서는 가로줄이 0과 16ms 위치에 두 줄 그어집니다. 이 문제를 해결하기 위해서 웹 써치를 좀 했는데, 아무래도 실제로 성능이 그렇게 나오기 때문에 그런 그래프가 그려진다기 보다는, System.currentTimeMillis() 의 resolution이 Windows에서 떨어지기 때문인 것 같더군요.
이 문제를 workaround하기 위한 한 가지 방법은, (measurement가 중요한 환경이라면) System.currentTimeMillis()를 쓰는 대신 System.nanoTime()을 쓰는 것입니다. 그러면 Windows XP 상에서 다음과 같이 성능 측정 결과가 개선되는 것을 볼 수 있습니다.
Y 축은 nanosecond를 millisecond로 변환한 결과입니다. 측정된 성능은 확연하게 나아졌습니다. (Mac OS X보다 낫다고 하긴 뭐합니다. 이 위에 Mac OS X에 대해 그린 그래프는 System.nanoTime을 써서 그린 그래프가 아니라서 정확한 비교자료가 될 수 없거든요.)
가장 기본적인 가정은, LM70에는 Fedora Core 6가 제일 잘 맞더라, 하는 것입니다. Ubuntu는 시도해보지 않아서 잘 모르겠습니다.
1. Windows 설치
LM70에 Windows XP 설치 CD를 넣고 시도해 보면, 잘 안됩니다. 장치 Configuration을 검사하다가 뻗어버리는데, 기본적으로 Windows 인스톨러에 SATA 관련 기능이 없는 탓도 있을 것이고... 아무튼 잘 되질 않습니다. 가장 쉬운 방법은 시스템 부팅 시 F11 버튼을 눌러 Xnote의 시스템 복구 기능을 구동시키는 것입니다.
이 기능이 구동된 후에는 파티션을 나눈다거나 하는 작업을 고급 설정 부분에서 할 수 있습니다. 유의할 것은 Windows가 하드 디스크 상의 첫번째 파티션이 되어야 한다는 점입니다. 그렇게 잡지 않으면 LM70의 시스템 복구 기능이 제대로 동작하지 않습니다. 저는 Windows 용으로 25G 정도의 용량을 잡아주었습니다.
파티션을 나눈 다음에는 한번 재부팅 한 다음에 (왜 그런지 모르겠지만, 재부팅하지 않으면 복구 후에도 Windows가 정상적으로 부팅되지 않습니다) 앞서 만든 주 파티션에 Windows를 복구해주어야 합니다. 그런 다음에 Windows가 정상적으로 부팅되면 이제 프로그램을 깔아준다던가, 네트워크를 잡는다거나 하는 작업들을 해 주면 됩니다.
2. Linux 설치
Windows가 제대로 설치된 다음에는 Linux 설치는 오히려 간단합니다. 설치 화면이 실행되고 다음 버튼을 눌러나가다 보면 하드 디스크 파티션과 관련된 화면이 나올텐데, 여기서 "하드 디스크 여유 공간에 기본 파티션 설정"을 선택한 다음 계속 진행해 나가면 됩니다. sda1은 Windows 용, sda2는 부트 이미지가 들어가는 영역인거같구요, sda3에 Linux 파일들이 깔리게 됩니다.
그런 다음에 다음 버튼을 누르다보면 부트로더 설치(GRUB)와 관련된 화면이 나오고 거기에 부팅할 OS 목록이 나옵니다. 두 번째 OS가 아마 Other로 나올텐데, 여기서 그 목록을 클릭한 다음 오른쪽의 편집 버튼을 눌러 그 이름을 Other에서 Windows XP로 바꾸어주면 됩니다.
그런 다음에 나오는 화면은 뭐 별로 어려운 부분이 없으니까 그냥 넘어가도 됩니다.
설치가 제대로 되었으면 이제 GSynaptics를 설치하고, 무선랜을 잡아주는 작업을 해 주면 됩니다.
GSynaptics 설치를 하는 제일 쉬운 방법은, yum install gsynaptics를 실행하는 것입니다. 소스 설치를 하려면 (왜?) GSynaptics 홈페이지에 가서 소스를 다운받아 컴파일을 해 주면 되는데, FC6 설치 직후에 컴파일을 하려면 ./configure부터 잘 안될겁니다. yum install perl-XML-Parser를 입력하여 관련 모듈을 설치한 다음에 ./configure; make; make install 하면 됩니다. (당연히 make install 하려면 super user가 되어야.. ㅎㅎ)
그런 다음 gsynaptics를 실행해 보면... 또 안됩니다. ㅋㅋ
/etc/X11/xorg.conf에 보면 Section InputDevice 부분이 있습니다. 다음과 같이 편집합니다.
이렇게까지 하고 재부팅해보거나 X 서버를 다시 실행시킵니다. 그런다음 명령행 상에서 gsynaptics 프로그램을 실행시키면, 터치패드를 켜고 끌 수 있습니다.
그런 다음에는 무선랜을 잡아야 하는데요.
rpmfind.net에서 ipw2200-firmware-3.0.9-noarch.rpm을 갖다가 깝니다. 그런 다음 재부팅해보면 eth1 (무선랜)이 제대로 올라오는 것을 볼 수 있습니다.
그런 다음에는 시스템->관리->Services 에서 NetworkManager와 NetworkManagerDispatcher 두개를 다 살려줘야합니다. 그러면 화면 상단 구석에 NetworkManager 애플릿이 떠서 인터페이스들을 관리하는 것을 볼 수 있습니다. 뜨지 않는다면 로그아웃했다가 다시 로그인해보면 뜰겁니다. (그래도 안되면 재부팅 ㅋㅋ)
네트워크 정보의 좋은 소스셔서 감사합니다 ,내가이 기사를 읽고 오랫동안 귀하의 사이트를 추적 유지되었습니다, 내가 더 관심을 지불할 것입니다 흥미로운 읽을 수 있습니다,기사가 가장 고전적인 스타일 중 하나가, 내가 한 번 읽으면, 내가 그http://www.bootsuggsale.org/
들과 사랑에 깊이되었습니다이며, 좀 더 완벽한 작품을 기대
네트워크 정보의 좋은 소스셔서 감사합니다 ,내가이 기사를 읽고 오랫동안 귀하의 사이트를 추적 유지되었습니다, 내가 더 관심을 지불할 것입니다 흥미로운 읽을 수 있습니다,기사가 가장 고전적인 스타일 중 하나가, 내가 한 번 읽으면, 내가 그들과 사랑에 깊이되었습니다이며, 좀 더 완벽한 작품을 기대
댓글을 달아 주세요
딴 얘기지만, 1. 퍼포먼스 테스트 툴은 무엇으로 하셨나요? 2. 떡밥보다 밑밥에 관심이 가네요. 그래프는 무엇으로 만들었지요?
2010/01/29 20:50 [ ADDR : EDIT/ DEL : REPLY ]테스트 프로그램은 직접 만들었구요. 그래프는 gnuplot으로 그렸습니다.
2010/01/30 19:57 [ ADDR : EDIT/ DEL ]알고보니 꽤 유명한 버그로군요. (버그라기 보다는 시스템마다 타이머 resolution이 달라서 빚어지는 현상인듯.)
2010/01/31 13:01 [ ADDR : EDIT/ DEL : REPLY ]http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4814012
http://www.microsoft.com/whdc/system/CEC/mm-timer.mspx
http://bugs.sun.com/view_bug.do?bug_id=5091934
해결하는 방법은
-XX:+ForceTimeHighResolution
이 옵션을 JVM에 주는 것이라고 합니다.(그런데 이 옵션 사라진듯 ㅎㅎ) 그게 잘 안될때는
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6435126
http://blogs.sun.com/dholmes/entry/inside_the_hotspot_vm_clocks
이 방법을 쓰는 수도 있다는군요. 테스트 해 보고 다시 포스팅하겠습니다.
원 글의 내용을 실험 결과를 반영해서 조금 고쳤습니다. :-)
2010/01/31 14:55 [ ADDR : EDIT/ DEL ]