파일에 대한 mmap()-ped 사용자 공간 스왑

파일에 대한 mmap()-ped 사용자 공간 스왑

매우 작은 메모리(거의 내장형)를 갖춘 시스템을 상상해 보십시오. 이는 한 가지 예외를 제외하고 거의 모든 작업에 충분합니다. 많은 양의 RAM이 필요한 작업 X가 있는데, 이는 시스템에 없습니다.

스와핑도 불가능하다고 상상해 보세요(메모리가 부족한 VM이고 호스팅 공급자가 스와핑을 금지함).

내 생각엔 우리가 할 수 있을 것 같아

  • 대용량 파일 만들기
  • mmap()-ing
  • malloc()이 -ed 영역은 mmap()물리적 RAM 대신 사용하기 위해 glibc에서 "요청"(재구성)됩니다 .

우리가 실제로 가지고 있는 것은 단일 프로세스에 대해서만 사용자 공간 수준 스왑 기능입니다.

내가 아는 한, glibc의 malloc() 구현은 구성 가능한 구현은 아니지만

  • malloc()다른 구현이 있습니다
  • glibc malloc도 쓰레기는 아니지만 딥 플레이가 일반적이지 않다는 점만 다를 뿐입니다.

가능합니까? 어떤 또는 유사한 솔루션이 존재합니까?

답변1

이런 일을 하는 것은 절대적으로 가능합니다. 이를 쉽게 달성하려면 프로세스당 하나의 파일이 필요합니다. 분명히 가상 머신의 디스크 공간에 의해 제한됩니다. 커널이 주기적으로 메모리를 디스크로 플러시하므로 성능도 좋지 않습니다. 이는 일부 sysctl 튜너블을 사용하여 완화할 수 있습니다(Linux에서 주기적 쓰기 저장을 검색).

malloc그런 다음 다른 장치 에 연결해야 합니다 . glibc의 경우 대신 사용할 수 있는 __morecore()후크(glibc 참조 ) 가 있습니다 .malloc.hsbrk()모두glibc 할당 . 어떤 경우에는 glibc가 mmap()대신 직접 호출하기 때문에 __morecore()이는 . mallopt()LD_PRELOAD 라이브러리를 사용하여 mmap()호출을 캡처할 수도 있습니다. 그러나 그것은 완전히 사소한 것이 아닙니다.

관련 정보