2017년 11월 28일 화요일

ODROID-MC1으로 모네로(XMR) 채굴하기

 요즘들어 비트코인이 한창 이슈가 되고 있다. 

 그것도 그럴 것이, 올해 들어서만 비트코인 가격이 거의 10배 가량 올랐기 때문이다. 내 경우에는 작년 상반기에 이더리움이라는 암호화 화폐에 관심이 생겨서, DAPP도 만들어보고, GPU 채굴도 해보고, 트레이딩도 해봤던 경험이 있다. 채굴은 채굴기 1대 정도만 셋팅해서 돌렸기 때문에 소소한 용돈 벌이 정도에 그쳤고, 트레이딩에서 트럼프가 당선되는 덕분에 짭짤한 수익을 올렸었다. 당시 비트코인과 이더리움을 모두 정리했던 시점의 시장 가격이 원화로 비트코인은 90만원, 이더리움은 1만원 정도로 형성되어 있었다. 오늘(2017-11-29) 시세와 비교하면 비트코인은 약 13배, 이더리움은 약 58배 가량 올랐다.

 각설하고, ODROID-MC1이라는 임베디드 병렬 컴퓨팅용 제품을 사용하여 암호화 화폐의 하나인 모네로(XMR)을 채굴하는 방법을 소개한다. ODROID를 사용하여 암호화 화폐를 채굴 하는 것에 대한 주제는 과거 라이트코인(LTC)이 출시 되었을때부터 현재까지 지속적으로 ODROID forum에서 인기있는 주제 중의 하나이다. 왜냐하면, 라즈베리파이나 ODROID와 같은 SBC는 주로 CPU를 ARM 아키텍처를 사용하는데, ARM 아키텍처는 우리가 사용하는 PC에서 사용되는 x86 아키텍처와 비교하면 컴퓨팅 성능은 뒤쳐지지 않으면서도, 저전력을 자랑한다. 암호화 화폐 채굴을 하면서 가장 많이 드는 유지비가 전기세임을 감안했을때, ARM 아키텍처의 저전력 특성은 채굴자에게 매우 매력적인 특성이다.

 더군다나, ODROID-MC1은 현존하는 SBC 중에 가격대비 컴퓨팅 성능이 최상급이다. 물론, 코어가 96개씩이나 달려있는 ARM 서버도 있고, MC1보다 훨씬 저렴한 보드들도 많지만, 이정도 가격에 이만한 컴퓨팅 성능을 가진 제품은 찾기가 힘들다. 
ODROID-MC1, Exynos5422 칩이 탑재된 4개의 보드가 1개 셋트로 구성된다.  파워서플라이는 별매.

 모네로 채굴을 하기 위해서는 우선 채굴기 프로그램을 동작 시킬 운영체제를 설치해야한다. ODROID도 마찬가지 이지만 라즈베리파이를 포함하여 대부분의 SBC (Single Board Computer)는 운영체제 이미지를 통으로 제공한다. 운영체제 이미지를 다운로드 받아서 리눅스의 dd 명령어나 Etcher 같은 프로그램을 사용하여 SD 카드에 굽는다. PC에서 iso 파일을 CD나 USB 스틱에 굽는것과 동일하다고 보면 된다.

 Ubuntu 16.04.3 이미지를 다운로드 받아서 SD 카드에 굽는다. 오늘 기준으로 최신 4.14 리눅스 커널이 설치된 Ubuntu 이미지가 앞서 링크한 이미지 뿐이지만, 향후 Ubuntu minimal 버전이 나오면 Ubuntu minimal 버전을 추천한다. 단순 채굴용으로 쓰기에는 데스크탑 버전 운영체제는 불필요한 패키지가 너무 많아 무겁다. Etcher를 사용하여 운영체제 이미지를 SD 카드에 굽는 방법은 Install Linux 위키 페이지를 참고바란다. 위키 페이지의 운영체제 받아오는 부분은 스킵하고, Etcher 프로그램을 실행하는 단계부터 참고하면된다.

 ODROID-MC1은 HDMI 디스플레이 포트가 없으므로 설치된 Ubuntu의 콘솔에 접근하려면 USB-UART Module Kit을 사용하여 Serial 콘솔을 사용하거나 각 보드의 IP를 알아내서 ssh로 원격 접속해야한다. ODROID 보드 IP를 알아내는 방법은 Headless setup 위키 페이지를 참고하자. 하드커널에서 제공하는 Ubuntu 데스크탑의 기본 계정은 odroid, 비밀번호도 동일하게 odroid 이다.

 각 보드에 접속해서 가장 먼저 해야 할 것은 운영체제를 최신으로 업그레이드 하는 것이다. 

$ sudo apt-get update
$ sudo apt-get upgrade && sudo apt-get dist-upgrade
$ sudo apt-get install linux-image-xu3

linux-image-xu3 패키지를 설치하여 커널 업그레이드를 수동으로 해야한다. linux-image-xu3 패키지를 설치 할 때 다이얼로그 박스가 나오면 "No"를 선택하여 커널 설치를 마저 진행한다.

다음으로 모네로 마이너 프로그램에 필요한 패키지들을 설치한다.

$ sudo apt-get install build-essential git cmake libmicrohttpd-dev libuv1-dev

 다른 채굴 프로그램은 ARM 아키텍처를 제대로 지원하지 않거나 ARMv8 아키텍처만 지원해서 채굴 프로그램으로 xmrig를 사용하였다. xmrig를 github 저장소에서 받아서 컴파일 한다. 참고로 현재 배포버전(2.4.2)에는 아직 MC1을 지원하지 않으니, github 저장소의 개발 버전을 빌드해서 설치해야 한다. 향후 aa4f8b6 커밋이 포함된 배포버전(2.4.3?)이 나오면 그것은 MC1을 지원 할 듯 싶다.

$ git clone https://github.com/xmrig/xmrig.git
$ cd xmrig
$ cmake .
$ make -j8

빌드가 성공적으로 끝났으면 테스트 삼아 마이닝을 해보자. MC1으로 모네로 채굴시에 채굴 풀은 DwarfPool을 추천한다. 왜냐하면, 다른 풀은 채굴 난이도(difficulty)가 높은 것들뿐이라 MC1과 같은 낮은 해쉬량을 물리면 accept가 잘되지 않는다. DwarfPool은 난이도 20000 짜리 포트가 있어서 그것을 사용하는 것을 추천한다. 

$ ./xmrig -o xmr-usa.dwarfpool.com:8005 -u YOUR_WALLET -p x -k -t 8

MC1에서 XMR 채굴시 해쉬량과 CPU, Memory 사용량
해쉬량은 대당 26.6 H/s 정도로 꾸준히 나온다. 전력 소모량은 대당 5V x 2A = 10W 정도이다. 전압을 4.7이나 4.6 정도로 떨어뜨려 전력 소모량을 좀 더 줄일수도 있지만, 보드가 오동작 할 여지가 있으므로  안정적인 5V 전압을 사용하는 것을 추천한다.

2017-11-29 11:12 기준 MC1 1대당 XMR 채굴 채산성
ODROID-MC1은 4대가 1세트이니, 세트당 해쉬량은 26.6 x 4 = 106.4 H/s 이다. 아래 영상과 같이 몇백대, 혹은 몇천대 단위로 돌리면 꽤나 해볼만하다. 적어도 오늘 기준으로는 말이다.



최적화

사실 이 내용은 쓰지 않으려고 했는데, MC1에서 XMR 채굴시 해쉬량을 좀 더(혹은 몇배?) 늘릴 수 있는 여지가 있다. 여기서 다루는 내용은 필자와 같은 시스템 프로그래머를 위한 내용이니 본인이 해당되지 않는다면 그냥 패스하길 바란다. 이 파트에서 다루는 내용은 최소한 채굴 프로그램과 리눅스 커널등을 본인이 원하는 대로 수정할 수 있는 스킬을 가지고 있는 사람을 위한 것이다. 다음과 같이 최소 2가지 최적화 포인트가 존재한다.

1. Exynos5422의 Security Sub System 활용하기
Exynos5422 칩 내부에 암호화 관련 기능이 포함되어 있다. 속칭 SSS (Security Sub System)라고 하는데, 여기서 AES나 SHA등 채굴 프로그램에서 사용하는 암호화 알고리즘을 칩단에서 하드웨어적으로 처리 할 수 있다. 특히나 AES는 모네로 채굴 알고리즘인 cryptonight에서 사용되는 알고리즘이니 이것을 활용할 수 있으면 AES 처리 성능이 많이 향상 될 것이다.

2. CPU + GPU 하이브리드 마이닝
Exynos5422에는 채굴 프로그램이 동작 시킬 수 있는 Mali-T628라는 GPU가 있다는 것을 얘기 안했던가? MC1에서 채굴자에게 익숙한 GPU 마이닝도 가능하다. AMD 그래픽 카드와 같이 Mali도 OpenCL 라이브러리를 사용하여 컴퓨팅 용도로 GPU를 쓸 수 있다. CPU로만 XMR 채굴시에 아직 메모리에 여유가 있으니 GPU도 채굴용으로 돌리게되면 채굴량이 증가 할 것이다. Mali-T628의 6개 코어 중에서 컴퓨팅용으로 사용할 수 있는 코어는 2개이다. 참고로 이더리움은 메모리 부족으로 GPU 마이닝이 불가능하고, ZCASH는 GPU 마이닝이 가능하긴 하나, 메모리 부족으로 1개 GPU 코어만 돌아가므로 해쉬량이 매우 떨어진다. (즉, GPU 마이닝에 최적화된 코인은 MC1으로 채굴 하지말란 소리다.)

Equihash (ZEC, BTG, ...) 채굴 프로그램인 silentarmy에서 GPU 목록 가져오기


2017년 8월 15일 화요일

자전거 국토종주(서울 ~ 부산) 후기


준비물

  • 자전거: MTB or 로드
  • 헬멧
  • 고글
  • 쿨토시
  • 자전거 바지
  • 운동복 상의
  • 속옷 + 여벌
  • 양말 + 여벌
  • 썬크림
  • 안면마스크
  • 갈아입을 옷

총평

  • 할만하다
  • 한번쯤은 해볼만함. 두번은 비추
  • 왜냐면 생각보다 위험하다
  • 3박 4일 일정이라 자전거 페달링 한 기억밖에 없다
  • 일정을 길게 잡고 느긋하게 관광하며 하면 좋을듯

로드 Vs. MTB

  • MTB 추천
  • 속도보다 안정성이 더 중요하다.
  • 오르막이 많다.
  • 4대강 자전거 길이 잘되어 있지만, 간혹 비포장 도로를 달려야 한다.


4대강 사업

  • 종주 중에 90%는 4대강 자전거길을 이용했다
  • 당연하게도 MB 시절 4대강 사업의 결과물(각종 보들) 을 직접 볼 수 있다
  • 각 보마다 홍보관이 있다
  • 실제로 가보면 몇몇 보들은 괜찮았다. 관광지로서는 합격점을 줄만함
  • 실효성은.....(녹조라떼?)

충주

  • 잔잔한 강 줄기가 거울이 되어 하늘이 비춰짐
  • 종주 중에 가장 멋졌던 곳

우천 라이딩

  • 미끄러움. 위험하다
  • 하필 첫날 비가와서 우천 라이딩
  • 내리막 커브길에 미끄러져서 낙차. 헬멧을 안썼다면 염라대왕 면담하러 갈뻔

야간 라이딩

  • 무섭다
  • 4일 중에 2일을 야간 라이딩
  • 자전거 길은 가로등이 없다. 암흑 그자체
  • 전조등 밧데리 잔량 체크 필수

이화령

  • 소백산맥을 넘을때 지나는 코스
  • 긴 오르막과 긴 내리막으로 체력적으로 가장 힘든 코스다
  • 경사가 급하여, 내리막 코스가 오히려 더 힘들다
  • 브레이크 페드 다 닮음. 이 코스를 지나기전에 브레이크 패드 새걸로 교체하는 것을 추천함

5번 국도

  • 엄청 위험했다
  • 대구 ~ 부산 구간에 5번 국도를 타게 된다.
  • 현행 교통법상 국도 자전거 라이딩이 허용된다. 자전거는 가장 우측 차로를 이용한다. 물론, 대형 덤프 트럭도 가장 우측 차로를 달린다. (응?)
  • 법이 허용하더라도 살아서 목표지까지 가려면 가능하면 국도 라이딩은 자제하자. 국도에서 제한속도 70Km/h로 얌전히 달리는 차는 거의 없다. 최소 100Km/h 씩 밟아댄다.
  • 가끔 운이 좋으면 아슬아슬하게 스쳐지나가는 택시들을 볼 수 있다. 택시 아저씨들 묘기 운전을 잘하신다. 운이 나쁘다면......

숙박

  • 3박 중 2박은 Airbnb 이용했고, 하루는 모텔에서 지냈다.
  • 가격대비 퀄리티는 Airbnb가 좋음
  • 숙소에 세탁기가 있으면 편하다

자전거길은 대략 이런 형태이다.  이것처럼 아스팔트로 된 자전거길은 달리기 매우 편하다.

매점에서 군것질하다가 고양이들한테 삥뜯김


부산에 막 진입 하였을때 자전거길. 양 옆 조명이 멋잇었지만 사진은 별로다. 보통 자전거길은 가로등이 전혀 없어서 야간에 전조등이 없다면 못달린다.



2016년 10월 24일 월요일

2016 통영 ITU 트라이애슬론월드컵대회 참가 후기

올해 목표인 트라이애슬론 올림픽코스 완주를 위하여, 통영 트라이애슬론대회에 다녀왔다.

모든게 처음인대다가 혼자서 꾸역꾸역 준비하다보니, 모르는게 많아서 고생스러웠다. 더구나 10월에 접어들면서 야외 훈련을 하기에는 날씨가 추웠고, 지독한 목감기가 낫지 않아서 10월에는 훈련을 거의 하지 못하였다(그럴싸한 핑계. 사실은 게을러서 그렇지. ㅎㅎ). 우선, 트라이애슬론 대회에 참가하려면 준비물이 많이 필요한데, 빠트린것이 없는지 꼼꼼히 챙겨야한다.

트라이애슬론 대회 준비물

  • 사이클(로드 자전거)
  • 사이클 헬멧
  • 경기복
  • 웻슈트
  • 수경
  • 타월
  • 물병
  • 스포츠 고글
  • 러닝화
  • 클릿슈즈(Optional)
  • 에너지젤(Optional)
  • 바셀린(Optional)
스포츠 고글도 반드시 있어야하는 건 아니지만, 내 생각에는 장시간 사이클 라이딩을 하려면 안전상의 이유도 있고 하니 구비하는 것이 좋은 것 같다. 클릿슈즈는 기록에 상관없이 완주가 목적이라면 그냥 일반 운동화에 평페달로도 충분하니 없어도 된다.

