Creative Commons License

Size of Max Mapped Memory IT



Size of Max Shared Memory

절대로 심심하지 않다. 해야하는 일이기에 하는 것이다. Linux에서 별다른 세팅이 없으면 32bit 환경에서 최대 4G 메모리를 할당할 수 있으며, 이 중에 1G는 커널, 3G는 사용자에 할당한다. 포인터 크기(sizeof(void*))도 4byte이므로 한 프로세스에서 많이 써봤자 3G 밖에 못 쓴다는 것이다. 실험을 해보면 3G도 못 쓰고 2G 정도 밖에 못 쓴다.

64bit 환경에서 말이 조금 달라진다. 3G 이상 할당을 할 수 있다. 포인터 크기도 8byte인데 뭔들 못 하겠어. ㅡ_-)

언젠가 퍼포먼스 테스트한 것 같은데... 현재 64bit 시스템에서 3기가 할당하고 memset으로 3기가를 초기화 하여 메모리를 실제로 할당 받았다. (리눅스는 메모리 양과 관계 없이 일단 할당해주므로 실제로 할당 받도록 메모리에 접근을 해야한다) 자... 문제는 임의접근(radom access). 절망적이다. 1메가 바이트(1,048,576bytes) 임의접근을 했는데 정말 그지 같은 속도를 자랑(?)한다. Read는 거의 1분에 1% 올라간다. Write는 그것에 비해 2/3 정도 더 느리다. 이렇게 해서는 쓸 수 없다. 중간에 rand()랑 % 연산자랑 if 문이랑 뭐랑 뭐랑 자잘한거 몇개 쓰긴 하지만 이건 너무하다. 해당 작업을 할 때 vmstat을 보면 스왑I/O는 거의 일어나지 않는다. 대신 I/O가 빈번히 일어나는데 아무래도 하드 디스크에서 페이지 올리고 내리고 하니라 그런가보다.
  • 1메가 바이트 임의접근하여 읽는데 걸린 시간: 7,276,902,360 (마이크로 세컨드) - 거짐 2 시간
  • 1메가 바이트 임의접근하여 쓰는데 걸린 시간: 8,251,277,991 (마이크로 세컨드) - 2시간은 가뿐히 넘어주는 센스!!

위에서 3기가 할당한다고 했는데, 약 2.5G 할당한다. 이유는 프로세스가 기본적으로 사용하는 힙, 스택 등의 주소공간을 미리 사용하기 때문이다.

덧글

  • chadr 2007/03/06 19:14 # 삭제

    3기가를 할당해도 실제로는 예약만 되어있고 커밋은 안된 상태에서 임의접근을 할라고 하니 그제서야 커밋을 하고 그러느라 하드 엑세스가 많아져서 느리지는건지..

    아니면 뭔가 좀 리눅스가 삽질을 하는건지 ㄱ-
  • 샘이 2007/03/06 19:27 #

    예약만 되어 있는 상태를 없애기 위해 memset을 했잖아. 잘 읽어보아.
  • chadr 2007/03/07 23:55 # 삭제

    그럼 커밋 된거군요.
    커밋하고 나서 3기가나 되는 스왑을 하드에 기록하느라 그런것 같네요 ㄱ-
※ 이 포스트는 더 이상 덧글을 남길 수 없습니다.

Google Adsense

Google Adsense

Google Analytics



C로그팬박스