멀티프로그래밍 위키로 바로가기 → http://www.devnote.net/wiki
Mark Russinovich가 최근에 발표한 VMMap은 놀라울 정도로 자세하게 프로세스의 가상메모리와 물리메모리 사용 상태를 빠르고 보기 쉽게 보여줍니다. 그 전에는 디버거를 사용하여 분석해야만 했던 것을 보기 쉽게 색깔별 종류별로 UI에 표시해 주는데 정말 유용한 메모리 분석 툴이라고 생각됩니다.

특히, 서버프로그램의 경우 가상/물리 메모리 사용량 뿐만 아니라 Free 메모리 리스트를 확인하므로써 얼마나 메모리가 단편화 (fragmentation)되어 있는지 쉽게 알 수있습니다. (아주 오랫동안 실행 중인 서버프로그램은 메모리 단편화로 결국 언젠가 재시작해야만 합니다)
크리에이티브 커먼즈 라이센스
Creative Commons License

.NET을 사용한 "managed code"로 프로그래밍을 하는 경우, 무조건 한 쓰레드 당 1MB의 스택 메모리를 사용합니다. 제가 전에 쓴 이 포스팅도 참고하기 바랍니다.

다른 예를 들어보면 만약 .NET을 사용하여 서버를 제작할 때 하나의 클라이언트에 하나의 스레드를 할당하게 된다면, 1024명의 동접 사용자가 있을 경우 이미 스택 메모리를 위해서만 1GB 메모리가 사용된다는 것 입니다.

또, 쓰레드를 많이 생성시켜 병렬처리를 하는 예에서도 이러한 Managed 쓰레드의  메모리 사용이 걸림돌이 됩니다.
크리에이티브 커먼즈 라이센스
Creative Commons License

2008년 한 해도 벌써 끝나가고 있습니다. 지난 2주 동안 잠시 가족들과 한국을 방문하였는데, 정신없이 시간이 지나가더군요. 오랜만에 서울에서 운전했는데, 여기 시애틀에서보다 5배는 힘든 것 같았습니다. 그런데, 운전중에 DMB TV를 시청하는 택시 운전사를 보고 기가 막혔습니다. 사람들은 여전히 무척 복잡하고 바쁘게 움직이고 있었으며, 다이나믹한 에너지가 느껴졌습니다. 아마도 제가 살고 있는 곳이 서울과 같은 대도시에 비교하면 워낙 시골같은 분위기라 그런것 같더군요. 한국의 경제가 벌써 많이 어려워지고 있는 것 같아 걱정스러웠습니다. 주변에 주식이나 펀드로 돈을 잃은 사람이 많았습니다. 물론 저도 좀 잃었긴합니다.

크리스마스 선물로 회사로 부터 Amazon Kindle 을 받았는데, 처음으로 구입한 책이 The Return of Depression Economics and the Crisis of 2008 입니다. 내년엔 경제가 더 어려울 것이라는 전망이 나오는 상황에서 이 책을 읽고, 현 경제 위기가 왜 발생했는지 조금이나마 이해할 수 있기를 바랍니다. Kindle은 무엇보다도 다른 부가 비용없이 어디서나 무선 데이터 통신을 할 수 있다는 점이 마음에 듭니다. 물론 책값에 무선 이용료가 포함되었을 것이라 생각합니다.

휴가에서 돌아와 내년에 할 일들을 생각하니 어께가 무거워 집니다. 마지막으로 아래 최근에 발견한 (특히 고성능 프로그래밍에 관련된) 좋은 문서들이 있어 링크를 복사해 두었습니다.

what-your-computer-does-while-you-wait

Real-World Concurrency

BASE (basically available, soft state, eventually consistent)

크리에이티브 커먼즈 라이센스
Creative Commons License

윈도우즈 횐경에서 서버나 시스템과 밀접한 프로그램을 개발할 때 가장 자주 사용되는 유틸리티  모음이 Sysinternals tool 입니다. 다름 아닌 Windows Internals 의 저자인  Mark Russinovich 가 대부분 개발한 것인데, 보통 Microsoft 자체에서 개발된 것 보다 훨씬 낫습니다. Mark는 결국 현재 Microsoft에서 일하고 있습니다.

