Background Image

FORUM

2009.03.31 10:22

64 bit 포팅이란?

조회 수 22002 추천 수 0 댓글 6
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
http://dev.naver.com/projects/cubrid/forum?func=detail&aid=1726&group_id=15&atid=122&brow=all

위 사이트에 아래와 같은 글이 있네요.

-- 중기 업무는 규모가 꽤 되는 업무라서 아직까지는 저희 내부적으로 진행하고 있어요. 지금 하고 있는 일은
-- - 64비트 포팅
-- - HA 기능
-- - 모니터링 도구

이중에서 "64비트 포팅" 은 좀 납득하기가 어려운데...
"64비트 포팅" 이라는 것이 64bit CPU 에서 컴파일/실행이 가능하게 포팅한다는 뜻인가요.
그렇다면 좀 이상한데, 일반적으로 소스컴파일이 32bit 에서 가능하다면, 64 bit 에서도 가능합니다.

SQLITE, MYSQL, PGSQL, FireBird 모두 32/64 bit Linux 에서 소스 컴파일/설치/실행이 가능합니다.

그런데 큐브리드는 64 bit 환경에서는 컴파일이 안된다거나, 실행시 불안정하다거나 하는 문제가 있나요?
아니면 "64비트 포팅" 에 다른 뜻이 있나요?
  • ?
    Prototype 2009.04.01 00:00

    저희 제품에 관심을 가져 주셔서 감사합니다.
    물론 아주 일반 적인 경우 32bit 소스를 그대로 가져다가 64bit 에서 컴파일 해도 바이너리를 만드는데에는 거의 문제가 없습니다. 다만, 경우에 따라 32bit소스를 64bit 환경에 마이그레이션을 시도 할 때 의도치 않은 결과를 얻을 수 있는 경우가 존재합니다.

    몇가지만 뽑아보자면...
    1. int형이나 16진수 상수를 포인터타입에 대입하거나 포인터를 int에 캐스팅 할 경우 잘못된 값을 얻어올 수 있음
    2. 포인터와 int 를 비교할 때에도 잘못된 결과를 야기할 수 있음.
    3. 포인터값을 int나 unsigned int 로 캐스팅 할 경우 값이 손상 될 수 있음
    4. 포인터 값을 증가시키는 코드의 경우 모델 타입에 따라 증가값이 다름(32bit 에서는 4byte, 64bit 에서는 8byte)
    5. 4의 이유에 의해 long pointer 과 int pointer 를 캐스팅 할 경우 오브젝트 크기가 다름에 의해 문제 가 발생함
    6. 정밀도를 고려하지 않으면 상수 연산시 데이터 손실이 발생 할 수 있음

    이런 경우가 존재합니다. 물론, 나열한 경우의 수는 아주 일부만 뽑아 본 것이며, 훨씬 더 많은 고려하여야 할 점이 존재합니다.
    가령 한가지 아주 간단한 예를 들자면 printf 함수의 경우 32bit 시스템에서는 %d 로 int, long 값을 모두 표현 할 수 있으나, 64bit 환경에서는 리눅스/유닉스의 경우 long 을 출력할 경우 %ld 를 사용하여야 합니다. 반면 64bit windows 환경에서는 %d 로도 정상적인 값의 출력이 가능합니다. (참고로 long 형의 경우 64bit 리눅스/유닉스 등의 플랫폼에서는 64bit의 크기를 가지며, 윈도우 플랫폼의 경우에는 32bit/64bit 상관 없이 32bit 의 크기를 가집니다.)

    위와 같이, 32bit 코드가 64bit 에서 컴파일이 잘 된다고 하여, 결과물이 정상 동작 할 수 있다는 보장이 없습니다.
    SQLITE, MYSQL, PGSQL, FireBird 등이 32bit/64bit 에서 모두 컴파일이 잘 된다는 것은 위에서 나열한 부작용이 일어날 수 있는 코드를 모두 다 제거하였다는 것을 의미 할 뿐, 32bit에서 작성된 코드가 64bit 에서 제대로 작동 한다는 것을 의미하는 것은 아니겠지요.

    약간 오해가 있으셨던 것 같은데, CUBRID 가 이야기 하는 64비트 포팅이란, 이렇게 부작용이 일어날 수 있는 코드를 가능한 한 모두 64비트 환경에서도 부작용이 일어나지 않는 코드로 변경 하여, 컴파일/실행을 정상적으로 할 수 있게 하는 작업을 뜻합니다.

  • ?
    초보대왕 2009.04.01 10:59
    예상대로 64 bit 에서 컴파일하면 불안정하다는 거네요.

    -- 1. int형이나 16진수 상수를 포인터타입에 대입하거나 포인터를 int에 캐스팅 할 경우 잘못된 값을 얻어올 수 있음
    -- 2. 포인터와 int 를 비교할 때에도 잘못된 결과를 야기할 수 있음.
    -- 3. 포인터값을 int나 unsigned int 로 캐스팅 할 경우 값이 손상 될 수 있음
    -- 4. 포인터 값을 증가시키는 코드의 경우 모델 타입에 따라 증가값이 다름(32bit 에서는 4byte, 64bit 에서는 8byte)
    -- 5. 4의 이유에 의해 long pointer 과 int pointer 를 캐스팅 할 경우 오브젝트 크기가 다름에 의해 문제 가 발생함
    -- 6. 정밀도를 고려하지 않으면 상수 연산시 데이터 손실이 발생 할 수 있음
    -- etc, printf 문제,

    언급하신 것들의 핵심은 long 이 32/64 bit 머신에서, 그리고 window/linux 에서 크기가 다르다는 것인데,
    그런데 이것은 이식성있는 프로그램이어야 한다면 기본적으로 고려해야 하는 사항이지 않습니까.
    64 bit 리눅스가 나온지 최소 몇 년이 흘렀구요, 따라서 지금  64 bit 환경에 대비를 한다는 것은
    무언가 한 박자 놓치고 있는 듯한 인상을 받습니다.
     
    다음 큐브리드 인사이드 때에는 이런 것들에 대해서 좀 더 얘기를 하고 싶어집니다.

    일단 자세한 답변에 감사드립니다.
  • ?
    beatrice 2009.04.01 19:49
    사용자 측면에서 봤을 때 64비트 버전은 address space 확장을 통해서 2기가 바이트 이상의 버퍼를 쓸 수 있도록 제공하고, 2기가 바이트 이상의 데이터베이스 볼륨 파일을 생성할 수 있도록 합니다. 이로 인한 성능 향상도 기대 요소 중의 하나입니다.
    결국 매우 큰 데이터베이스를 운영하는 고객에게 도움을 줄 수 있을 것으로 생각합니다.

    기술적으로 보면 기존의 ILP32 모델을 따라 작성된 코드를 LP64, LLP64 모델까지 포함하도록 변경/작성하는 일입니다.
    말씀하신 것처럼 매우 이식성이 높게 이미 작성이 된 코드라면 32비트 코드 및 64비트 코드로 컴파일 및 운영이 가능하겠지만, 생각만큼 간단한 일은 아니라고 판단합니다.
    데이터 모델 문제 뿐만 아니라 alignment, 성능을 위한 최적화 작업 등 해결해야 할 일들이 적지 않기 때문입니다.

  • ?
    초보대왕 2009.04.02 03:40

    -- 기술적으로 보면 기존의 ILP32 모델을 따라 작성된 코드를 LP64, LLP64 모델까지 포함하도록 변경/작성하는 일입니다.
    -- 말씀하신 것처럼 매우 이식성이 높게 이미 작성이 된 코드라면 32비트 코드 및 64비트 코드로 컴파일 및 운영이
    -- 가능하겠지만, 생각만큼 간단한 일은 아니라고 판단합니다.

    생각만큼 간단한 일이 아닐 수도 있기는 한데, 생각만큼 어려운 일도 아닙니다.
    신입 개발자라면, 처음부터 저런거 까지 생각하면서 코딩할 여력이 없겠지만,
    큐브리드가 전문가인 분들이 모인 곳인데, 저 정도가 간단하지 않다면, 너무 신중한 말씀이세요.
    문제가 되는 거라면 LP64, LLP64 모델에 대한 대응이 너무 늦다라고 말할 수 있다라는 것입니다.
    UNIX 벤더들이 이미 LP64, LLP64 모델중 어느 것으로 할 것인지 결정한 것은
    이미 1995 년도 였다고 합니다. ( http://herostudent.tistory.com/78 )
    이 년도가 정확한 증거가 없는 자료라 하더라도 최소한 2000 년 쯤에는 논의가 끝나 있을 거 같구요.
    그래서 MYSQL, PGSQL, 등은 최소 몇 년 전부터 64 bit 환경에서 컴파일 및 실행이 이미 되고 있읍니다.
    그것을 지금 큐브리드가 작업 중이라는 것인데, 이런 대목에서 한 두 박자 늦은 대응이 아니겠냐
    하는 것입니다.

  • ?
    진은숙 2009.04.02 03:45
    한 박자 늦은 게 아니라 두 서너 박자 늦었습니다 ^_^;;
    여러가지 이유가 있겠지만.. 확실하게.. 늦은 거 맞습니다 ~~
  • ?
    초보대왕 2009.04.02 04:04
    -- 여러가지 이유가 있겠지만.. 확실하게.. 늦은 거 맞습니다 ~~

    이런 대목에서 큐브리드가 사용할 수 있는 자원의 한계랄지, 그런게 느껴지고,
    동시에 어쩔수 없는 환경 내에서 고분분투하는 큐브리드 개발자분들의 모습이 떠올려집니다.~~

  1. SQLGate for CUBRID 영구 무료 라이선스 제공

    Date2020.04.09 Byadmin Views4263
    read more
  2. ResulstSet이 닫혔는데... 닫히는 이유가 먼가요?

    Date2011.06.10 By안지민 Views15605
    Read More
  3. Replication, 서버 이중화, HA

    Date2012.01.26 By승준77 Views23263
    Read More
  4. Release upgrade 문의

    Date2017.02.13 Byyscoma Views9138
    Read More
  5. Redmine 의 데이터베이스로 큐브리드를 사용하는 것이 가능할까요?

    Date2018.04.17 By밝은마음 Views251
    Read More
  6. Redhat 8버전 tls 1.0 에러

    Date2024.01.30 By11시38분 Views112
    Read More
  7. ROW_NUMBER() OVER(PARTITION BY 어떻게..해야 할까요???

    Date2011.09.09 By초식곰 Views26430
    Read More
  8. REUSE_OID 적용 시 이해가 잘안되는 부분이 있어 질문드립니다.

    Date2017.08.23 By덴드로비움 Views1060
    Read More
  9. REST api 지원 여부

    Date2019.08.29 By몰라알수가없어 Views695
    Read More
  10. REPLACE 함수 문의

    Date2019.03.22 By아범 Views1748
    Read More
  11. RDB와 ORDB 벤치마크

    Date2009.04.09 Byrahmat Views19387
    Read More
  12. RANK 함수 관련 질문드립니다.

    Date2013.06.11 By이종진 Views10484
    Read More
  13. R3.1 64비트 서브쿼리 관련 문의 드립니다

    Date2011.06.28 Byhj Views7938
    Read More
  14. R3.0 버전 문의

    Date2010.10.07 By겜기능되거든 Views8070
    Read More
  15. R2.2 에서 트랜잭션과 inser_id()

    Date2014.03.03 By파스크란 Views6156
    Read More
  16. R2.2 에서 엑셀로 보내기가 않되는 것 같습니다.

    Date2010.06.05 By배워볼까 Views9804
    Read More
  17. R1.4->R2.0(64비트)베타 업그레이드 및 마이그레이션후 DB접속불가.

    Date2009.12.21 Byxclass Views11762
    Read More
  18. R1.4 -> R2.2 마이그레이션 중 스키마 로드 에러

    Date2011.12.20 By노랑배 Views7
    Read More
  19. Query execution failure #7264 에러가 무슨에러죠?

    Date2012.10.20 By앙고라 Views9104
    Read More
  20. Query Browser 쿼리질의 에러 발생

    Date2014.03.10 By모냐모냐 Views8740
    Read More
  21. Query Browser Eclipse plug-in 설치시 오류

    Date2014.02.07 By규리 Views11338
    Read More
Board Pagination Prev 1 ... 146 147 148 149 150 151 152 153 154 155 ... 199 Next
/ 199

Contact Cubrid

대표전화 070-4077-2110 / 기술문의 070-4077-2113 / 영업문의 070-4077-2112 / Email. contact_at_cubrid.com
Contact Sales