수업 프로젝트를 제대로 하려면 컴퓨터가 좋아야 하는군요.

By | 2009/11/10

  이번에 운영체제론 프로젝트로 pintos를 하고 있습니다. 오늘까지 Project 2를 제출해야 하는데 test-case 중 10%의 비중을 차지하는 것이 제대로 되지 않았습니다.

pass tests/filesys/base/syn-write
pass tests/userprog/args-none
pass tests/userprog/args-single
pass tests/userprog/args-multiple
pass tests/userprog/args-many
pass tests/userprog/args-dbl-space
pass tests/userprog/sc-bad-sp
pass tests/userprog/sc-bad-arg
pass tests/userprog/sc-boundary
pass tests/userprog/sc-boundary-2
pass tests/userprog/halt
pass tests/userprog/exit
pass tests/userprog/create-normal
pass tests/userprog/create-empty
pass tests/userprog/create-null
pass tests/userprog/create-bad-ptr
pass tests/userprog/create-long
pass tests/userprog/create-exists
pass tests/userprog/create-bound
pass tests/userprog/open-normal
pass tests/userprog/open-missing
pass tests/userprog/open-boundary
pass tests/userprog/open-empty
pass tests/userprog/open-null
pass tests/userprog/open-bad-ptr
pass tests/userprog/open-twice
pass tests/userprog/close-normal
pass tests/userprog/close-twice
pass tests/userprog/close-stdin
pass tests/userprog/close-stdout
pass tests/userprog/close-bad-fd
pass tests/userprog/read-normal
pass tests/userprog/read-bad-ptr
pass tests/userprog/read-boundary
pass tests/userprog/read-zero
pass tests/userprog/read-stdout
pass tests/userprog/read-bad-fd
pass tests/userprog/write-normal
pass tests/userprog/write-bad-ptr
pass tests/userprog/write-boundary
pass tests/userprog/write-zero
pass tests/userprog/write-stdin
pass tests/userprog/write-bad-fd
pass tests/userprog/exec-once
pass tests/userprog/exec-arg
pass tests/userprog/exec-multiple
pass tests/userprog/exec-missing
pass tests/userprog/exec-bad-ptr
pass tests/userprog/wait-simple
pass tests/userprog/wait-twice
pass tests/userprog/wait-killed
pass tests/userprog/wait-bad-pid
pass tests/userprog/multi-recurse
pass tests/userprog/multi-child-fd
pass tests/userprog/rox-simple
pass tests/userprog/rox-child
pass tests/userprog/rox-multichild
pass tests/userprog/bad-read
pass tests/userprog/bad-write
pass tests/userprog/bad-read2
pass tests/userprog/bad-write2
pass tests/userprog/bad-jump
pass tests/userprog/bad-jump2
FAIL tests/userprog/no-vm/multi-oom
pass tests/filesys/base/lg-create
pass tests/filesys/base/lg-full
pass tests/filesys/base/lg-random
pass tests/filesys/base/lg-seq-block
pass tests/filesys/base/lg-seq-random
pass tests/filesys/base/sm-create
pass tests/filesys/base/sm-full
pass tests/filesys/base/sm-random
pass tests/filesys/base/sm-seq-block
pass tests/filesys/base/sm-seq-random
pass tests/filesys/base/syn-read
pass tests/filesys/base/syn-remove
pass tests/filesys/base/syn-write
1 of 76 tests failed.

  multi-oom이라는 것이 FAIL이라는 것을 알 수 있습니다. 해당 test가 FAIL이 되는 이유를 살펴보니 제대로 동작함에도 속도가 느려서 제한시간인 360초 안에 끝낼 수 없었기 때문입니다. 시간 제한 없이 돌려보니 대략 500초 정도 지나야지 종료가 되었습니다.

  그래서 소스를 보면서 하루 종일 어떻게 이것을 최적화 할 것인가를 고민하였고 전체적으로 이를 수정하여 460초 가량으로 줄였습니다. 하지만 더 이상 줄일 수는 없었습니다.

  포기하고 같은 조원의 컴퓨터에서 한 번 돌려보게 하였습니다. 그러자 그는 pass했다는 말을 하더군요. 컴퓨터 사양이 매우 좋으니까 시간 안에 끝나는 것이라 생각하고 좀 더 열심히 그리고 제대로 해보기로 하고 소스를 더욱 파헤쳤습니다.

  하지만 더 이상 줄일 수는 없었습니다. 대신 제 컴퓨터가 아닌 좀 더 성능이 좋은 동아리 서버에 한 번 돌려보았습니다.