아래 링크를 보면 모든 Sysinternals tool이 업로드 되어 있어 쉽게 다운로드 받을 수 있습니다.
http://live.sysinternals.com/tools/

최근 추가된 Coreinfo.exe는 멀티코어 CPU 정보를 보기 쉽게 텍스로 출력해 주기도 하더군요.
크리에이티브 커먼즈 라이센스
Creative Commons License

현재 PDC 2008이 진행되고 있습니다. 직접 참가하지는 못하지만 여러 자료들이 이미 온라인에 올라와 있어 살펴볼 수 있습니다. 아래  Performance에 관련된 PPT 슬라이드 파일들이 올라와 있군요.

http://blogs.msdn.com/vancem/archive/2008/10/30/slides-for-our-all-day-pdc-2008-talks-on-performance-by-design.aspx
크리에이티브 커먼즈 라이센스
Creative Commons License

코맨드라인 디버거인 NTSD, KDB 등을 사용하다보면 전체 스레드의 스택을 살펴 보는 (~*kb) 일을 자주하게 됩니다. 이럴 때면 여러 스레드 콜스택 중에서 특정 함수 호출 부분을 모두 찾는 다거나 특정 모듈을 찾을 경우가 많은데, 커맨드 콘솔의 텍스트 출력을 눈으로 훑어 나가기가 쉽지는 않습니다.


아래와 같은 레지스트리를 설정하면, 콘솔 창에서 "마우스로 원하는 스트링을 선택한 후" 1, 2, 3, 4 중 하나의 방법을 사용하여 색깔을 변경할 수 있습니다. 특히 3과 4가 디버깅 중에 매우 유용합니다.


[HKEY_CURRENT_USER\Console]

"QuickEdit"=dword:00000001

"EnableColorSelection"=dword:00000001     


1.       Alt + [0..9] : 텍스트 색깔 설정

2.       Ctrl + [0..9] : 배경색 설정

3.       Alt + Shift + [0..9] : 선택된 스트링과 같은 모든 스트링의 텍스트 색깔 설정

4.       Ctrl + Shift + [0..9] : 선택된 스트링과 같은 모든 스트링의 배경 색깔 설정

크리에이티브 커먼즈 라이센스
Creative Commons License

윈도우즈 디버깅의 기초에관한 블로그 문서가 처음 디버깅에 입문하려는 사람들에게 매우 유익한 자료가 될 것 같습니다. 물론 비주얼스튜디오의 디버깅 기능에 충분히 만족하는 사람에겐 큰 도움이 되지 못하겠습니다만, 커널레벨의 디버깅을 하려는 사람이나 보다 강력한 기능의 디버거를 원하는 사람에겐 좋은 문서가될 것 입니다.
크리에이티브 커먼즈 라이센스
Creative Commons License

전에 언급한 디버깅 책이 출간되어 주문을 하였는데 어제 도착했습니다. 아마존에서도 판매 중인 이 책은 이른바 (POD: Print On Demand) 방식으로 출판되어 상당히 흥미롭습니다. 이제 개인이나 초보 저자들이 책을 출간하는 것이 정말 쉽게될 것 같습니다.

이 책은 700여 페이지에 달할 만큼 두꺼운 편이나, 많은 부분이 디버깅이나 덤프 파일 분석 과정의  아웃풋을 리스팅해 놓아서 실제 내용은 그렇게 많지 않습니다. 복잡한 문제를 디버깅하는 동안 좋은 레퍼런스가  될 것 같습니다. (물론 대부분 블로그에 있는 내용을 책으로 옮겨 놓은 것입니다). 저자는 메모리 덤프파일을 비트맵 이미지와 wav파일로 변환하여 보고 듣기까지 하는 등 상당히 재미있는 부분도 많이 있습니다.

크리에이티브 커먼즈 라이센스
Creative Commons License