경기복은 여기에서 구매(18만원)했는데, 대회장소에 싼 경기복(2만원)을 파는 곳이 있었다. 경기복이 생각보다 비싸서 큰맘먹고 질렀는데, 그걸보고 나니 마음이 아프다. 에너지젤도 대회장에 파는 곳이 있어서 레몬맛으로 현장에서 2개 구매하였다. 개당 3천원?5천원? 까먹음.

웻슈트는 여기에서 렌탈했다. 3만원.

준비물을 주섬주섬 챙겨보니, 평소 메고다니는 가방에 다 안들어간다. 다행이 예전 스노우 보드탈때 샀던 큰 보드 가방이 있어서 거기다가 넣어갔다.

차량 없이 자전거 통영까지 가지고 가기

이번에 경기 외적으로 가장 고생했던 점은 자전거를 통영 대회장까지 가지고 가는 것이었다. 준비물때문에 짐도 많은대다가 자전거까지 가지고 이동하려니 2중고이다. 더구나 차도 없어서, 이것들을 통영까지 가지고 가는 것도 꽤나 벅차다. 

결론만 말하자면, 고속버스를 이용하면 된다. 서울 고속버스터미널에서 통영행 표를 사서, 버스에 타기전에 자전거를 버스 짐칸에 실으면 끝이다. 고속버스터미널까지 가는 길은 지하철을 이용하거나 버스터미널이 집에서 가까우면 자전거 타고 가면 될듯하다.
  • 집 -> 서울 고속버스터미널(지하철)
  • 서울 고속버스터미널 -> 통영 종합버스터미널(고속버스)
  • 통영 종합버스터미널 -> 숙소(택시)
저렇게 이동하였다. 택시에 자전거를 실을때는 앞바퀴를 탈거하고, 뒷좌석에 넣으면 들어간다. 숙소는 대회 한달전에 알아보았는대도 근처 민박집이나 호텔등이 모두 매진되어있었다. 다른 숙소는 대회장에서 너무 멀어서 차가 없는 나에겐 적절치 못하다. 여기저기 알아보다가 Airbnb를 검색해보았는데, 운좋게 대회장에 가까운 민박집이 남아있었다. 나중에 알게된 사실인데, 숙소 바로앞 교차로가 사이클 코스 1번 반환점이었다. ㅎㅎ

대회 전날 등록, 자전거 검차 및 거치

온라인으로 대회 접수를 완료 했으면, 대회 전날에 해양스포츠센터에 등록해야한다. 통영 해양스포츠 센터에 가면 접수장 안내판이 있으니 그것을 보고 갔었다. 등록 절차는 다음과 같다.
  • 벽에 붙은 접수자 명단에서 본인 배번호 확인하기
  • 서약서 작성
  • 신분증과 서약서 제출 및 등록
등록을 하면 손목 밴드를 붙여주는데, 이것이 통영 트라이애슬론 대회 참가자라는 것을 나타내는 것이므로 대회가 끝날때까지 착용하고 있어야한다. 의도적으로 빼지 않는 이상 잘안빠지므로 실수로 잃어버릴 걱정은 안해도 될듯......

손목 밴드를 차고, 등록 물품을 받으러 가야한다. 본인의 배번호가 적힌 비닐 가방을 주는데, 거기에 대회 진행에 필요한 필요 물품들이 들어있다.
  • 수모
  • 경기복용 배번호 2개 및 옷핀(앞, 뒤 착용/레이스 벨트가 있으면 하나만 쓰면된다.)
  • 사이클 헬멧 부착용 스티커용 배번호 3개(좌, 우, 정면 부착)
  • 케이블 타이 및 사이클 부착용 스티커용 배번호 1개(안장 밑에 부착)
  • 기록칩(찍찍이 타입이라 분실하지 않도록 유의, 발목에 착용)
  • 헤나번호(몸에 배번호 문신하는거)
  • 티셔츠(기념품)
  • 경기 안내 책자
물품 확인하고, 자전거 검차를 받아야하는데, 자전거 검차를 하려면 헬멧과 사이클에 배번호를 부착해야한다. 배번호 중에 가장 작은 크기가 헬멧용 배번호이니 양 옆과 정면에 배번호 스티커 붙이고, 사이클 배번호를 붙여야 하는데, 이것을 어떻게 하는지 몰라서 헤멨다. 다른 분들을 보니, 케이블 타이를 안장 밑부분에 감은 다음에, 케이블 타이에 삐져 나온 부분에 배번호 스티커를 붙이는 것 같던데.......맞는지 모르겠다. 현장에서 경험자에게 물어 보는게 좋을듯. 필자는 케이블타이 버리고 그냥 대충 배번호 스티커만 사이클에 붙여버렸다. 이렇게 하면 소위 말해 뽀대가 안난다. 대회장 이벤트를 하는 장소에 펌프가 비치되어 있으니, 자전거 타이어에 바람을 넣을 필요가 있으면 이용하고 가도록 하자.

대회 전날에 오후 5시부터 바꿈터 개방을 하는데, 이때는 자전거 거치만 가능하다. 기타 헬멧을 포함한 필요 물품들은 대회 당일 아침에 바꿈터 개방할때 바구니에 챙겨놓아야한다.

헤나번호는 대회 당일날 아침 먹고 숙소에서 대회장으로 가기전에 부착하고 가는게 좋은것 같다. 대회장가서 부착하면 사람 많아서 정신 없을테니 말이다. 본인은 무릎위 허벅지에다가 헤나번호를 새겼는데, 다른 분들 보면 어깨, 팔쪽에 많이 하신다. 헤나번호 부착 방법은 앞 부분 비닐을 때고, 뒷면 종이 부분을 물에 적신 다음에, 비닐 땐 면을 몸에 대고, 가볍게 쓰윽 문질러주면 붙는다.

해양 스포츠 센터. 여기에서 등록 및 필요 물품을 수령한다.
사이클 검차 전에 이렇게 헬멧과 사이클에 배번호를 붙여야한다. 사이클에 붙이는 배번호는 케이블타이를 이용해서 붙이면 좀 더 깔끔하다. 

대회 시작전

4시 반쯤에 일어나서 편의점 죽과 빵으로 아침을 때우고, 헤나 번호를 부착하였다. 첫 참가자는 1000번대 배번호가 부여되서, 네 자리 새기려니 귀찮다. 경기복에 외투를 걸치고, 웻슈트 및 기타 필요 물품들을 챙겨서 대회장으로 향했다.

대회날 아침 바꿈터는 사람들이 많이 북적댄다. 다들 바꿈터에 물건 챙기고, 웻슈트 갈아입느라 정신 없다. 바셀린을 가져갔는데, 웻슈트 입기 편하게 팔, 다리 부분과 겨드랑이 쪽에만 바셀린을 바르고 목쪽에 바셀린을 안발랐더니, 추후에 수영 경기가 끝나고 목 뒷쪽이 웻슈트에 쓸려 있었다. (지금도 따갑다.) 바셀린을 챙겨갔다면, 웻슈트입고 목쪽에 바셀린을 꼭 발라줄것!

대회 출발 순서는 주니어부, 장애인부, 상위 랭커, 20대, 30대 초반, 30대 후반, 40대 초반 1그룹, 40대 초반 2그룹, 50대 초반, 50대 초반 ~ 70대, 여자부, 20대 ~ 30대 초반 초보, 30대 후반 ~ 40대 초반 초보, 40대 후반 ~ 여자 초보, 릴레이, 40대 후반 1그룹, 40대 후반 2그룹 순으로 그룹 별로 텀을 두고 출발한다. 나처럼 첫 참가자는 초보 그룹에 속해서 한참뒤에 출발하니 다른 그룹 출발하는 것 보면서 느긋하게 기다리고 있었다. 처음 출발한 주니어부가 수영 마치고 바꿈터로 진입하는 것도 볼 수 있었다.

수영

가장 자신있었던 수영이 최대 고비였다. 수영에서 탈락 할 뻔했다. 오픈워터 수영이라고는 여름휴가때 오키나와에서 스쿠버다이빙을 하면서 잠시 해 본게 다인데, 당시에 딱히 힘든점이 없어서 오픈워터 수영을 연습을 전혀 안했다. 그러니 이번이 오픈워터 수영의 첫경험인 것이다.

무엇이 가장 문제였냐면, 일단, 아무것도 안보인다. 한국 바다를 너무 만만하게 봤다. 물속 시야는 0이고, 방향을 확인하려면 물밖에 머리를 들고 확인(헤드업)해야 하는데, 헤드업 연습을 거의 안했다. 아무 생각없이 스트로크하면서 가다가 뭔가 허전에서 주위를 둘러보니, 나혼자 엉뚱한 곳으로 가고 있었다. 다시 생각없이 막가다가, 또 엉뚱한 곳으로 가서 진행 요원에게 어느 방향인지 묻고, 다시 엉뚱한곳 가고, 물으면서 가고......큰일이다. 이대로는 완주 못할거라는 불안감이 엄습해왔다.

이대론 도저히 안되겠다 싶어서, 해본적도 없는 헤드업을 급조해서 시도해 보았다. 빨리 가는 것보다는 지속적으로 방향을 확인하면서 올바른 방향으로 가는 것에 모든 신경을 집중하였다. 이제야 제대로된 방향으로 가는 것 같다. 750m 반환점을 돌고나니 경로 표시 부표가 오른쪽에 있어서 오른 호흡만으로도 어느정도 방향 확인이 가능하였다. 이제 안심도되고 몸도 풀렸겠다. 속도 좀 내볼까? 쑤욱~쑤욱~ 2비트 발차기와 스트로크 잘된다. 앞에 가시는 분들 한 둘씩 따라 잡는다. 너무 필받았는지 발차기때 왼쪽 종아리에 쥐가 났다. 발목을 올려서 급하게 쥐 나는것 풀고, 다시 천천히 갔다. 

나중에 기록을 확인해보니 수영 기록이 44분이다. 아마 여기서 20분 정도는 초반에 길을 못찾아서 헤메다가 보냈을 것이다. 조금만 더 늦었으면 50분 컷오프 탈락될 뻔했다.

사이클

수영 도중 경로를 찾지 못해 당황한 것 때문에, 수영 피니시 라인을 들어올때는 심리적으로 많이 안심되었다. 바꿈터에서 에너지젤 하나 들이키고, 웻슈트 벗고, 머리와 발바닥 물기를 닦은 다음에 양말과 운동화(워킹화)를 신었다. 헬멧과 고글 착용하고, 사이클을 끌고, 사이클 출발점까지 달려갔다. 

트라이애슬론 대회를 준비하면서, 사이클 훈련은 평지에서 페달링(RPM 높이기) 훈련이 대부분이었다. 그런데, 적어도 통영 대회만큼은 내가 했던 훈련이 거의 무의미하게 느껴졌다. 당최 평지가 있어야 말이지;; 통영 대회는 사이클 코스 대부분이 언덕(오르막과 내리막)으로 구성되어있다. 업힐 훈련을 했던 적이 있던가? 아 딱 한번 하긴 했었다. 그렇지. 석달 동안 훈련하면서 업힐 훈련은 딱 한번 했다. 두번인가? (훈련 내역 참고) 대회날 통영에 바람이 심하게 불었는데, 사이클 코스가 대부분 언덕이라 바람의 영향도 크게 받지 않는 것 같았다.

오르막은 빌빌대면서 기어다시피 올라가고, 내리막은 안전상 페달링은 커녕, 앞에 계시는 분과 안전거리 확보를 위해 브레이크 잡으면서, 그렇게 진행했었다. 완주가 목표이므로 체력 안배도 고려하면서 너무 뒤쳐지지 않게 안전 거리 확보하면서 다른 분들 따라가는 방식으로 진행하였다. 후반부 오르막 코스때는 평소에 사이클 라이딩시에 한번도 써본적이 없는 앞기어 inner를 드디어 써보게 되었다. 사이클을 구입해서 지금까지 앞기어는 outer로 고정해두고 한번도 바꾼적이 없었는데......

오르막은 속도가 너무 느리고, 내리막은 안전거리 확보차원에서 브레이킹을 많이하고, 체력 안배 차원의 페이스 조절등의 요인으로 1시간 40분대 정도의 기록이 나올 줄 알았는데, 나중에 기록을 확인해보니 1시간 33분이다. 그래도 아스팔트 라이딩이라 그런지 생각보다는 기록이 좋게 나온 것 같다. 

통영 대회를 생각하고 있다면 사이클 업힐 훈련에 투자 많이 할것!

달리기

의도적인 페이스 조절했으니 사이클도 그렇게 힘들지 않았지만, 경험하지 못한 연속된 업힐은 쉽지만은 않았다. 그런데, 달리기는 세 종목중에 가장 편했다. 사이클에서 체력 안배를 너무 많이 한건가. 평소 훈련때 필요한 근전환 따위도 전혀 필요없었다. 달리기 코스로 나가자마자 바로 평소 페이스로 달리는 것이 가능하다.

바꿈터에서 사이클 거치하고, 헬멧 벗고, 신발 갈아 신은 뒤에 남은 에너지젤을 마저 흡입하고 달리기 코스로 나갔다. 화장실에서 볼일 좀 보고;; 가볍게 뛰어보니 사이클 코스에서 페이스 조절을 너무 많이 했다는 것을 느낄 수 있었다. 평소 달리기 훈련때처럼 초반부터 5분/km 페이스로 뛰었다. 5km 지점을 지났을때 아무리 기록보다는 완주가 목표라고 하더라도, 지금처럼 땀 한방울도 안흘리고(이날 쌀쌀하고, 바람이 심했다.) 너무 고생없이 경기 하는것 같아서 페이스를 좀 올려보았다. 그렇게 페이스를 올려서 한 2km 정도 되는 거리를 뛰었는데, 양쪽 허벅지에 쥐가 났다. 지금까지 한번도 쥐가 난 적이 없는 부위의 근육이다. 아마도 사이클 업힐 코스 영향이 있는 것 같다. 3km 밖에 안남았지만, 혹시나 싶은 불안함에 잠시 다리 스트레칭 하고, 다시 페이스를 늦춰서 남은 거리 마저 진행하였다. 역시 사람의 몸은 솔직하다. 훈련이 부족하면 경기때 이렇게 알려주니 말이다.

나중에 기록을 확인 해 보니 달리기 기록이 52분이 나왔다. 달리기 도중에 화장실에서 볼 일 본 시간도 있어서 평소 뛰는 50분/10km 페이스 그대로이다. 허벅지 근육에 쥐가 안났으면 40분대도 노려볼만 했을텐데 조금 아쉽다. 역시 가장 시간 투자를 많이 한 종목이라 했던 만큼 그대로 나오는 것 같다.

