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 도구 출시 안내 new admin 2024.04.23 20
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4452
1051 데이터 등록에러 Sector/page table of file VFID 1 스카이 2011.07.29 8172
1050 Attempt to call a method related to scrollability of non-scrollable ResultSet. 오류 문의 1 cuins 2011.07.28 12568
1049 서비스 관련 2 브리즈 2011.07.28 7516
1048 [java] 두개의 PreparedStatement 할당후 close 시 문제 2 cuins 2011.07.27 10827
1047 PHP + Apache + Cubrid 연동 질문 입니다. 3 지누 2011.07.27 11347
1046 Oracle 사용자 팁 문의 1 비형여자 2011.07.26 9689
1045 exception 문의 1 비형여자 2011.07.22 7839
1044 CUBRID DB 호스팅 시 UTF-8 타입 사용. 1 ezzone 2011.07.19 7656
1043 데이타베이스 또는 테이블스페이스 생성 시 자동증가 옵션이 어떻게 되는지?? 3 풀소리 2011.07.19 9849
1042 HA 복제시 매니저에서의 테이블 생성 1 유니콘 2011.07.15 18502
1041 [급]Cubrid메니저에서 Unlod 후 load시 오류 3 file 별솔아범 2011.07.15 23906
1040 HA관련 CUBRID Manager 에서 대시보드 문의드립니다... 2 file 반짝이 2011.07.13 25736
1039 JSP에서 데이터베이스 연결 어떻게 해요? 1 JH 2011.07.12 12167
1038 migration tool을 이용해 마이그레이션 작업 중 테이블의 데이터 적재 실패 문제 6 엔하늘 2011.07.11 10172
1037 PDO가 지원되고 있는 건가요? 1 kkh 2011.07.09 10663
1036 garbage_collection=yes 설정시 CM(테이블편집-SQL문 탭) 문제입니다... 3 file 반짝이 2011.07.09 8646
1035 3.1에서 4.0 업그레이드 후 4 유겸아빠 2011.07.08 8037
1034 4.0 HA ha_db_list 설정 관련 질문드립니다. 7 반짝이 2011.07.08 24401
1033 php driver interface...x64 4 platanus 2011.07.08 7661
1032 참조를 이용해서 찾을때 인덱스를 태울려면 어떻게 하나요? 2 안지민 2011.07.08 7538
Board Pagination Prev 1 ... 143 144 145 146 147 148 149 150 151 152 ... 200 Next
/ 200

Contact Cubrid

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