온라인 서비스를 함에 항상 고려해야 할 점은 서비스의 업타임 (uptime) 입니다. 특히나, 24시간 서비스를 목적으로 하는 경우 1년에 얼마만큼의 다운타임을 가질 것이냐는 매우 중요한 문제이며 이러한 온라인 서비스를 회사간에 개발하거나 서비스할 때, 1년에 얼마만의 다운타임을 가질 것인가에 관해 회사간에 계약을 하곤합니다.

다섯 개의 9이라는 이른바 99.999%의 availability를 유지하는 것이 아마도 가장 이상적인 목표입니다. (이는 다시 말해 1년에 5.26분 정도의 다운타임만을 갖는 것). 하지만, five nines를 얻기위해 들어가는 비용이 너무 커서 실용성이 없는 것으로 알려져 있습니다.

온라인 게임도 분명 온라인 서비스 입니다. 그런데, 우리나라 온라인 업체들은 대부분 정기 점검이라는 명목으로 1주일에 무려 서너시간씩 서비스 다운 타임을 갖습니다. 다운타임이 커지는 것은 절대로 바람직한 일은 아닙니다. 특히 전세계를 상대로하는 글로벌 서비스를 하기 시작하면 많은 다운타임이 큰 문제가 될 수 있습니다. 즉, 한국의 수요일 오전이 미국의 오후가 되기 때문에, 이 때 서너시간의 정기점검은 용납되지 않습니다. 서버 개발자들의 큰 목표 중의 하나는 물론 365일 24시간 끊이지 않는 서비스를 제공하는 것입니다.

다운타임을 최소화 하는 데에 걸림돌은 여러 가지가 있으나, 해결이 어려운 것 중의 하나가 memeory fragmentation 입니다. 특히 작은 사이즈의 메모리를 아주 많이 할당/해제하는 경우 32비트 윈도우즈의 가상메모리 주소공간 (기본 2GB)은 단편화되기 쉽습니다. 윈도우즈의 LFH(Low Fragmentation Heap)을 사용하더라도, 중단 없이 실행중인 서버 어플리케이션은 결국 언젠가 memory fragmentation 문제를 만나게 됩니다.

최근 어느 한 서버에서 아래와 같이 Virtual Address Fragmentation 문제가 심하게 나타났는데, 이 서버는 사용 가능한 물리메모리를 충분히 가지고 있었지만, 메모리 단편화로 서비스를 재시작하여야만 하였습니다. (Uncommited range가 많아지는 것은 곧 Virtual Address Fragmentation이 많아 지는 것을 의미합니다)

64비트 프로그램의 경우는 이러한 현상을 매우 완화시킬 수 있을 것으로 생각됩니다.

0:020> !heap -s
  Heap     Flags   Reserv  Commit  Virt   Free  List   UCR  Virt  Lock  Fast
                   (k)     (k)    (k)     (k) length      blocks cont. heap
-----------------------------------------------------------------------------
006c0000 00001002 2565820   7232 658924   1302   160   200    0 44f3b4   LFH
   External fragmentation  18 % (160 free blocks)
   Virtual address fragmentation  98 % (200 uncommited ranges)

길드워 서버들의 uptime을 보면 100일이상 동안 실행 중인 서버들도 많습니다. 길드워 게임의 특징상 (인스턴스 맵) 게임 플레이어들에게 영향을 주지 않고 게임서버를 재부팅 할 수 있습니다. 따라서 최근에는 오랜동안 실행 중인 서버는 일정시간 disable 시킨 후 사용자가 모두 logoff 하게 되면 재부팅하고 윈도우즈 업데이트를 적용하고 있습니다.


크리에이티브 커먼즈 라이센스
Creative Commons License

Dmitry의 CrashDump Analysis Blog 포스팅을 읽다가, 윈도우즈 내부를 공부할 수 있는 좋은 자료를 소개한 것이 있어 아래 링크를 복사해 놓았습니다.


Windows Internal 커리큘럼 자료


그밖에도 마이크로소프트의 Academic Resource Center 에 셀프스터디에 도움이될 좋은 자료가 많이 있습니다.


크리에이티브 커먼즈 라이센스
Creative Commons License