어찌되었건 올해 목표 달성~!

완주 인증샷


훈련내역

10월은 감기때문에 달리기 2회정도 한 것을 제외하고 훈련 한 내용이 없으니 생략. 감기만 아니었으면 제대로 훈련해서 Sub-3 달성했을텐데~! 이게 다 감기때문이다.

2016년 10월 5일 수요일

[2016년 9월] 철인 3종 훈련 후기



9월 훈련 총평

석달이라는 짧은 기간에 트라이애슬론 올림픽 코스를 완주하기 위한 훈련이라 두번째 달인 9월에 사실상 가장 많은 훈련을 해야한다. 하지만, 추워지는 날씨와 게으른 성격탓에 그렇지 못해 아쉽다. 특히, 개인적으로 가장 중시하는 코어 운동(플랭크, 스쿼트, 팔굽혀펴기)를 많이 빼먹은 것이 뼈아프다. 그래도 전반적으로 체력이 붙고, 각 종목을 하나만 했을때는 올림픽 코스 거리의 1.5배 정도도 무리없이 완주 가능하니, 실제 대회때 완주에는 무리가 없을  것같다. (과연?)

9월 훈련 내역을 되돌아보면, 세 종목 중에 달리기 훈련이 가장 비중이 높다. 아무래도 마라톤 대회에 참가하느라 달리기에 신경 썼던 점이 작용한 것 같다. 마라톤 대회 후에 달리기에 재미를 붙인 점도 있고 말이다. 반면에, 사이클 훈련은 기록 향상이 없어서 흥미를 잃어서 그런지 가장 훈련 비중이 적다.

9월 훈련에서 가장 기억에 남는 것은 두 번의 마라톤 대회에 참가 했었던 것이다(10km 코스). 이번에 난생처음 마라톤 대회에 참가하는 것이었는데, 10km라는 짧은 거리지만 완주후에 메달을 받을때는 뿌듯했다. 고작 한달전만 하더라도 1km도 제대로 못뛰었는대 말이다. 지금은 10km 달리는 것 정도는 40분대 중반까지는 가능하다.

두달동안 트라이애슬론 훈련을 하면서 체중이 6kg 줄었다. 살이 잘 안빠지는 체질인데, 짧은 기간에 이렇게 많은 체중을 뺀건 내가 기억으로는 이번이 처음이다. 그것도 무려 하루에 네끼씩이나 먹으면서 말이다. 체중을 줄이는 주 목적은 달릴때 무릎에 가하는 부하를 조금이라도 덜기 위해서 이다.

철인 3종 9월 훈련 내역

9월 1일 새벽
  • 사이클: 24.7km(시간: 00:56:09, 평균 속도: 26.4km)
오늘은 가는 경로에는 바람이 없고, 돌아오는 경로에 역풍이 심하게 불었다. 구간별 속도를 확인해 보니 역시나 가는 경로가 훨씬 빠르다. 현재 페달링 rpm을 유지하면서, 지금보다 기어를 1단 정도만 더 올릴 수 있으면 좋을 것 같다.

9월 1일 저녁
  • 수영: 30분
  • 스쿼트: 120회(40회씩 3세트)
  • 팔굽혀펴기: 36회(12회씩 3세트)
어제 잠을 제대로 자지 못해서 그런지 컨티션이 별로다. 수영 연습을 하는데, 자세가 잘안잡혀서 억지로 하는 듯한 기분이 들어서 30분만에 수영장에서 나왔다.

9월 2일 새벽
  • 빨리 걷기: 1시간 30분
내일 10km 마라톤 대회 대비겸 빨리 걷기로 다리 근육을 풀어주었다. 뛰거나 빨리 걷기를 하고나면 무릎에 뻐근함이 남아서 항상 무릎 관절 부상에 유의해야 겠다. 

9월 3일 - 10km 마라톤 대회 참가
난생 처음 마라톤 대회에 참가 하였다. 혼자 훈련하다가 많은 사람들과 같이 뛰니 감회가 새롭다. 생각하는 페이스와 비슷한 사람이 있으면 뒤따라가는 방식으로 페이스 조절을 하였다. 7km 구간이 가장 힘들었고, 완주 후에는 체력이 오히려 많이 남는다. 기록은 Sub-1시간이 목표였으니 생각했던 것 보다 기록이 좋게 나왔다. 9월 말 10km 마라톤 대회에서는 여기서 5분정도 단축하는 것으로 목표로 해야겠다.

마라톤 대회가 끝난 후, 오후에는 업힐/다운힐이 변동이 심한 구간 사이클 연습을 하였는데, 업힐 올라가는게 너무 힘들다. 오전 마라톤 10km 완주하는 것보다 업힐 1km 올라가는게 더 힘든 것 같다. 결국, 고점까지 한번에 올라가는건 포기하고, 업힐 구간은 중간중간 휴식을 취하면서 올라갔다. 다운 힐은 속도가 많이 붙어서 위험하므로 안전에 유의하였다.

9월 5일 새벽
  • 빨리 걷기: 1시간 30분
10km 마라톤 대회 후에 무릎 관절 보호와 다리 근육을 풀어줄겸, 빨리 걷기를 하였다.

9월 5일 저녁
  • 수영: 1시간
  • 스쿼트: 120회(40회씩 3세트)
  • 팔굽혀펴기: 36회(12회씩 3세트)
수영을 오랜만에 해서 그런지, 오늘따라 컨디션이 괜찮은 편이다. 쉬지 않고 뺑뺑이 하였다.

9월 6일 새벽
  • 사이클: 28.3km (시간: 01:06:03, 평균 속도: 25.7 km/h)
사이클 훈련하는 거리를 조금 늘렸다. 돌아오는 경로에 역풍이 심하긴 했지만, 평균 속도가 예전보다 떨어져서 아쉽다. 오늘 라이딩시에는 왼쪽 발가락 저림 현상이 있어서 원인을 곰곰히 생각해보니, 신발때문인 것 같다. 평소 라이딩시에는 쿠션이 적은 워킹화를 신고 하는데, 쿠션이 많은 조깅화를 신고하니, 페달링시에 당기는 부분이 제대로 안되서 저림이 있는 것 같다. 실제 대회때도 클릿 슈즈를 신지 않더라도 자전거 라이딩시에는 워킹화를 신고 해야겠다.

9월 6일 저녁
  • 사이클: 10km 가볍게
  • 플랭크: 4분(1분20초씩 3세트)
  • 스쿼트: 160회(40회씩 4세트)
9월 7일 새벽
  • 달리기: 7.57km (시간: 00:39:16, 평균 페이스: 05:11 분/km)
어제 집들이를 가서 많이 먹고, 술을 마셨더니 몸이 무겁다. 다행히 평균 페이스가 떨어지진 않았다. 달릴때 상/하체가 분리되는 느낌으로 의식 하니까 땅을 박찰때 진동이 허리까지 오지 않고 둔근 부근에서 멈추는 것 같다. 이러면 무릎에 가하는 부하도 줄어들어 좀 더 가볍게 뛸 수 있을것 같다. 러닝시 이런 자세를 지속적으로 유지할 수 있도록 신경쓰면서 연습해야 겠다.

9월 7일 저녁
  • 수영: 1시간
  • 스쿼트: 120회 (40회씩 3세트)
  • 팔굽혀펴기: 36회(12회씩 3세트)
수영을 계속 뺑뺑이만 돌았는대도 끝나고 체력에 여유가 있었다.

9월 8일 새벽
  • 빨리 걷기: 1시간 30분
오늘은 사이클을 타야하는 날이지만, 사이클 페달링시 소음과 걸리는 느낌이 나서 사이클을 수리점에 맡겼다. 빨리 걷기로 대체.

9월 9일 새벽
  • 달리기: 8km? 
기록 측정 앱이 오동작하여 기록이 날라갔다. 거리는 대략 8km 정도이고, 기록은 예전과 비슷한듯. 무릎 관절 보호를 위해 근처 달리기 전용 트랙이 있는지 찾아보았는데, 안양 종합 운동장에 달리기 전용 트랙이 무료로 오픈되어 있는듯 하다. 시간내서 한번 가봐야겠다. 괜찮으면 다음부터 달리기는 달리기 전용 트랙에서 해야겠다.

9월 9일 저녁
  • 수영: 1시간
오랜만에 1시간을 풀로 뺑뺑이 돌았다. 금요일인대다 저녁 마지막 타임이라 사람이 그나마 적은 편이다. 거의 한 라인을 독점하여 편하게 수영 할 수 있었다.

9월 11일 - 종합 훈련
  • 사이클: 40.15km (시간: 01:29:53, 평균 속도: 26.8km)
  • 달리기: 10km? (6.8km까지 평균 페이스: 05:30 m/h)
싸이클과 달리기를 트라이애슬론 올림픽 코스 거리만큼 이어서 하였다. 달리는 중간에 휴대폰 밧데리가 나가서 달리기 기록이 날라갔다. 달리기 초반에 꽤나 힘들었지만, 페이스를 늦춰서 2km 정도 달리고나니 다리가 풀려서 평소대로 뛸 수 있었다. 생각했던 것보다 힘들지 않았음.

9월 12일 새벽
  • 사이클: 25.8km (시간: 00:56:34, 평균 속도: 27.4 km/h)
라이딩 중간에 페이스가 비슷한 아저씨가 앞질러 가길래 3km 가량을 뒤에 붙어다녔다. 어제도 그렇고, 오늘도 그렇고, 주 기어비를 1단을 내리고 케이던시를 높였더니 오히려 평균 속도가 증가하였다(바람의 영향이 커서 확신 할 순 없다.). 페달링 회전력을 키워야 하는데,  그동안 힘으로 탓던게 드러난 것 같다.

9월 12일 저녁
  • 플랭크: 4분(1분20초씩 3세트)
  • 스쿼트: 150회(50회씩 3세트)
  • 빨리걷기: 1시간 20분
원래 오늘은 언덕 달리기 훈련을 하려고 했었다. 지금까지 훈련을 되돌아보면, 언덕 달리기를 하고 나면 체력이 방전되어 다른 운동을 못하니, 먼저 플랭크와 스쿼트를 하고, 빨리 걷기로 몸을 푼 뒤에 언덕 달리기를 하려고 했다. 그런데, 빨리 걷기 후에 허리에 무리가 가서 더이상 운동을 하면 부상의 위험이 있어서 언덕 달리기는 생략하였다.

9월 13일 새벽
  • 달리기: 10km (시간: 00:54:42, 평균 페이스: 05:27 분/km)
달리기 속도를 늘리는 것보다 거리를 늘리는 것이 더 중요하다고 생각하여, 평소보다 페이스를 늦춰서 10km를 뛰었다. 뛰는 도중에 허리에 힘이 많이 들어가는 느낌이 들어, 허리를 약간 유선형으로 만들고, 허리 힘을 빼고, 골반을 앞으로 살짝 내밀면서 뛰니 허리에 무리가 가지 않는 느낌이다. 앞으로 이런 자세로 뛰도록 신경써서 교정하도록 해야겠다. 달리는 자세도 훈련을 하면서 점점 좋아지는 것 같다.

9월 13일 저녁
  • 수영: 1시간
추석 연휴 전날에다가 마지막 타임이라 사람이 별로 없다. 편하게 1시간 뺑뺑이 돌다가 왔다.

9월 17일
  • 플랭크: 4분(1분 20초씩 3세트)
  • 사이드 플랭크: 2분 40초(한쪽에 1분 20초씩)
  • 역 플랭크: 1분 20초
코어 운동 한번 제대로 했다. 하고 나니, 역시 코어 근육이 많이 약한것 같다. 앞으로 코어 근육 단련에 좀 더 힘써서 해야 겠다.

9월 18일 - 종합 훈련
  • 사이클: 41km (시간: 01:30:55, 평균 속도: 27.1 km/h)
  • 달리기: 10.15km (시간: 01:04:30, 평균 페이스: 06:21 m/h)
사이클 40km 라이딩 후, 운동장 트랙에서 달리기 10km를 이어서 하였다. 사이클은 30km 지점에서, 넓은 안장이 허벅지 뒷 근육을 압박해서 불편했다. 40km 사이클 라이딩 후, 달리기를 하니 그냥 달리기만 했을때보다 기록이 10분정도 저조하다. 체력은 남는 것같은데, 다리 근육이 따라주지 못한다.  다음에는 사이클 후 달리기 10km 기록을 50분대로 줄여야겠다.

9월 19일 저녁
  • 수영: 1시간
  • 스쿼트: 150회(50회씩 3세트)
  • 팔굽혀펴기: 36회(12회씩 3세트)
수영은 저녁 마지막 타임이 가장 사람이 적어서 훈련하기 좋다. 그래서, 그 시간대에 입장하려니 시간이 많이 남는다. 수영장 가기전에 집에 들렀다가는건 좀 그래서, 근처 운동장 트랙에서 스쿼트와 팔굽혀펴기를 실시 하였다. 스쿼트와 팔굽혀펴기를 할때마다 느끼는 거지만, 운동 강도가 약한건지 다음날 자고일어나도 근육에 뻐근함이 없다. 다음부터는 수행 셋트를 늘리거나 해야겠다. (5세트 정도?)

수영은 예전과 마찬가지로 준비운동이 끝난 시점부터 마치는 시간까지 그냥 뺑뺑이 돌았다.

9월 20일 새벽
  • 달리기: 9.88km (시간:00:54:00, 평균 페이스: 05:27 m/h)
페이스를 늦춰서 그런지, 달리기 후에 무릎 통증이 평소보다 덜 한 것같다. 가능하면 달리기는 트랙에서 하려고했는데, 운동장까지 가는 시간이 많이 걸려서 포기하고 그냥 근처 산책  코스에서 달렸다. 저녁 훈련이나 주말 훈련때는 시간적 여유가 있으니 운동장 트랙에서 달려야겠다.

9월 21일 점심
  • 싸이클: 11.9km (시간:00:29:14, 평균 속도: 24.4 km/h)
어제 업무로 인한 피로가 누적되서 잠을 푹잤더니, 어제 저녁과 오늘 새벽 훈련까지 거르게 되었다. 점심 시간을 이용해서 싸이클 훈련 조금.

9월 21일 저녁
  • 수영: 1시간
  • 스쿼트: 200회(50회씩 4세트)
  • 팔굽혀펴기: 48회(12회씩 4세트)
수영은 이제 항상 저녁 마지막 타임때 하기로 하였다. 그전에 비는 시간에 운동장 트랙에서 워킹으로 몸을 풀고, 스쿼트와 팔굽혀 펴기를 먼저 하였다. 스쿼트와 팔굽혀펴기 세트를 평소보다 1세트 늘려서 했는데 크게 무리가 되지 않는다.