pass tests/userprog/args-none
pass tests/userprog/args-single
pass tests/userprog/args-multiple
pass tests/userprog/args-many
pass tests/userprog/args-dbl-space
pass tests/userprog/sc-bad-sp
pass tests/userprog/sc-bad-arg
pass tests/userprog/sc-boundary
pass tests/userprog/sc-boundary-2
pass tests/userprog/halt
pass tests/userprog/exit
pass tests/userprog/create-normal
pass tests/userprog/create-empty
pass tests/userprog/create-null
pass tests/userprog/create-bad-ptr
pass tests/userprog/create-long
pass tests/userprog/create-exists
pass tests/userprog/create-bound
pass tests/userprog/open-normal
pass tests/userprog/open-missing
pass tests/userprog/open-boundary
pass tests/userprog/open-empty
pass tests/userprog/open-null
pass tests/userprog/open-bad-ptr
pass tests/userprog/open-twice
pass tests/userprog/close-normal
pass tests/userprog/close-twice
pass tests/userprog/close-stdin
pass tests/userprog/close-stdout
pass tests/userprog/close-bad-fd
pass tests/userprog/read-normal
pass tests/userprog/read-bad-ptr
pass tests/userprog/read-boundary
pass tests/userprog/read-zero
pass tests/userprog/read-stdout
pass tests/userprog/read-bad-fd
pass tests/userprog/write-normal
pass tests/userprog/write-bad-ptr
pass tests/userprog/write-boundary
pass tests/userprog/write-zero
pass tests/userprog/write-stdin
pass tests/userprog/write-bad-fd
pass tests/userprog/exec-once
pass tests/userprog/exec-arg
pass tests/userprog/exec-multiple
pass tests/userprog/exec-missing
pass tests/userprog/exec-bad-ptr
pass tests/userprog/wait-simple
pass tests/userprog/wait-twice
pass tests/userprog/wait-killed
pass tests/userprog/wait-bad-pid
pass tests/userprog/multi-recurse
pass tests/userprog/multi-child-fd
pass tests/userprog/rox-simple
pass tests/userprog/rox-child
pass tests/userprog/rox-multichild
pass tests/userprog/bad-read
pass tests/userprog/bad-write
pass tests/userprog/bad-read2
pass tests/userprog/bad-write2
pass tests/userprog/bad-jump
pass tests/userprog/bad-jump2
pass tests/userprog/no-vm/multi-oom
pass tests/filesys/base/lg-create
pass tests/filesys/base/lg-full
pass tests/filesys/base/lg-random
pass tests/filesys/base/lg-seq-block
pass tests/filesys/base/lg-seq-random
pass tests/filesys/base/sm-create
pass tests/filesys/base/sm-full
pass tests/filesys/base/sm-random
pass tests/filesys/base/sm-seq-block
pass tests/filesys/base/sm-seq-random
pass tests/filesys/base/syn-read
pass tests/filesys/base/syn-remove
pass tests/filesys/base/syn-write
All 76 tests passed.

  모두 통과네요.;;;;

  하루 종일 어떻게 코드를 최적화 할 것인가 고민했지만 결국 컴퓨터가 좋으면 끝이었습니다.;;;;

  제가 테스트를 한 컴퓨터 환경은 Pentium 4 Northwood 2.4Ghz, 1GB RAM, Fedora 11이었습니다. 나름 나쁘지 않은 사양이라 생각하였고 특히 과제의 경우에는 큰 무리가 없다고 생각했습니다.

  하지만 이제 깨달았습니다. 6년 전에 구입한 이 컴퓨터로는 이제 과제도 어렵다는 것을… OTL…

  과제도 돈이 있어야 할 수 있군요.ㅜ

  Project 2를 make grade하여 나온 결과물을 남깁니다. 이렇게라도 위로 받아야 할 듯..ㅜ

