Background Image

FORUM

2009.03.31 10:22

64 bit 포팅이란?

조회 수 22003 추천 수 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
    -- 여러가지 이유가 있겠지만.. 확실하게.. 늦은 거 맞습니다 ~~

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

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 CUBRID 사용자를 위한 DBeaver 도구 출시 안내 admin 2024.04.23 31
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4456
954 DB명_TXXXXX 임시파일이 생기는 경우는 뭐죠? 1 kimsuny 2013.11.12 10849
953 No space left on device 오류 문의 1 김상윤 2013.06.25 10851
952 ㅠ.ㅠ 안되는 autocommit off 2 바람바람 2013.01.03 10864
951 cubrid service start 실행이 안되네요 ㅠ 1 Mickey 2010.04.28 10865
950 php 모듈을 로딩하지 못합니다. 해결방법이.... 1 오케이디바이스 2009.12.10 10866
949 cci_execute() 에서 lock이 걸리는 현상 2 두영 2010.02.05 10869
948 unload/load 관련한 질문입니다. 4 potter 2009.12.04 10878
947 테이블의 크기 1 카르마 2011.01.10 10880
946 Cubrid Manager 랑 JDBC연결과 cubrid 설치도 문제가있는 것 같습니다. 2 낚시나간지렁이 2014.08.02 10884
945 HA 구성중 서버 이전으로 재구성시 1 라면 2016.07.08 10889
944 큐브리드에 Synonym기능 있나요? 1 김성일컴퍼니 2013.07.18 10890
943 ACTIVE_SESSION 이 48수치에 DB 다운되어 버립니다. 13 안토니오 2010.07.25 10904
942 큐브리드 매니저 connect timed out. 오류 1 아이쿠두야 2012.03.23 10923
941 php 모듈설치가 안되요 5 sapr 2009.11.26 10923
940 큐브리드2008의 DB로드/언로드 기능으로 마이그레이션 방법 문의 12 file 고영진 2009.09.11 10925
939 쿼리 브라우져 가져오기 오류 질문 4 joke7 2013.12.08 10928
938 [질문] APC_Install-tools 1.4 사용시 ~ 2 file 야매코더 2009.03.17 10933
937 updateblob에 대한 문의 입니다. 1 짱똘 2009.10.28 10939
936 MSSQL에서 큐브리드 연동 3 미곰 2016.05.24 10950
935 접속자의 아이피나 맥어드레스를 알아낼수 있는지요 3 유니콘 2012.12.05 10956
Board Pagination Prev 1 ... 148 149 150 151 152 153 154 155 156 157 ... 200 Next
/ 200

Contact Cubrid

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