수영장에서 체중을 재어보니, 1 kg 빠졌다. 심리적으로 몸이 가벼워진 기분이다. 수영 훈련은 뭐 항상 하던대로, 뺑뺑이 돌다가 왔다.

9월 22일 저녁
  • 달리기: 10km (시간: 00:46:52, 평균 페이스: 04:40 m/h)
  • 플랭크: 4분(1분 20초씩 3세트)
이번주 주말에 10km 마라톤 대회가 있어서, 마라톤 대회 준비도 할겸, 운동장 트랙에가서 제대로 10km 뛰어보았다. 평소보다 빠른 페이스라 힘들긴 했지만, 끝나고 10km를 40분대로 끊어서 기분은 좋다. 운동장 트랙에 잘뛰는 분들이 많아서, 그 분들께 자극을 받아 기록이 좋게 나온것 같다. 트랙이라 무릎 관절에 무리도 덜가고, 잘 뛰는 분들 보면서 자세도 배우고, 1석 2조다. 달리기 훈련하러 자주 가야겠다.

9월 23일 점심
  • 싸이클: 12.9km (시간:00:30:28, 평균 속도: 25.5 km/h)
어제 저녁에 10km 달리기를 무리해서 뻗어서 잤다. 대신, 점심 시간을 이용하여 근처 공원에서 라이딩.

9월 23일 저녁
  • 빨리 걷기: 1시간
  • 수영: 1시간
수영장 마지막 타임 입장 전에 운동장 트랙을 빨리 걷기로 1시간을 돌았다. 스쿼트와 팔굽혀펴기도 하려고 했지만, 피곤해서 생략. 수영도 빨리 걷기 한뒤에 해서 그런지 체력이 조금 부치는 느낌이다.

9월 25일 - 10km 마라톤 대회 참가
마이런 서울 참가. 평소보다 페이스를 올려서 50분내로 완주하려고 했지만, 인파에 막혀서 페이스를 올릴수가 없다. 거의 5km 구간을 인파에 묻혀있다가, 후반 5km 구간만 그나마 제대로 달린것 같다. 그래서, 기록은 아쉽게 30초 차이로 50분. 기록보다는 그냥 축제 형식의 달리기 대회라서 연예인이랑 사람 구경하는 재미가 쏠쏠했다.

9월 26일 점심
  • 사이클: 7.9km (시간: 00:19:01, 평균 속도: 24.8 km/h)
새벽 훈련을 걸러서, 점심 시간에 잠깐 사이클 라이딩. 아침잠이 많아서 요즘 새벽 훈련을 거의 매일 거르는 것 같다. 이제 한달 남았는데...

9월 27일 새벽
  • 달리기: 4km (시간: 00:20:06, 평균 페이스: 05:04 m/h)
다리 근육 풀겸 가볍게 조깅...한다는 것이 생각보다 페이스가 조금 빠르다. 몸이 거의 5분대 페이스에 적응이 된 듯하다. 페이스를 조금 늦추고, 거리를 늘려서 체력을 키워야겠다. 요즘들어 체력이 많이 떨어진 것 같다.

9월 27일 저녁
  • 수영: 1시간
새로 산 오픈워터용 수경을 착용하고 1시간 뺑뺑이. 오늘은 힘을 빼고 했다.

9월 28일 저녁
  • 달리기: 13km (시간: 01:03:13, 평균 페이스: 04:50 m/h)
트라이애슬론 올림픽 코스를 완주하려면 아무래도 체력을 키우는 것이 가장 중요하다고 생각해서 달리는 거리를 조금 늘렸다. 총 13km를 뛰었는데, 뛰는 도중 왼쪽 무릎에 통증이 와서, 잠시 무릎 스트레칭을 하고 페이스를 늦춰서 다시 뛰었다. 생각했던 것보단 평균 페이스가 빠르다.

9월 29일 저녁
  • 빨리걷기: 1시간
  • 스쿼트: 150회(50회씩 3세트)
  • 팔굽혀펴기: 36회(12회씩 3세트)
  • 수영: 1시간
수영장 마지막 타임전까지 운동장 트랙에서 빨리 걷기와 스쿼트와 팔굽혀펴기를 실시하였다. 체력을 뺀 뒤에 수영을 해서 평소보다 잘 안되었지만, 감을 익히는 것에 집중하면서 1시간 뺑뺑이. 

9월 30일 ~ 10월 2일
감기 몸살을 심하게 앓았다(죽다 살아남). 환절기에 훈련 하느라 땀을 흘리고 난 뒤 찬 바람을 맞으며 사이클링을 한 것이 원인인것 같다. 날씨가 추워지고 있으니 이제 야외 훈련시 감기 걸리지 않도록 주의해야겠다.

9월 훈련 총 합계

  • 수영: 8시간
  • 사이클: 213km
  • 달리기: 102km

훈련 총 합계

  • 수영: 17시간
  • 사이클: 442km
  • 달리기: 164km
다음 달에 생애 첫 트라이애슬론 대회 참가 후기에 자랑스럽게 Sub-3 달성을 적을 수 있다면 좋으련만!

2016년 9월 1일 목요일

[2016년 8월] 철인 3종 훈련 후기


올해 뭔가 기억에 남을 만한 이벤트를 찾던 중에 과감히 철인 3종 경기에 참가해서 완주하기로 하였다. 가끔 생각날때 수영이나 한번씩 할까, 꾸준한 건강 관리와는 차원이 먼, 전형적인 저질 몸을 가진 개발자 주제에 꿈도 참 크다. 오히려 그래서 더 도전 의식을 불태운다. 남들이 다 못할거라고 믿는걸 극복하고 완주하는 모습을 상상하는 것만으로도 즐겁다.

1년전

1년 전에 현재 회사에 입사하면서 다시는 서울 지하철 지옥을 겪고 싶지 않아, 회사 근처에 방을 구했다. 집에서 회사까지 걸어서 15분 거리다. 이사를 하면서 매제가 로드 자전거를 빌려주었다. 애기 키우느라 탈 시간이 없으니 출/퇴근용으로 타란다. 출/퇴근을 자전거로 다녀봤더니 거의 5분거리다. 처음엔 5분동안 자전거 타는 것도 힘들었다. 체력이 떨어져도 너무 떨어진 것 같다. 이대론 안되겠다 싶어서, 한달간 매일 집 뒷산 작은 공원을 1시간씩 걸었다. 자전거로 출/퇴근하고 한번씩 주말에 장거리를 타다보니, 자전거 라이딩에 재미가 붙었다. 장거리 수영엔 원래 자신있었고, 자전거도 슬슬 재미가 붙으면서 실력이 느는것 같은데 내년엔 철인 3종 경기에 나가볼까? <- 미쳤음.

올해 초

철인 3종 경기도 여러 종류가 있다. 아이언맨 코스(풀 코스)는 수영-3.8km, 사이클-180km, 달리기-42.2km(마라톤)를 완주해야한다. 말그대로 '철인' 임을 입증하는 코스다. 이거는 아무리 제정신이 아니라고 하더라도 처음 참가하는 나한테는 무리다. 다른 코스를 찾아보았다. 마침 적당히 완주 할 수 있을만한 올림픽 코스가 있었다. 올림픽 코스는 수영-1.5km, 사이클-40km, 달리기-10km 이다. 할만 한 것 같다. 여기에 도전 해보자!

사이클로 휴식 없이 장거리 라이딩을 해보았는데, 한번에 10km는 커녕 5km 가는 것도 힘들다. 안장통으로 엉덩이가 아프고, 목과 어깨도 쑤시고, 심지어 팔다리가 저리기 까지 한다. 그래서, 안장을 SELLE SMP TRK로 바꾸었다. 안장을 바꾸니 안장통은 거의 없어졌다.


한달 전

이제 올해 철인 3종 경기 대회가 몇개 안남았다. 이대론 올 해 안에 철인 3종 경기 완주 못한다. 일단 저지르자! 그래서, 2016 통영 ITU 트라이애슬론월드컵대회(속칭, 통영 대회)에 일단 신청했다(참가비: 비회원 14만원. 비싸다.). 자 이제 완주하려면 훈련을 해야하니 그전에 현재 몸 상태가 어떤지 객관적으로 되돌아 보았다.


  • 수영: 장거리 수영이 가능하지만 속도가 많이 느리다. 몸 싸움에 말려서 페이스를 잃으면 제한 시간(50분)에 완주 하지 못해 탈락 할 수도 있다.
  • 사이클: 한번에 5km만 타도 많이 힘들다. 40km는 커녕 20km도 못탈것 같다.
  • 달리기: 관절에 무리가 갈듯 싶어 전혀 하지 않았다. 시험삼아 뛰어봤는데 1km도 못뛴다.
심각하다;; 완주 할 수 있으려나? 다른건 둘째치고, 겨우 10km라고 만만하게 보았던 달리기가 가장 문제다. 1km 남짓만 뛰어도 힘들어서 헥헥대는데 수영 1.5km, 사이클 40km를 타고 10km를 어떻게 뛴단 말인가? 그래도 하기로 했으니 이제부터라도 제대로 훈련하기로 결심했다. 매제한테 빌린 자전거로는 도저히 장거리 라이딩은 무리라고 판단하여, 로드 자전거를 새로 하나 장만했다. 자금에 여유가 없으니 가격 대비 좋은 스펙을 가진 삼천리자전거 아팔란치아 SR7000 (40만원)로 질렀다(안장은 예전에 샀던 SELLE로 교체하였다.). 새 자전거 수령 후 시험삼아 장거리 라이딩을 해보니 완전 신세계다. 이건 뭐 자동차로 치면 거짓말 조금 보태서 경차 몰다가 스포츠카 모는 기분이다. 20km를 달렸는데 그냥 산책하는 기분이다. 예전 자전거로는 20km는 커녕 10km도 못가봤었다. 사이클은 역시 장비빨이다. 약간의 스펙업(둘 다 입문용 로드)으로 이정도인데, 1000만원대 자전거는 어떨지 궁금하다.

출/퇴근에 소요되는 시간이 없으니, 출근전에 새벽 훈련, 퇴근후 저녁 훈련, 토요일 휴식, 일요일 종합 훈련 이렇게 대회 전에 꾸준히 훈련하기로 스케쥴을 잡았다. 3종목 골고루 훈련하되, 달리기가 가장 안되니 무릎 관절에 무리가 가지 않는 선에서 달리기에 투자를 많이 하기로 하였다.

새벽 훈련은 달리기나 사이클등 유산소 운동을 기본으로 하여, 각 종목을 훈련하면서 체력을 키우고 해당 종목 실력 체크 및 자세 연습등을 하기로 하였다.

저녁 훈련은 수영 및 무산소 보강 운동을 하여, 철인 3종을 완주할 수 있는 속근을 키우는데 중점을 두기로 하였다. 보강 운동은 스쿼트, 플랭크, 팔굽혀 펴기 세 가지 위주로 하기로 하였다.

일요일 종합 훈련때는 실전 감각을 익히기 위하여 수영, 사이클, 달리기 세 종목을 모두 이어서 하거나, 최소한 두 종목을 이어서 하는 훈련을 하기로 하였다.

철인 3종 8월 훈련 내역

8월 1일 저녁 훈련

  • 걷기 및 달리기: 10.14km (시간: 01:11:47, 평균 페이스: 07:04 분/km)
  • 스쿼트: 60회 (20회씩 3세트)
  • 팔굽혀펴기: 30회 (10회씩 3세트)
워밍 업 차원에서 뛰다가 걷다가 10km를 완주하였다. 체력이 부쳐서 달리는 구간이 적고, 걷는 구간이 많았는데, 걸을때는 빨리 걷기로 다리 근육에 자극을 주었다.

8월 2일 새벽 훈련
  • 수영: 500m / 200m / 200m
사람이 많아서 페이스 조절이 힘들다.

8월 2일 저녁 훈련
  • 100m 달리기 6회
  • 스쿼트: 60회(20회씩 3세트)
  • 플랭크: 2분 30초(1분 30초 / 1분 2세트)
다리 근육 강화를 위하여 100m 전력 질주를 6회 하였다. 넘어지거나 사람이랑 부딫히면 크게 다칠 것 같아서 많이 위험한 것 같다. 다리 근육 강화 운동은 다른 운동으로 변경해야겠다.

8월 3일 새벽 훈련
  • 빨리 걷기: 1시간 10분
8월 3일 저녁 훈련
  • 사이클: 20.42km (시간: 01:00:13, 평균 속도: 20.3 km/h)
  • 스쿼트: 60회(20회씩 3세트)
  • 팔굽혀펴기: 30회(10회씩 3세트)
역시 20km를 타도 크게 힘들지 않고 가뿐하다.

8월 4일 새벽 훈련
  • 사이클: 17.89km (시간: 00:46:36, 평균 속도: 23.0 km/h)
좁은 길에서 앞서가는 사람을 피하다가 낙차하였다. 오른쪽 손바닥과 오른쪽 무릎에 찰과상을 입었다. 피부가 까져서 상처 부위가 따끔하긴 하지만, 향후 훈련을 못할 정도는 아니다.

8월 4일 저녁 훈련
  • 200m 언덕 달리기: 3회
다리 근육 보강 훈련으로 100m 전력 질주 대신에 경사가 높은 언덕 달리기를 하였다. 마침 집 근처 뒷 산에 200m 가량되는 적당한 언덕이 있어서 여기서 훈련 하였다. 처음 오를때 오버 페이스를 해서 2, 3회때 종아리가 터질듯한 느낌이 들면서 체력이 완전 방전되었다. 더이상 훈련하지 못하고 그대로 뻗어버렸다.

8월 5일 새벽 훈련
  • 빨리 걷기 + 달리기: 10.23km (시간: 01:12:10, 평균 페이스: 07:03 분/km)
아직 걷지 않고 달리기로만 장거리 가는건 무리다. 페이스를 최대한 낮춰서 달리는 거리를 늘려야 겠다.

8월 5일 저녁 훈련
  • 수영: 1시간
  • 스쿼트: 70회(20 / 20 / 30 3세트)
  • 팔굽혀펴기: 30회(10회씩 3세트)
계획대로 2 종목을 하루에 모두 다 훈련해서 뿌듯하다.

8월 6일 - 휴식
8월 7일 종합 훈련
  • 사이클: 20.43km (시간: 00:48:49, 평균 속도: 25.1km)
  • 빨리 걷기 + 달리기: 5.12km (시간: 00:33:13, 평균 페이스: 06:29 분/km)
  • 빨리 걷기: 5km