TOTAL TESTING SCORE: 100.0%
ALL TESTED PASSED — PERFECT SCORE

– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –

SUMMARY BY TEST SET

Test Set                                      Pts Max  % Ttl  % Max
——————————————— — — —— ——
tests/userprog/Rubric.functionality           108/108  35.0%/ 35.0%
tests/userprog/Rubric.robustness               88/ 88  25.0%/ 25.0%
tests/userprog/no-vm/Rubric                     1/  1  10.0%/ 10.0%
tests/filesys/base/Rubric                      30/ 30  30.0%/ 30.0%
——————————————— — — —— ——
Total                                                 100.0%/100.0%

– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –

9 thoughts on “수업 프로젝트를 제대로 하려면 컴퓨터가 좋아야 하는군요.

  1. infiniti

    그러나 저 사양의 PC에서 최적화를 위해 삽질을 하시다보면 나중에는 어느새 껑충 뛰어 있는 자신의 실력에 놀라시게 될겁니다.

    Reply
    1. NoSyu

      사실 초반에는 디자인을 대충만든 감이 없지않아 있었는데
      그것을 전부 최적화 작업을 하면서 디자인도 바꾸고 코딩 스타일도 바꿨습니다.
      그래서 저만큼 줄일 수 있었습니다.
      확실히 저사양 컴퓨터를 쓰면 실력향상은 되는 듯..^^
      하지만 새로운 기술을 쓸 수 없다는 단점도….OTL

      Reply
  2. Funworld

    삼국지3 돌리기 위해 himem.sys 오토엑.bat 옥수수돼지.sys 만지던 시절로 돌아갑니다

    Reply
    1. NoSyu

      그렇게 들으니 신선하네요.^^
      전 그 때 알파벳밖에 발음할 줄 몰라서 ‘씨오엔에프아이지점에스와이에스’ 라고 했습니다.OTL

      Reply
    2. 근영

      ㅋㅋ 나도.
      ‘오엔에프아이지점에스와이에스’라고 읽었었는데
      A/S기사가 컨피그 시스라고 읽던걸 -_- 배웠던 기억이 쿨럭,,

      Reply
    3. NoSyu

      A/S기사가 가르쳐줬군.
      난 후에 친구들이 쓰는 것을 보고 알았다네. 쿨럭…

      Reply
  3. NoSyu

    현재 이 글이 페이스북을 통해서 들어와 읽혀지고 있다.
    위의 Like의 개수를 보면 유추 가능
    그나저나 내 기억으로 이 글을 적고나서 최적화에 다시 한 번 도전하여 내 컴퓨터에서도 성공하였던 것 같은 기억이다.
    컴퓨터 성능이 나빠도 잘 디자인하면 통과 가능한 그러한 테스트였던 것이다.
    하지만 하드웨어에 무임승차가 가능하다는 것도 존재한다는 것을 얘기한 글.
    더하여 이러한 무임승차는 CPU clock이 더 이상 올라가지 않는 것으로 인해 존재하지 않는다는 것을 2000년도 중후반에 누군가가 주장하였던 기억이 난다.

    Reply
  4. 하늘빛

    저는 그냥 일반인이라 자세히는 몰라서 질문합니다. 클럭이 올라가지 않더라도 초당 명령어 수행 수(IPS)나 초당 부동소수점 연산 수(FLOPS) 같은 것은 늘어나니까 이런 무임승차(?)가 점점 더 많아질 수 있나요?

    Reply
    1. NoSyu Post author

      반갑습니다.
      아마 그렇지 않을까 싶습니다.
      이 작업을 예전에 하였고, 요즘은 이런 것에 관심을 두지 않아 잘 모르겠습니다만,
      캐시 사이즈가 증가하는 것만으로도 충분한 성능 향상이 있지 않을까도 싶습니다.

      Reply

Leave a Reply