Background Image

FORUM

2009.03.31 10:22

64 bit 포팅이란?

조회 수 21834 추천 수 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
번호 제목 글쓴이 날짜 조회 수
공지 SQLGate for CUBRID를 사용해 보시기 바랍니다!!! file admin 2019.07.31 540
99 AIX에 CUBRID 설치 후 오류사항 문의 1 최명호 2015.06.02 7618
98 ADO이용시 OLEDB Driver에러 2 flypig 2010.01.29 15489
97 ADO.net 또는 ODBC에 대한 질문입니다. 12 세스카 2012.03.20 13250
96 ADO.net Driver 변경 시 cascci.dll 로드할 수 없다는 오류 1 물병 2017.07.25 327
95 ADO.Net 사용중입니다. 상태확인 방법을 알고 싶습니다. 1 CUCUCUCU 2015.10.22 5657
94 ADO.NET에서 자바 저장함수 호출 2 kdknim21 2014.11.01 8172
93 ADO.NET 을 비쥬얼 스튜디오에 연결하기... 4 희나람 2012.02.12 11657
92 ADO.NET 드라이버 집합형 데이터 지원 2 소라게 2012.02.09 39813
91 ADO.NET 관련 질문 1 할리 2015.10.30 6423
90 ADO.NET dll 참조 2 abc12 2018.10.04 337
89 ADO.NET cascci.dll 64Bit, field name/type 오류 2 할리 2016.01.21 6571
88 ADO.NET cascci.dll 64Bit 관련 1 할리 2015.11.06 6091
87 ADO.NET 4.5 SQL query의 칼럼이름가져오기 1 allis 2017.09.06 225
86 ADO.NET "Invalid buffer position!" 오류 1 file 할리 2014.07.17 7421
85 ADO update관련 문의드립니다. 1 SD2 2014.01.26 7647
84 ADD_MONTHS 함수의 사용 1 체리필터 2009.06.25 16006
83 ADD AFTER, FIRST 명령어와 ALTER MODIFY, CHANGE 문제 1 무냉채 2017.03.01 9272
82 ACXEL_Installer를 이용할려는데 1 SoMa 2010.12.20 7671
81 ACTIVE_SESSION 이 48수치에 DB 다운되어 버립니다. 13 안토니오 2010.07.25 10832
80 A serial object already exists as an auto increment constraint. 오류 질문 1 kimsuny 2013.10.28 15888
Board Pagination Prev 1 ... 146 147 148 149 150 151 152 153 154 155 Next
/ 155

Contact Cubrid

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