수영 - 싸이클 - 달리기 세가지 모두 하려고 했는데, 수영장이 휴무라서 수영대신 빨리 걷기로 마무리하였다. 그런데, 달리기를 했던 시간에 햇볕이 강해서 그런지, 훈련 후에 일사병 증상이 조금 있는듯 하다. 햇볕 강한 더운날에 운동할땐 정오 시간대를 피해서 할것!

8월 8일 ~ 8월 13일: 여름 휴가
휴가지에서도 체력을 키우기 위하여, 20시간 가량을 걸어 다녔다.

8월 14일 저녁 훈련
  • 달리기: 3.12km (시간: 00:18:07, 평균 페이스: 05:48 분/km)
  • 스쿼트: 100회 (20 / 20 / 30 / 30 4세트)
  • 플랭크: 2분 30초(1분 30초 / 1분 2세트)
  • 역크랭크: 40회(20회씩 2세트)
3km를 한번도 쉬지 않고 달리는 것을 목표로 해서, 처음에 최대한 천천히 달리다가 점차 페이스를 올렸다. 생각보다 힘들진 않았지만, 1.5km 지점에서 왼쪽 무릎에 통증이 왔다. 현재 체중이 표준 체중(키 - 110)에서 17kg 오버해서 무릎 관절에 무리가 가는 듯하다. 체중은 식단 조절과 철인 3종 훈련으로 빼고, 달릴때 관절에 무리가 가지 않게 최대한 가볍게 달리도록 해야겠다.

8월 15일 새벽 훈련
  • 사이클: 23.28km (시간: 00:53:56, 평균 속도: 25.9 km/h)
20km를 타려고 했는데 어쩌다보니 3.3km 더 달렸다. 저번 라이딩보다 평속이 1km 가량 향상되서 기쁘다. 평속 30km 될때 까지 열심히 밟자!

8월 15일 저녁 훈련
  • 빨리 걷기: 1시간 20분
  • 스쿼트: 100회(30 / 30 / 40 3세트)
  • 팔굽혀펴기: 30회(10회씩 3세트)

내일 오전 훈련으로 러닝을 해야하므로, 관절에 무리를 주지 않으면서 체중 감량을 위해 빨리 걷기를 장시간 하였다. 수영이 가장 좋은데, 광복절 휴일로 수영장 휴뮤라, 사이클 업힐 훈련과 빨리 걷기 중에 고민하다가 저녁 시간에 어두운 도로에서 차량때문에 사이클링은 위험한것 같아서 빨리 걷기를 하기로 하였다.


체중이 줄었는지, 근육이 붙었는지 모르겠지만 팔굽혀펴기를 할 때 몸이 전보다 많이 가볍게 느껴졌다(이보게~이제 보름 운동했단다;;). 다음달엔 팔굽혀펴기 횟 수를 늘려도 될듯.

8월 16일 새벽 훈련
  • 달리기: 3.37km (시간: 00:17:51, 평균 페이스: 05:17 분/km)
  • 걷기 + 달리기: 3.37km (1분 걷기, 2분 달리기 인터벌)
이전에 3km 달렸을때 보다 거리가 0.25km, 평균 페이스가 31초 향상되었다. 그런데, 뛰는 자세가 불편해서 이런 자세로 10km를 무난하게 뛰기는 힘들것 같다. 3km를 달리고 돌아오는 길에 2분 러닝, 1분 걷기 인터벌로 운동하면서 자세 교정 및 체력 훈련을 마무리하였다. 걱정되었던 무릎 관절 통증은 없었음.

8월 16일 저녁 훈련
  • 수영: 30분
  • 플랭크: 2분(1분 30초 / 30초 2세트)
  • 스쿼트: 80회(20회씩 4세트)
  • 역크랭크: 40회(20회식 2세트)
회식을 하고 운동을 해서 그런지 체력이 많이 부친다. 다른건 다 할만했는데, 플랭크를 평소보다 30초 더 못했다. 회식때 과식으로 몸이 무거워 진대다 무리한 수영으로 체력 소진해서 그런듯.

8월 17일 새벽 훈련
  • 사이클: 23.3km (시간: 00:52:42, 평균 속도: 26.6 km/h)
저번보다 평균 속도가 0.7km 빨라졌다. 라이딩을 하면서 평균 속도를 높이려고 신경 쓴 부분도 있지만, 11.6km 갔다가 돌아오는 경로에 나와 페이스가 비슷한 사람이 있어서 경쟁심에 기록이 좋아진 것 같다. 이런 점에서보면 비슷한 수준의 훈련 파트너가 있으면 좋을 것 같다. 동호회에 가입하지 않는 이상 현실적으로 불가능 하겠지만 말이다.

8월 17일 저녁 훈련
  • 수영: 1시간
  • 스쿼트: 100회(30 / 30 / 40  3세트)
  • 팔굽혀펴기: 30회(10회씩 3세트)
수영을 준비 운동이 끝난 후부터 다음 타임 쉬는 시간 전까지 쉬지 않고 뺑뺑이 돌았다. 힘들지는 않았지만 자세가 좋지 못하고,  페이스를 너무 낮춰서인지 속도가 너무 느리다. 사람이 많은 시간대라 맘 편히 연습할수도 없다. 수영하면서 사람에 치여서 불쾌했지만, 경기때 몸싸움에 미리 적응한다는 기분으로 하였다. 거리 측정을 하진 않았지만 1.5km는 넘지 않았을까? 수영 후 쓸림 때문에 오른쪽 겨드랑이가 따가웠다.

8월 18일 새벽 훈련
  • 달리기: 3.36km (시간: 00:17:37, 평균 페이스: 05:15 분/km)
전번이랑 같은 거리를 뛰었는데,어제 수영을 무리하게 해서 그런지 오늘따라 몸이 많이 무겁다. 예전보다 20초가량 시간을 앞당겼지만, 평균 페이스를 5분 이하로 하기에는 아직 멀었다. 목표는 평균 페이스 5분이다. 그래야 10km를 50분 내외로 완주 가능하다. 하지만, 지금보다 페이스를 더 올리면 체력이 받쳐주지 못할것 같다. 꾸준히 연습하다보면 나아지겠지.

8월 18일 저녁 훈련
  • 200m 언덕 달리기: 5회
  • 스쿼트: 110회(30 / 30 / 30 / 20 4세트)
  • 플랭크: 2분 30초(1분 30초 / 1분 2세트)
  • 역크랭크: 40회(20회씩 2세트)
전번 언덕 달리기때 3회만하고 체력이 방전되서 아무것도 못했던 기억이 있어서, 이번에는 약간 천천히 달렸다(장거리 러닝보다는 빠르게). 그랬더니, 5회를 해도 여유가 있어서 몇 회 더 할 수 있을것 같았지만 무리하지 않았다. 이번에도 역시 플랭크가 힘들다. 예전처럼 1분 30초, 1분을 다 채우긴했지만 꽤나 힘들게 했다. 역크랭크는 힘들진 않았지만, 복근 힘이 빠져서 그런지 허리에 무리가 가는 기분이다.

8월 19일 새벽 훈련
  • 사이클: 23.3km (시간: 00:52:03, 평균 속도: 26.9 km/h)
앞전 라이딩보다 평속이 0.3km 올랐다. 기록에 너무 연연해서 그런지 초반에 너무 오버 페이스 한 것 같다. 라이딩 구간 분석 결과, 역시 후반부로 갈수록 평속이 떨어진다. 다음번 라이딩때는 초반 페이스 조절에 신경써야겠다.

8월 19일 저녁 훈련
  • 수영: 1시간
  • 스쿼트: 100회(30 / 30 / 40 3세트)
  • 팔굽혀펴기: 30회(10회씩 3세트)
수영을 100m / 200m 인터벌로 끊어서 자세 위주로 연습하였다. 후반부에 2 스트로크, 1 호흡으로 해보았는데, 자세 잡는데는 이게 훨씬 좋은 것 같다. 수영 연습시 초반부에 이런씩으로 연습하면서 자세를 잡고, 30분정도 논스톱 뺑뺑이 훈련하면 좋을 것 같다.

8월 20일 - 휴식
8월 21일 종합 훈련
  • 사이클: 25.04km (시간: 00:57:21, 평균 속도: 26.2 km/h)
  • 달리기(+걷기): 5.32km (시간: 00:34:13, 평균 페이스: 06:25 분/km)
25km 싸이클 라이딩 후 달리기를 하였다. 그런데, 달리기 초반에 근전환이 제대로 이루어 지지 않아서 1km로 채 뛰지 못하고, 결국 걸었다. 5km를 뛰다 걷다를 반복하면서 훈련을 마무리 하였다. 싸이클도 거리가 늘어나니 평균 속도가 많이 떨어진다. 싸이클 라이딩시 손발 저림 현상이 생기는 것을 보니 혈액 순환이 원할하게 되지 않는것 같다. 튜닝을 다시 해야하나...

8월 22일 새벽 훈련
수면 조절 실패와 피로 누적으로 휴식

8월 22일 저녁 훈련
  • 수영: 1시간
  • 스쿼트: 100회(30 / 30 / 40 3세트)
  • 팔굽혀펴기: 30회(10회씩 3세트)
수영을 하는 날은 보강 운동을 플랭크가 아닌 팔굽혀펴기를 하는게 좋은것 같다. 수영 후 플랭크를 하면 허리에 무리가 간다.

8월 23일 새벽 훈련
  • 달리기: 5.35km (시간: 00:30:23, 평균 페이스: 05:40 분/km)
5km를 쉬지 않고 달리기 위해 평소보다 페이스를 낮추었다. 무릎 관절에 무리를 주기 않기 위해, 자세에 많이 신경썼다. 철인 3종 달리기 훈련을 겸하여 9월에 열리는 마라톤 대회 두 곳에 참가 신청을 하였다. 9월 3일에는 함께뛰는 어울림마라톤대회 10km 코스에 신청하였다. 9월 25일에는 마이런 서울 10km 코스 참가 신청하였다.

8월 23일 저녁 훈련
  • 빨리 걷기: 1시간 10분
  • 언덕 달리기: 6회
  • 플랭크: 3분(1분씩 3세트)
빨리 걷기 후에 언덕 달리기를 하니까 체력이 조금 부치는 느낌이다. 처음 언덕 달리기를 했을때는 종아리가 터지는 느낌이 있어서, 종아리 근육때문에 세 번 밖에 하지 못하였는데, 이번에는 종아리 근육에 부하가 걸리는 느낌은 없다. 전반적으로 다리 힘이 골고루 분산해서 들어가는 기분이다. 언덕 달리기 후에 오늘 다리에 너무 부하를 많이줘서 무릎 관절에 무리를 주지 않으려고 스쿼트는 생략하였다. 플랭크도 기존 1분 30초, 1분 2세트 하던 것에서 1분씩 3세트로 바꾸었다. 마지막 3세트보다 오히려 2세트때가 더 힘들다(오늘 좀 무리하긴 했지.).

8월 24일 새벽 훈련
  • 사이클: 11.5km (시간: 00:29:33, 평균 속도: 23.4 km/h)
새벽 훈련을 못해서 점심 시간을 이용하여 페달링 연습이나 할겸 회사 근처 공원을 30분간 돌았다. 한 바퀴 도는 거리가 짧고 직선 코스가 얼마되지 않아 평균 속도가 많이 나오지 않는다. 

8월 24일 저녁 훈련
  • 수영: 1시간
  • 스쿼트: 100회(30 / 30 / 40)
  • 팔굽혀펴기: 30회(10회씩 3세트)
자세 연습과 뺑뺑이를 번갈아가며 자유롭게 수영 훈련을 하였다.

8월 25일 새벽 훈련
  • 달리기: 6.11km (시간:00:32:57, 평균 페이스: 05:23 분/km)
전번 5km보다 거리를 1km 늘렸다. 전반적으로 페이스 조절이 괜찮은 것 같지만, 초반에 몸이 풀리지 않은 상태에서 페이스를 약간 오버 한 듯 싶다. 초반부는 페이스를 늦춰서 몸이 풀리면, 페이스를 서서히 올리도록 해야겠다.

8월 25일 저녁 훈련
  • 빨리 걷기: 1시간 20분
  • 플랭크: 3분(1분씩 3세트)
  • 스쿼트: 100회(30 / 30 / 40 3세트)
다리 근육 강화와 체중 감소를 위해 빨리 걷기를 하였다. 유산소로 몸이 풀린 후, 플랭크와 스쿼트를 해서 그런지 무산소 운동시 몸이 많이 가벼웠다.

8월 26일 새벽 훈련
우천으로 인하여 취소

8월 26일 저녁 훈련
  • 수영: 1시간
  • 스쿼트: 100회(30 / 30 / 40 3세트)
  • 팔굽혀펴기: 30회(10회씩 3세트)
수영이 S자 물잡기를 감 잡은 뒤부터 많이 편해졌다. 다음에는 좌우 번갈아 숨쉬기를 연습 해야겠다.

8월 27일 - 휴식
8월 28일 종합 훈련
  • 사이클: 40.5km (시간: 01:39:07, 평균 속도: 24.5km)
처음으로 40km를 중간 정차 없이 논스톱으로 타보았다. 철인 3종 사이클 올림픽 코스 거리를 처음 타는 거라 출발전에 각오를 많이 했었는데, 생각보다 힘들지 않았다. 20km 반환점 구간에서 음료도 마시고 스트레칭도 하면서 1분 가량 잠시 정차했었다(이정도는 논스톱이라고 봐주자.).

저번에 25km를 타고 손발 저림 현상이 있어서 걱정했는데, 안장을 앞으로 옮겼더니 손발 저림 현상은 없어졌다. 다만, 안장 높이가 좀 낮은지 무릎에 무리가 약간 가는 듯한 느낌이다. 안장 높이 1cm 정도 높여야 겠다.

가는 20km 구간보다 돌아오는 20km 구간이 훨씬 기록이 좋다. 강한 맞바람, 진로 막는 사람들, 페이스 조절, 고저차등 여러가지 요인이 있을 것이다. 40km 라이딩 완주를 목적으로 해서 기록에 크게 신경쓰지 않았지만, 평속이 25km 이하로 떨어진건 많이 아쉽다. 다음 번엔 최소 평속 25km는 넘기도록 해봐야겠다. 오늘 타면서 깨닭은 점이 있다면, 라이딩시 몸을 릴렉스하고, 시야를 멀리하면 페달링이나 자세등 여러가지 면에서 안정되는 느낌이 들었다.

다음 주엔 10km 마라톤 참가로 일요일 종합 훈련이 없으니, 다다음주에는 40km 라이딩 후에 5km 이상 달리기까지 이어서 훈련 해 봐야겠다. 오늘은 무릎 관절 보호 차원에서 사이클 라이딩 후에 달리기는 하지 않았다.


