Background Image

FORUM

2009.03.31 10:22

64 bit 포팅이란?

조회 수 22005 추천 수 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 96
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4467
3899 php 모듈 5 sakang 2009.02.24 17018
3898 JAVA 프로시져 4 벅지 2009.02.24 15881
3897 DB 자동 시작 다시 한번더 질문 드립니다. 6 file 이석희 2009.02.25 13962
3896 cci 관련 질문 드립니다. 2 kkckc 2009.02.25 13221
3895 큐브리드 2008 R1.3 버전 설치 질문 3 김우람 2009.02.25 13608
3894 select하여, 일부만 변수값으로 넣으려고 합니다... 1 안지민 2009.02.26 13530
3893 java proc 1 벅지 2009.02.26 16999
3892 VARCHAR 타입에 관한 질문. 2 김우람 2009.02.26 26250
3891 procedure 내 내부 커넥션 4 벅지 2009.02.27 24429
3890 큐브리드 잠금정보 관련 질문 드립니다. 5 kkckc 2009.02.27 14497
3889 리눅스에서 큐브리드 설치시 문제입니다 2 file 유니콘 2009.02.27 13563
3888 서브쿼리에서 두개 이상의 데이터를 참조하려면. 2 안지민 2009.03.03 22320
3887 오라클에서 큐브리드로 마이그레이션 방법이 있나요? 1 삽질쟁이 2009.03.03 16004
3886 FreeBSD port 지원 가능한가요? 1 자유연애 2009.03.03 14524
3885 자동증가 필드 질문합니다 1 유니콘 2009.03.04 16024
3884 Java Heap Space 에러가 납니다 2 file 유니콘 2009.03.04 18182
3883 rownum은 order by에 영향을 안 받네요 2 안지민 2009.03.04 20485
3882 manager server에 이상이 생긴 거 같습니다. 4 Devin 2009.03.05 11389
3881 자바 함수 생성후 결과값 확인을 어떻게 하는지?? 3 이석희 2009.03.05 18751
3880 에러 코드 조회 3 kkckc 2009.03.05 11839
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 200 Next
/ 200

Contact Cubrid

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