8월 29일 새벽
 훈련
  • 달리기: 7.3km (시간: 00:39:42, 평균 페이스: 05:26 분/km)
확실히 달리기가 무릎 관절에 무리가 많이 간다. 예전보다 체력이 많이 향상되서 10km는 거뜬히 뛸수 있을 것 같은데, 무릎 관절 부상을 조심하느라 좀 더 뛰지 못하니 많이 아쉽다. 토요일 10km 대회 전에 부상 당하지 않도록 조심해서 운동해야 겠다.

8월 29일 저녁 훈련
  • 수영: 1시간
  • 스쿼트: 120회(40회씩 3세트)
  • 팔굽혀펴기: 30회(10회씩 3세트)
수영 왼쪽 및 양쪽 호흡 연습. 왼쪽 호흡은 가능은 하나 자세가 많이 틀어진다. 오른쪽 호흡하는 것처럼 자연스럽게  되도록 연습해야겠다.


8월 30일 새벽
 훈련
  • 사이클: 23km (시간: 00:52:28, 평균 속도: 26.3km)
가는 경로에 역풍이 지속적으로 계속 불어서 속도가 나지 않았다. 11.5km 지점 반환점 돌고 돌아오는 경로는 역풍이 없어서, 갈때와 올때 평속 차이가 많이 난다.

8월 30일 저녁 훈련
  • 빨리 걷기: 1시간 30분
  • 언덕 달리기: 4회
오늘은 훈련하기 전에 회식이 있어서 배불리 먹고, 음주를 조금 하였다. 그래서 그런지 컨티션이 썩 좋지 않다. 언덕 달리기를 할때 속도를 높였더니, 체력이 많이 부친다. 언덕 달리기 4회를 하고나니 더이상 운동할 여력이 남지 않아서 그대로 뻗어버렸다.

8월 31일 새벽 훈련
우천으로 인하여 취소. 앞으로 비가 오면 수영이라도 하러 가야겠다.

8월 31일 저녁 훈련
  • 달리기: 8.69km (시간: 00:45:26, 평균 페이스: 05:14 분/km)
  • 스쿼트: 130회 (40 / 50 / 40 3세트)
  • 플랭크: 3분(1분씩 3세트)
10km 완주 달리기를 하려고 했는데, 거리 계산 실수로 1.3km 덜 뛰었다. 10km를 달릴만한 체력은 이제 충분한 것 같다. 자세도 무릎을 살짝 굽히고(10 ~ 20도), 허리를 세우고, 미드풋 ~ 토풋 중간쯤으로 최대한 사뿐히 착지하여 다리 뒷 근육의 탄력을 이용해서 달리니 많이 편하다. 이런 자세로 달리면 무릎에 무리가 덜 가는 것 같다. 오히려 너무 토풋 착지에 신경쓰면 무릎에 무리가 간다. 보폭은 현재 1m 정도인데, 마라톤 정상급 선수들은 보폭이 150cm ~ 180cm 란다. 보폭 늘리는 것은 현재 감 잡은 자세가 안정되면 기록 향상을 위해 고민해 봐야겠다.

8월 훈련 총 합계

종목 별 
  • 수영: 9시간
  • 사이클: 229km
  • 달리기: 62km 
보강 훈련
  • 스쿼트: 1500회
  • 팔굽혀펴기: 300회
  • 플랭크: 18분 30초

추가
1. 훈련 내용이 유산소 위주라 어찌보면 당연한 것이지만, 한달동안 철인 3종 훈련을 하면서 체중이 줄었다(-3kg).식단 관리는 아침: 바나나 2개, 점심: 회사 짬밤, 저녁1(훈련전): 에너지바 2개, 저녁2(훈련후): 닭가슴살 2캔, 바나나 2개, 두무 한모, 과일 쥬스 이렇게 고정 하였고, 토요일은 자유롭게 아무거나 먹었다.

2. 달리기와 사이클 기록 측정은 모두 스마트폰 Runtatic 앱을 사용했다. 구간별 페이스를 확인할 수 있는게 특히 맘에 든다. 수영 기록을 측정 할 수 없는 점이 매우 아쉽다. 수영 기록 측정용 스마트 와치가 있으면 매우 좋을 것 같다(수영 거리/시간, 스트로크 횟수, 1 스트로크당 평균 진행 거리등등...검색 해 보진 않았지만 있겠지...없으면 잉여로운 행자가 있다면 만들어서 Kickstarter에 올려 주시길....).

3. 철인 3종 준비 관련해서는 구글 검색 해 보면 많이 나온다. 도움을 받았던 생각나는 링크 몇가지를 소개한다.


다음달에도 열심히 훈련~!





2013년 6월 26일 수요일

Xen 소스 트리 구조

소스 코드를 분석 하기 위해서는 여러가지 접근법이 있겠지만, 소스 코드의 전반적인 구조를 파악하는 것은 소스 트리 구조를 알고 있는 것이 많은 도움이 됩니다. 이 내용은 일전에 Xen 소스 분석을 하면서 Xen 소스 트리 구조를 정리한 것 입니다. Xen 소스 코드 분석을 하시는 분들께 도움이 되었으면 좋겠습니다. 

당시 Xen을 분석했던 4.1.2 버전을 기준입니다. Xen 최신 버전(4.2.2)도 소스 파일이나 디렉토리 구조는 크게 차이가 없습니다. 4.1.2 버전과 최신 버전의 가장 큰 차이점이라면 ia64 아키텍처 코드가 삭제되고 ARM 아키텍처 코드가 추가된 것을 들수가 있습니다.

Xen 4.1.2를 다운로드해서 압축을 풀어보면 많은 서브 디렉토리와 소스 파일이 생성 됩니다. Xen은 실직적으로 가상화를 수행하는 하이퍼바이저와 가상화 시스템을 관리하기 위한 각종 툴로 구성되어 있습니다. (운영체제의 구성 요소가 커널과 각종 시스템 프로그램으로 되어 있는 것과 비슷한 맥락입니다.) 가상화 프로그램은 하이퍼바이저가 핵심이지만 하이퍼바이저를 제어하기 위한 인터페이스를 제공하는 어떤 라이브러리와 툴이 있는지 알아야 가상화 시스템 전체 구조를 파악할 수 있습니다. 각 디렉토리에 어떤 소스 파일들이 있고, Xen에 어떤 툴과 라이브러리가 있는지 가볍게 한번 보시기 바랍니다.

아래는 Xen의 최상위 디렉토리와 툴 디렉토리만 나타낸 것 입니다. xen 디렉토리는 핵심이라고 할 수 있는 하이퍼바이저 소스 코드가 들어 있는 곳이므로 나중에 다시 다루도록 하고 지금은 나머지 최상위 디렉토리들과 툴들에 대해서만 한번 살펴 보겠습니다.

Xen 전체 디렉토리 구조

(XEN)
├── buildconfigs
├── config
├── docs
├── extras
│   └── mini-os
├── stubdom
├── tools
│   ├── blktap
│   ├── blktap2
│   ├── check
│   ├── console
│   ├── debugger
│   ├── examples
│   ├── firmware
│   ├── flask
│   ├── hotplug
│   ├── ioemu-qemu-xen
│   ├── libaio
│   ├── libfsimage
│   ├── libxc
│   ├── libxen
│   ├── libxl
│   ├── memshr
│   ├── misc
│   ├── ocaml
│   ├── pygrub
│   ├── python
│   ├── remus
│   ├── security
│   ├── sv
│   ├── tests
│   ├── vnet
│   ├── vtpm
│   ├── vtpm_manager
│   ├── xcutils
│   ├── xenbackendd
│   ├── xenballoon
│   ├── xenmon
│   ├── xenpaging
│   ├── xenpmd
│   ├── xenstat
│   ├── xenstore
│   ├── xentrace
│   └── xm-test
├── unmodified_drivers
└── xen
     └─+

buildconfigs: makefile 빌드시스템 관련 파일들

config: makefile 빌드시스템 관련 파일들
docs: 문서들
extras/mini-os: 간단한 소형 운영체제, Dom0 분할(Dissaggregation)을 위한 stub 도메인에서 사용한다.
stubdom: I/O 성능 향상을 위한 Stub 도메인
tools: Xen 각종 툴들
tools/blktap: 블록탭(Block Tap),사용자 레벨에서 디스크 I/O 인터페이스를 제공하는 라이브러리와 툴, 주요 목적은 좀 더 좋은 성능을 위해 파일기반 이미지의 루프백 드라이버(loopback driver)를 대체하는 것이다. 
tools/blktap2: 블록탭 개선 버전
toos/check: Xen 빌드와 설치를 위한 적합성 검사
tools/console: Xen 콘솔
tools/debugger: 디버거, IA64 아키텍처 전용 저수준 Xenitp, gdb, kdd 디버거를 지원한다.
tools/examples: Xen 가상머신 스크립트와 설정파일 예제들
tools/firmware: BIOS(vgabios, rombios)와 Xen의 전 가상화 도메인에서 가장 먼저 실행되는 것은 hvmloader, 네트워크 부트로더인 gPXE등의 펌웨어들(하위 디렉토리 표시)
tools/flask: Flux Advanced Security Kernel, Xen은 XSM라고 불리는 보안 프레임웍을 제공한다. flask는 XSM을 사용하는 보안 모델의 구현이다.
tools/hotplug: 핫플러그인 관련 툴
tools/ioemu-qemu-xen: QEMU 디바이스 모델, 주로 전가상화에서 장치 에뮬레이션하는 용도로 사용한다.
tools/libaio: 비동기 I/O 라이브러리.
tools/libfsimage: 파일 시스템 이미지 라이브러리. ext, fat, iso9600, reiserfs, ufs, zfs등의 파일 시스템 이미지를 생성하는데 사용한다.
tools/libxc: XC(Xen Control) 라이브러리. Xen 하이퍼바이저에게 하이퍼 콜을 직접 호출하여 제어하는 가장 저수준 라이브러리.
tools/libxen: Xen 관리 API. XML-RPC 프로토콜로 원격지나 로컬에서 Xen 가상머신을 관리한다.
tools/libxl: XL(Xen Light) 라이브러리. libxc 라이브러리를 래핑하여 좀 더 용이한 인터페이스를 제공하는 C 라이브러리. libxl로 구현한 커맨드라인 가상머신 제어 툴인 xl 툴이 포함되어 있다.
tools/memshr: 공유 메모리
tools/misc: 여러가지 툴 모음. xm xen-bugtool xen-python-path xend xenperf xsview xenpm xen-tmem-list-parse gtraceview gtracestat xenlockprof xenwatchdogd/xen-hvmctx xen-hvmcrash(x86 전용)/xen-hptool(마이그레이션용)
tools/ocaml: OCaml 언어 관련 파일들
tools/pygrub: 파이썬으로 구현한 가상 grub, 게스트 부트로더로 사용된다.
tools/python: 파이썬 언어 관련 파일들
tools/remus: 가상머신 백업툴, 장애가 발생하면 백업본으로 자동실행한다.
tools/security: 보안 관련 툴
tools/sv: 가상머신 제어 웹 인터페이스
tools/tests: 각종 테스트 툴. MCE(Machine Check Exception) 주입 테스트, 페이지 단위 접근 테스트, x86 에뮬레이터 테스트, 파이썬 유닛 테스트등의 툴이 있다.
toosl/vnet: 가상 네트워크
tools/vtpm: 가상 TPM(Trusted Platform Module)
tools/vtpm_manager: 가상 TPM 관리툴
tools/xcutils: libxc로 구현한 툴들. lsevtchn(이벤트 채널 목록), readnotes(ELF 파일의 note 섹션 읽음), xc_restore(가상머신 상태 복구), xc_save(가상머신 상태 저장)
tools/xenbackendd: Xen backend 데몬
tools/xenballoon: 게스트의 셀프-발루닝을 위하여 게스트에서 동작하는 데몬. 메모리 발루닝은 메모리 공간 효율성을 위하여 게스트가 사용하는 메모리를 유동적으로 조절하는 것이다.
tools/xenmon: Xen 성능 모니터
tools/xenpaging: 메모리 페이지 내용을 파일에 쓰고 되돌리는 툴
tools/xenpmd: 전원 관리 데몬
tools/xenstat: Xen 도메인과 시스템 상태 모니터링 툴(xentop)과 라이브러리(libxenstat)
tools/xenstore: XenStore 제어 툴
tools/xentrace: Xen에서 추적 버퍼(Xen 추적 버퍼는 Xen 하이퍼바이저가 실행되는 과정의 로그 정보가 들어있다. Xen 하이퍼바이저 코드를 보면 TRACE_0D, TRACE_1D등의 매크로를 종종 볼 수 있다. 이 매크로가 삽입된 부분의 데이타를 추적한다. ) 데이타를 캡처하는 툴.
tools/xm-test: 도메인 제어 테스트 툴.(Xen 가상화 시스템의 관리 기능(도메인 생성/제거, 저장/복귀, 이주등)의 테스트 목적으로 만들어졌다. 이것은 파이썬으로 구현한 xm 툴 기반으로 작성된 스크립트이다. xm 툴은 C로 구현한 xl로 대체되었다.)
unmodified_drivers: 리눅스 드라이버
xen: Xen 하이퍼바이저


Xen 하이퍼바이저 소스 구조

Xen 소스 디렉토리에서 xen 디렉토리에는 Xen의 핵심인 하이퍼바이저 소스 코드가 들어 있습니다. 아래는 ia64 아키텍처 소스 파일과 include 디렉토리의 헤더 파일을 제외한 Xen 하이퍼바이저의 모든 소스 파일에 대한 간략한 설명입니다.    
(XEN)/xen - Xen 하이퍼바이저 최상위 디렉토리
• COPYING – Xen 하이퍼바이저 소스 코드 라이센스
• Makefile – Makefile
• Rules.mk – Makefile 설정

(XEN)/xen/arch - 아키텍처 종속적인 루틴

(XEN)/xen/arch/ia64 - IA64 아키텍처 종속적인 루틴, Xen 4.2 버전에는 IA64 아키텍처 관련 코드가 모두 삭제되었다. 대신 ARM 아키텍처가 추가되었다.

(XEN)/xen/arch/x86 - x86 아키텍처 종속적인 루틴
• apic.c - 로컬 APIC 처리, 로컬 APIC 타이머
• bitops.c – 개별 비트 루틴 검색 
• bzimage.c - 리눅스 커널 이미지(bzImage) 처리
• clear_page.S – 페이지 메모리 클리어
• compat.c - 레거시 하이퍼콜은 인자를 조절하여 새로운 하이퍼콜을 호출한다.
• copy_page.S – 페이지 복사 어셈블리 루틴
• crash.c – CPU 크래쉬 루틴
• debug.c - 디버깅 루틴
• delay.c - x86 아키텍처의 정밀한 딜레이 루프
• dmi_scan.c – DMI(Desktop Management Interface) 스캔 루틴. DMI는 SMBIOS(System Management BIOS)를 포함하므로 SMBIOS로 불리기도 한다. 
• domain.c - x86 전용 도메인 처리(즉, x86 레지스터 설정과 컨텍스트 스위칭)
• domain_build.c – Dom0 생성 루틴
• domctl.c - 아키텍처 종속적인 도메인 제어 루틴
• e820.c - e820 관련 루틴. (AX 레지스터에 'E820'를 쓰고. BIOS 호출(int 15h)를 하면 메모리맵을 얻어온다.)
• extable.c – 예외 테이블
• fluhtlb.c - TLB 플러시
• gdbstub.c - x86 종속적인 gdb stub 루틴
• hpet.c - HPET(High Precision Event Timer) 관리
• i387.c - Pentium III FXSR, SSE 지원
• i8259.c - 인텔 8259 제어
• io_apic.c - 인텔 IO-APIC 지원
• ioport_emulate.c - I/O 포트 에뮬레이트
• irq.c – IRQ(Interrupt Request) 루틴
• machine_kexec.c – 머신 kexec 루틴
• microcode.c - CPU 마이크로코드 업데이트 리눅스 드라이버(마이크로코드(즉, 기계어) 업데이트로 기계어를 추가 할 수 있다.)
• microcode_amd.c - AMD CPU 마이크로코드 업데이트 리눅스 드라이버
• microcode_intel.c - 인텔 CPU 마이크로코드 업데이트 리눅스 드라이버
• mm.c - x86 페이지 테이블 API
• mpparse.c - 인텔 멀티프로세서 스팩 1.1과 1.4를 준수하는 MP-테이블 파싱 루틴
• msi.c - PCI MSI(Message Signaled Interrupt)
• nmi.c - APIC 시스템에서 NMI(Non-Maskerble Interrupt) 와치독 지원
• numa.c - x86-64 NUMA 설정을 위한 일반적인 VM 초기화
• pci.c - x86 아키텍처 종속적인 PCI 접근 함수들
• percpu.c - PERCPU 락 회피 자료구조
• physdev.c - 물리적인 장치 오퍼레이션
• platform_hypercall.c - 하드웨어 플랫폼 오퍼레이션. 도메인 0에서 사용한다.
• setup.c - Xen 하이퍼바이저 초기화 및 설정 루틴(__start_xen)
• shutdown.c - x86 종속적인 셧다운 처리
• smp.c - 인텔 SMP 지원 루틴
• smpboot.c - x86 SMP 부팅 함수
• srat.c - ACPI 3.0 기반 NUMA 설정
• string.c - x86 아키텍처에 최적화된 문자열 함수들
• sysctl.c - x86 종속적인 시스템 제어 오퍼레이션.
• tboot.c - 인텔 TXT(Trusted Execution Technology) 초기화 루틴
• time.c - PCPU 시간 보정 및 관리
• trace.c - 실행과정 추적 루틴
• traps.c - x86 트랩 관련 루틴
• usercopy.c - 사용자 주소 공간 접근 함수
• x86_emulate.c - x86 아키텍처 에뮬레이터
• xen.lds.S - Xen 하이퍼바이저 링크 스크립트 
• Makefile – Makefile
• Rules.mk – Makefile 설정

(XEN)/xen/arch/x86/acpi - ACPI(Advanced Configuration & Power Interface)
• boot.c - 아키텍처 종속적인 저수준 ACPI 부트
• cpu_idle.c - Xen 유휴 상태 모듈
• cpuidle_menu.c - CPU 유휴를 위한 메뉴 거버너
• power.c - Xen의 전원 관리 핵심 기능
• suspend.c – 프로세서 상태 저장과 복구
• wakeup_prot.S - 저수준 프로세서 상태 저장
• Makefile – Makefile

(XEN)/xen/arch/x86/acpi/cpufreq - ACPI P-상태 드라이버
• cpufreq.c- ACPI 프로세서 P-상태 드라이버
• powernow.c- AMD 아키텍처 P-상태 드라이버
• Makefile - Makefile

(XEN)/xen/arch/x86/boot - x86 초기화
• build32.mk – Makefile 정보
• cmdline.S - 초창기 커맨드라인 파싱
• edd.S - BIOS EDD(Enhanced Disk Drive) 지원
• head.S - x86 아키텍처에서 Xen 하이퍼바이저 시작 지점
• mem.S – 메모리맵 정보를 얻어옴
• mkelf32.c - ELF 실행파일 포맷 바이너리 변환툴
• reloc.c - 멀티부트 자료구조와 모듈의 재배치를 위한 32비트 플랫 메모리맵 루틴
• trampoline.S - 모드 변환(리얼 모드 -> 보호 모드) 및 페이징 활성화
• video.h – 비디오 모드 #define
• video.S - 디스플레이 어댑터와 비디오 모드 설정
• wakeup.S - 저수준 프로세서 상태 복구
• x86_32.S - 32비트 보호 모드 초기화 루틴
• x86_64.S - 64비트 롱 모드 초기화 루틴
• Makefile – Makefile

(XEN)/xen/arch/x86/cpu - x86 아키텍처의 각 CPU 벤더별 구현
• amd.c – AMD CPU 관련 루틴
• centaur.c - 센토(Centaur) CPU 관련 루틴
• common.c – CPU 정보 관련 공통 루틴
• cpu.h - CPU 정보 관련 자료 구조 정의
• cyrix.c - NSC/Cyrix CPU 관련 루틴
• intel.c – 인텔 CPU 관련 루틴
• intel_cacheinfo.c - 인텔 CPU 캐시 정보 루틴
• transmeta.c – Transmeta CPU 관련 루틴
• Makefile – Makefile

(XEN)/xen/arch/x86/cpu/mcheck - x86 MCE(Machine Check Exception)
◦ amd_f10.c - AMD Family10 CPU의 MCA(Machine check architecture) 구현
◦ amd_k8.c - AMD K8 CPU의 MCA 구현
◦ amd_nonfatal.c - AMD CPU의 MCA 구현
◦ k7.c - Athlon/Hammer 종속적인 머신 체크 예외 보고
◦ mce.c - x86 머신 체크 예외
◦ mce.h – mce 자료 구조
◦ mce-apei.c - MCE와 APEI(ACPI Platform Error Interface)간의 브릿지
◦ mce_quirks.h – AMD mce 쿼크 헤더 파일
◦ mce_intel.c- 인텔 MCE 처리
◦ mce_amd_quirks.c- AMD MCE 쿼크 처리
◦ mctelem.c - x86 머신 체크 원격 전송
◦ mctelem.h – mctelem.h #define 들
◦ non-fatal.c - 비치명적인 머신 체크 예외 보고
◦ x86_mca.h - AMD K7/K8 CPU의 MCA 구현
◦ vmce - 가상 MCE 지원
◦ Makefile – Makefile

(XEN)/xen/arch/x86/cpu/mtrr - x86 CPU의 MTRR(Memory Type Range Register)
◦ amd.c – AMD용 MTRR 루틴
◦ cyrix.c – cyrix용 MTRR 루틴
◦ generic.c - 일반적인 MTRR 루틴
◦ main.c- 일반적인 MTRR 드라이버
◦ mtrr.h – MTRR 헤더 파일
◦ state.c - MTRR 상태 제어
◦ Makefile - Makefile

(XEN)/xen/arch/x86/genapic - x86 APIC
• bigsmp.c - bigsmp 드라이버
• default.c - 기본 APIC 드라이버
• delivery.c - APIC 드라이버 구현체
• probe.c - 일반적인 x86 APIC 드라이버 조사 레이어
• summit.c -  IBM Summit 칩셋 APIC 드라이버
• x2apic.c - x2APIC 드라이버
• Makefile – Makefile

(XEN)/xen/arch/x86/hvm - x86 하드웨어 지원 가상화(VT-x or SVM)
◦ asid.c - TLB 태깅을 위한 ASID 처리
• emulate.c - HVM 명령어 에뮬레이션. MMIO와 VMX 리얼 모드에서 사용됨.
• hpet.c - HVM 게스트를 위한 HPET 에뮬레이션
• hvm.c - 공통 HVM 루틴
• i8254.c - QEMU 8253/8254 인터벌 타이머 에뮬레이션
• intercept.c - 하이퍼바이저 공간에서 성능이 중요시되는 I/O 패킷 처리
• io.c - I/O와 인터럽트 처리
• irq.c - 인터럽트 분배와 전달
• mtrr.c - MTRR/PAT 가상화
• pmtimer.c - ACPI PM 타이머 에뮬레이션
• quirks.c - HVM 쿼크
• rtc.c - QEMU MC146818 RTC 에뮬레이션
• save.c - HVM 게스트의 에뮬레이션된 하드웨어 상태 저장과 복구
• stdvga.c - 표준 VGA 모드 관련 루틴
• vioapic.c - 가상 I/O APIC
• viridian.c- Viridian 하이퍼콜 인터페이스
• vlapic.c - 가상 Local APIC
• vmsi.c - 가상 MSI 로직 지원
• vpic.c - i8259 인터럽트 컨트롤러 에뮬레이션
• vpmu.c - 가상 PMU(Performance Monitoring Unit)
• vpt.c - 가상 플랫폼 타이머(VPT, Virtual Platform Timer)
• Makefile – Makefile

(XEN)/xen/arch/x86/hvm/svm - AMD의 하드웨어 지원 가상화인 SVM
◦ entry.S - SVM 저수준 VMENTRY/VMEXIT 처리
◦ asid.c - SVM의 ASID 처리
◦ emulate.c - SVM 명령어 에뮬레이션
◦ intr.c- SVM의 인터럽트 처리
◦ svm.c - SVM과 연관된 VMEXIT 처리
◦ vmcb.c - VMCB 관리
• vpmu.c - 가상 PMU(Performance Monitoring Unit)
◦ Makefile - Makefile

(XEN)/xen/arch/x86/hvm/vmx - 인털의 하드웨어 지원 가상화인 VMX
◦ entry.S - VMX 저수준 VMENTRY/VMEXIT 처리
◦ intr.c - VMX와 관련된 I/O와 인터럽트 처리
◦ realmode.c - VMX를 위한 리얼 모드 에뮬레이션
◦ vmcs.c - VMCS 관리
◦ vmx.c - VMX와 관련된 VMEXIT 처리
◦ vpmu_core2.c - HVM 도메인을 위한 CORE 2 종속적인 PMU 가상화
◦ Makefile - Makefile

(XEN)/xen/arch/x86/mm - x86 메모리 관리자
• guest_walk.c - 게스트 메모리 접근을 위한 페이징 에뮬레이션
• p2m.c - 물리주소 -> 머신주소 매핑
• paging.c -x86 종속적인 페이징 지원
• mem_access.c - 메모리 접근 지원
• mem_event.c - 메모리 이벤트 지원                                                                        
• mem_paging.c - 메모리 페이징 지원
• mem_sharing.c - 메모리 공유 지원
• Makefile – Makefile

(XEN)/xen/arch/x86/mm/hap - 하드웨어 지원 페이징(HAP, Hardware Assisted Paging)
• guest_walk.c - HAP를 사용하는 게스트의 게스트 페이징 에뮬레이션
• hap.c - HAP(Hardware Assisted Paging) 루틴
• p2m-ept.c - EPT 상에서 물리주소 -> 머신주소 변환
• private.h – HAP 헤더파일
• Makefile – Makefile

(XEN)/xen/arch/x86/mm/shadow - 섀도 페이지 테이블
• common.c - 공통으로 하나만 들어가는 섀도 페이지 테이블 루틴
• multi.c - 페이징 단계별로 생성되는 다수의 오브젝트 파일에 포함되는 섀도 페이지 테이블 루틴
• multi.h - 페이징 단계별로 여러번 정의되는 섀도 페이지 테이블 정의
• private.h - 섀도 페이지 테이블 헤더 파일
• types.h – 섀도 페이지 테이블 타입 정의
• Makefile – Makefile

(XEN)/xen/arch/x86/oprofile - oprofile, x86 프로파일링 툴
• backtrace.c – 하이퍼바이저 스택 추적
• nmi_int.c - oprofile 공통 루틴
• op_counter.h – Opcounter 자료구조 정의
• op_model_athlon.c - AMD athlon/K7 종속적인 MSR 동작
• op_model_p4.c - 인텔 펜티엄4 종속적인 MSR 동작
• op_model_ppro.c - 인텔 페일리 6 종속적인 MSR 동작
• op_x86_model.h - x86 모델 종속적인 MSR 동작 인터페이스
• xenoprof.c - Xen의 프로파일링 루틴
• Makefile – Makefile

(XEN)/xen/arch/x86/x86_32 - x86 32비트 보호 모드
• entry.S - 보호 모드 저수준 하이퍼콜과 예외 처리 루틴
• asm-offsets.c - 어셈블리 언어 모듈에서 필요한 정의를 생성. 이 코드는 필요한 데이타를 추출하고 가공하여 어셈파일을 생성
• domain_page.c - 도메인 페이지의 임시 매핑을 허용
• gdbstub.c - x86_32 종속적인 gdb stub 루틴
• gpr_switch.S - 게스트와 호스트간의 범용 레지스터 컨텍스트 스위치
• machine_kexec.c – machine_kexec_get_xen() 함수
• mm.c – 32비트 보호 모드 메모리 관리자
• seg_fixup.c - 일반 보호 폴트(General-Protection Fault)에서 호출되는 세그먼트 수리 루틴
• supervisor_mode_kernel.S - 관리자 모드(링 0)에서 실행되는 게스트를 위한 스택 개조 처리
• traps.c - 32비트 보호 모드 Xen 예외 처리
• pci.c - 아키텍처 종속적인 PCI 접근 함수
• Makefile – Makefile


(XEN)/xen/arch/x86/x86_64 - x86 롱 모드(64비트 모드/호환 모드)
• entry.S - 롱 모드 저수준 하이퍼컬과 예외 처리 루틴
• acpi_mmcfg.c - 저수준 ACPI 초기화 지원
• asm-offsets.c - 어셈블리 언어 모듈에서 필요한 정의를 생성. 이 코드는 필요한 데이타를 추출하고 가공하여 어셈파일을 생성
• compat.c - 호환 모드 하이퍼콜 정의
• compat_kexec.S - 호환 모드 kexec 핸들러
• cpu_idel.c - 호환 모드 게스트를 위한 cpu 유휴 루틴
• cpufreq.c - 32비트 호환 게스트를 64비트 하이퍼바이저에 맞춤
• domain.c – arch_compat_vcpu_op() 함수
• gdbstub.c - x86_64 종속적인 gdb stub 루틴
• gpr_switch.S - 게스트와 호스트간의 범용 레지스터 컨텍스트 스위치
• machine_kexec.c – machine_kexec_get_xen() 함수 코드
• mm.c – 64비트 모드 메모리 관리자
• mmconfig.h – PCI MMIO(Memory-Mapped I/O) 설정 함수
• mmconf_fam10h.c – AMD Family 10h MMIO 설정
• mmconfig-shared.c – 저수준 PCI MMIO(32비트, 64비트 공용)
• mmconfig_64.c – 저수준 PCI MMIO(64비트)
• physdev.c - 64비트 모드 관련 phydev 정의
• platform_hypercall.c - 64비트 모드 관련 하이퍼콜 정의
• pci.c - 아키텍처 종속적인 PCI 접근 함수
• traps.c – 64비트 롱 모드 Xen 예외 처리
• Makefile – Makefile

(XEN)/xen/arch/x86/x86_64/compat - x86 호환 모드
• entry.S - 호환 모드 저수준 하이퍼콜과 예외 처리
• mm.c – 64비트 호환 모드 메모리 관리자
• traps.c – 64비트 호환 모드 Xen 예외 처리
• Makefile - Makefile

(XEN)/xen/arch/x86/x86_emulate - x86 아키텍처 에뮬레이터
• x86_emulate.c - x86 (32비트 모드와 64 비트 모드) 명령어 디코더와 에뮬레이터
• x86_emulate.h - x86 (32비트 모드와 64 비트 모드) 명령어 디코더와 에뮬레이터 헤더 파일

(XEN)/xen/common - Xen 하이퍼바이저 공통 루틴
• bitmap.c - 비트맵 관련 함수들
• bunzip2.c - bzip2 압축 해제 루틴
• cpu.c - CPU 관리
• cpupool.c - CPUPOOL 루틴
• decompress.h - 압축 헤제 헤더 파일
• decompress.c - 압축 헤제
• domain.c - 도메인 처리(시작, 종료, 중단, 복구, etc) 관련 함수
• domctl.c - 도메인 제어 오퍼레이션
• event_channel.c - 이벤트 채널. 이벤트는 VIRQ, PIRQ등과 같이 도메인에 비동기 알림 용도로 사용한다.
• gdbstub.c - 아키텍처 독립적인 gdb stub
• grant_table.c - 그랜트 테이블. 페이지 단위 메모리 공유 매커니즘
• inflate.c - gunzip 압축해제 루틴
• kernel.c - 커맨드 라인 파서와 아키텍처 독립적인 초기화 루틴 및 간단한 하이퍼콜 구현
• kexec.c - 아키텍처 독립적인 kexec 코드
• keyhandler.c - 디버깅 용도로 사용하는 key 핸들러
• lib.c - 64비트 연산 라이브러리
• lzo.c - LZO1X 압축 루틴
• memory.c - 메모리 관련 요청을 처리하는 코드
• multicall.c - 다중 하이퍼콜 처리
• notifier.c - 알림 체인 관리 루틴
• page_alloc.c - Xen 하이퍼바이저에서 사용하는 단순한 버디 메모리 할당자
• perfc.c – 성능 카운터 함수
• preempt.c – 선점 카운터 변수
• radix-tree.c – Radix 트리 구현
• rangeset.c - 각 도메인별 숫자 범위 집합
• rbtree.c - Red-Black 트리 구현
• rcupdate.c - 상호 배제를 위한 RCU(Read-Copy Update) 매커니즘
• sched_arinc653.c - ARINC 653 스케쥴러
• sched_credit.c - Credit 스케쥴러
• sched_credit2.c - Credit2 스케쥴러
• sched_sedf.c - Simple EDF 스케쥴러
• schedule.c - 스케쥴러의 추상 레이어 및 공통 루틴
• shutdown.c – 도메인 0 셧다운 관련 코드
• softirq.c - Xen의 SOFTIRQ(인터럽트 후반부 처리)
• sort.c - 정렬 루틴
• spinlock.c – 스핀락 함수
• stop_machine.c - 시스템 중단
• string.c – 문자열 라이브러리 함수
• symbols.c - 커널에서 출력되는 심볼릭 oops와 스택 추적
• symbols-dummy.c - 하이퍼바이저 이미지 링크에 사용되는 더미 심볼 테이블
• sysctl.c - 시스템 제어 동작
• tasklet.c – Xen의 태스크릿(인터럽트 후반부 처리)
• time.c – 날짜와 시간 함수
• timer.c – 타이머
• tmem.c – TMEM(Transcendent Memory) 메모리 할당자
• tmem_xen.c – Xen 종속적인 TMEM 루틴
• trace.c - 디버깅 용도로 사용되는 추적 버퍼 코드
• unlzma.c - Lzma 압축 해제 루틴
• unlzo.c - LZO 압축 해제 루틴
• version.c – 컴파일 날짜에 따른 Xen 버전 넘버
• vsprintf.c – 문자열 변환 루틴
• wait.c – 하이퍼바이저 컨텍스트에서 이벤트 대기(sleep)
• xencomm.c – 게스트간 페이지 메모리 통신
• xenoprof.c - Xen 프로파일링
• xmalloc_tlsf.c - TLSF(Two Levels Segregate Fit) 메모리 할당자
• Makefile - Makefile

(XEN)/xen/common/compat - 호환성 지원
• domain.c – compat_vcpu_op() 함수
• grant_table.c – 그랜트 테이블 호환 버전
• kernel.c – 몇가지 #define을 호환 버전으로 재정의
• memory.c – 메모리 관리자
• multicall.c - 호환 버전 다중 하이퍼콜 처리
• schedule.c - 호환 버전 스케쥴러
• tmem_xen.c - Xen 종속적인 TMEM 루틴
• xenoprof.c - 호환 버전 xenoprof 관련 코드
• xlat.c – 32비트 <-> 64비트 변환 정보
• Makefile – Makefile

(XEN)/xen/common/hvm - HVM 관련 루틴
• save.c - HVM 게스트의 에뮬레이트된 하드웨어 상태 저장 및 복구
• Makefile - Makefile

(XEN)/xen/common/libelf - ELF 실행 파일 포맷 라이브러리
• libelf-dominfo.c - ELF 커널 바이너리의 Xen 특화된 정보 분석
• libelf-loader.c - ELF 바이너리 분석 및 로드
• libelf-private.h – ELF 자료구조와 정의
• libelf-relocate.c - ELF 재배치 코드
• libelf-tools.c - ELF 자료구조에 접근하기 위한 다양한 헬퍼 함수
• Makefile – Makefile
• README – “이 코드는 xen과 tools 두군데서 사용된다.”
• COPYING – libelf 소스 코드 라이센스

(XEN)/xen/crypto - 암호화
• rijndael.c - AES 암호 알고리즘(Rijndael 알고리즘) 루틴
• vmac.c - VMAC와 VHASH 구현
• Makefile – Makefile

(XEN)/xen/drivers - 디바이스 드라이버
• Makefile - Makefile

(XEN)/xen/drivers/acpi - ACPI 드라이버
• hwregs.c - ACPI 레지스터 읽기/쓰기 함수
• numa.c - ACPI NUMA 지원
• osl.c - OS 종속적인 함수
• pmstat.c - 전원 관리 통계 정보
• reboot.c – 리부트 함수
• tables.c - ACPI 부트-타임 테이블 파싱
• Makefile - Makefile

(XEN)/xen/drivers/acpi/apei - APEI(ACPI Platform Error Interface)
• apei-base.c - APEI 코어 루틴
• apei-internal.h - APEI 헤더 파일
• apei-io.c - APEI I/O
• erst.c - APEI 에러 기록 직렬화 테이블(ERST, Err Record Serialization Table)
• Makefile - Makefile

(XEN)/xen/drivers/acpi/tables - ACPI 테이블
• tbfadt.c - FADT 테이블 유틸
• tbinstal.c - ACPI 테이블 설치와 제거
• tbutils.c - 테이블 유틸
• tbxface.c - ACPI 서브시스템을 위한 공용 인터페이스
• tbxfroot.c - 루트 ACPI 테이블(RSDT) 검색
• Makefile - Makefile

(XEN)/xen/drivers/acpi/utilities - ACPI 유틸
• utglobal.c - ACPI 서브시스템을 위한 글로벌 변수
• utmisc.c - 공통 유틸 프로시저
• Makefile - Makefile

(XEN)/xen/drivers/char - 문자 드라이버
• console.c - Xen과 도메인 0를 위한 콘솔 드라이버
• ns16550.c - 16550 시리즈 UART 드라이버
• serial.c - 시리얼 드라이버 프레임웍
• Makefile – Makefile

(XEN)/xen/drivers/cpufreq - CPU 주파수 제어 드라이버
• cpufreq.c - CPU 주파수 제어 드라이버 메인
• cpufreq_misc_governors.c - cpufreq 거버너 공통 코드
• cpufreq_ondemand.c - ondemand 방식 거버너. ondemand는 CPU 부하가 95%의 경우 동적으로 전환하는 방식이다.
• utility.c - cpufreq 드라이버와 Px 통계를 위한 Misc 함수
• Makefile - Makefile

(XEN)/xen/drivers/passthrough - 패쓰쓰루 드라이버
• io.c - 패쓰쓰루 I/O
• iommu.c - IOMMU 제어 루틴
• pci.c - PCI 드라이버
• Makefile- Makefile

(XEN)/xen/drivers/passthrough/amd - AMD의 IOMMU
• iommu_acpi.c – IOMMU ACPI
• iommu_detect.c - IOMMU 검출
• iommu_init.c - IOMMU 초기화
• iommu_intr.c - IOMMU 인터럽트
• iommu_map.c - IOMMU 맵
• pci_amd_iommu.c - PCI와 관련된 IOMMU 루틴
• Makefile - Makefile

(XEN)/xen/drivers/passthrough/vtd - 인텔의 VT-d
• dmar.c - DMA 리매핑 테이블
• dmar.h - DMAR 헤더 파일
• extern.h - 외부 참조 함수 헤더 파일
• intremap.c - 인터럽트 리매핑
• iommu.c - IOMMU 관련 루틴
• iommu.h - IOMMU 헤더 파일
• qinval.c - VT-d 큐 무효화 루틴
• quirks.c - VT-d 쿼크
• utils.c - VT-d 관련 유틸
• vtd.h - VT-d 헤더 파일
• Makefile - Makefile

(XEN)/xen/drivers/passthrough/vtd/ia64 - IA64 아키텍처 종속적인 VT-d
• ats.c - 주소 변환 서비스(Address Translation Service)
• vtd.c - IA64 아키텍처 VT-d 루틴
• Makefile - Makefile

(XEN)/xen/drivers/passthrough/vtd/x86 - x86 아키텍처 종속적인 VT-d
• ats.c - 주소 변환 서비스(Address Translation Service)
• vtd.c - x86 아키텍처 VT-d 루틴
• Makefile - Makefile

(XEN)/xen/drivers/pci - PCI 드라이버
• pci.c - 아키텍처 독립적인 PCI 접근 함수
• Makefile - Makefile

(XEN)/xen/drivers/video - VIDEO 드라이버
• font.h – 폰트 자료구조 헤더 파일
• font_8x8.c - 8x8 크기 폰트
• font_8x14.c- 8x14 크기 폰트
• font_8x16.c - 8x16 크기 폰트
• vesa.c - VESA 선형 프레임 버퍼 처리
• vga.c - VGA 지원 루틴
• Makefile - Makefile

(XEN)/xen/tools - Xen 하이퍼바이저 툴
• compat-build-header.py - 호환(compat) 버전 헤더 파일 생성 스크립트
• compat-build-source.py - 호환 버전 소스 파일 생성 스크립트
• get-fields.sh - xlat.h 헤더 생성 스크립트
• symbols.c - 심볼 정보가 담긴 어셈 코드 생성
• Makefile- Makefile

(XEN)/xen/tools/figlet - 아스키 문자열로 그림을 생성하는 툴
• figlet.c - figlet 소스 파일
• LICENSE - figlet 라이센스
• Makefile – Makefile
• README - figlet 설명서
• xen.flf - figlet으로 생성하는 아스키 그림 데이타 파일

(XEN)/xen/xsm - XSM(Xen Security Modules) 보안 모듈
• dummy.c – 다양한 더미 함수들
• xsm_core.c – XSM 코어 함수
• xsm_policy.c - XSM 정책 설정 루틴
• Makefile - Makefile

(XEN)/xen/xsm/acm - ACM(Access Control Module)
• acm_chinesewall_hooks.c - Chinese Wall 모델(Brewer and Nash 모델) 후킹 루틴
• acm_core.c - 도메인의 보안 식별자 초기화/해제 및 ACM 초기화 처리
• acm_null_hooks.c - 무정책 후킹 루틴
• acm_ops.c - 게스트 운영체제의 ACM 커맨드 요청 처리
• acm_policy.c - Xen의 접근 제어 정책 관리
• acm_simple_type_enforacment_hooks.c - STE(Simple Type Enforcement) 모델 후킹 루틴
• acm_xsm_hooks.c - 오리지널 ACM 후킹 기반으로 한 XSM의 후킹
• Makefile- Makefile

(XEN)/xen/xsm/flask - flask 툴 관련 소스 파일
• avc.c - AVC(Access Vector Cache) 구현
• flask_op.c - flask_op 하이퍼콜과 관련 함수
• hooks.c - flask 후킹 함수 구현
• Makefile - Makefile

(XEN)/xen/xsm/flask/ss
• avtab.c - 접근 벡터 테이블(Access Vector Table) 구현
• avtab.h - 접근 벡터 테이블 헤더 파일
• conditional.c - 조건부 처리 루틴 
• conditional.h - 조건부 처리 헤더 파일
• constraint.h - 제한된 표현
• context.h - 보안 컨텍스트
• ebitmap.c - 확장가능한 비트맵 구현
• ebitmap.h - 확장가능한 비트맵 헤더 파일
• hashtab.c - 해쉬 테이블
• hashtab.h - 해쉬 테이블 헤더 파일
• mls.c - MLS(Multi-Level Security) 정책 루틴
• mls.h - MLS 헤더 파일
• mis_types.h - MLS 정책 자료구조
• policydb.c - 정책 DB 구현
• policydb.h - 정책 DB 헤더 파일
• services.c - 보안 서비스 구현
• services.h - 보안 서비스 헤더 파일
• sidtab.c - SID(Security Identifier) 테이블 구현
• sidtab.h - SID 테이블 헤더 파일
• symtab.c - 심볼 테이블
• symtab.h - 심볼 테이블 헤더 파일
• Makefile - Makefile