문제

RAM에 맞는 것보다 크지 만 운영 체제 블록 캐시에서 큰 파일을 최대한 많이 유지해야하며 또 다른 매우 큰 파일을 계속 읽고 있습니다. ATM 다른 파일을 읽을 때 시스템 캐시에서 큰 중요한 파일의 큰 덩어리를 제거하겠습니다.

도움이 되었습니까?

해결책

Linux 또는 Solaris와 같은 Posix 시스템에서는 posix_fadvise를 사용해보십시오.

스트리밍 파일에서 다음과 같은 작업을 수행하십시오.

posix_fadvise(fd, 0, 0, POSIX_FADV_SEQUENTIAL);
while( bytes > 0 ) {
  bytes = pread(fd, buffer, 64 * 1024, current_pos);
  current_pos += 64 * 1024;
  posix_fadvise(fd, 0, current_pos, POSIX_FADV_DONTNEED);
}

또한 POSIX_FADV_WILLNEED를 다른 파일에 적용하여 메모리 우선 순위를 높일 수 있습니다.

이제 Windows Vista 및 Server 2008도 메모리 우선 순위로 멋진 트릭을 수행 할 수 있다는 것을 알고 있습니다. 아마도 XP와 같은 오래된 버전은 더 기본적인 트릭을 수행 할 수 있습니다. 그러나 나는 내 머리 꼭대기에서 기능을 모르고 그들을 찾을 시간이 없습니다.

다른 팁

Linux 내에서 파일 시스템을 유형으로 장착 할 수 있습니다. TMPFS, 필요한 경우 사용 가능한 스왑 메모리를 백업으로 사용합니다. 메모리 크기보다 더 큰 파일 시스템을 만들 수 있어야하며 시스템 캐시에서 해당 파일 시스템의 내용을 우선 순위로 삼습니다.

mount -t tmpfs none /mnt/point

보다: http://lxr.linux.no/linux/documentation/filesystems/tmpfs.txt

파일의 혜택을받을 수도 있습니다 swapiness 그리고 drop_cache 이내에 /proc/sys/vm

Windows를 사용하는 경우 플래그로 스캔하는 파일을 여는 것을 고려하십시오.

FILE_FLAG_SEQUENTIAL_SCAN

당신은 또한 사용할 수 있습니다

FILE_FLAG_NO_BUFFERING

해당 파일의 경우 읽기 크기 및 버퍼 정렬에 약간의 제한 사항이 부과됩니다.

일부 운영 체제에는 RAMDISK가있어 저장 용 RAM 세그먼트를 설정 한 다음 파일 시스템으로 장착 할 수 있습니다.

그러나 내가 이해하지 못하는 것은 운영 체제가 파일을 캐싱하는 것을 막기를 원하는 이유입니다. 당신의 전체 질문은 실제로 나에게 의미가 없습니다.

더 많은 RAM (상대적으로 저렴합니다!)을 구입하거나 OS가 그 일을하게하십시오. OS를 우회하는 것이 가치보다 더 어려울 것이라고 생각합니다. OS는 귀하 또는 기타 응용 프로그램에 메모리가 필요할 때까지 필요한만큼 파일의 많은 캐시를 사용합니다.

프로세스 수를 최소화 할 수 있다고 생각하지만 더 많은 메모리를 구매하는 것이 더 빠릅니다.

mlock () 및 mlockall ()은 각각 호출 프로세스의 가상 주소 공간의 일부 또는 전부를 RAM으로 고정시켜 해당 메모리가 스왑 영역으로 페이징되는 것을 방지합니다.

(MLOCK에서 복사 (2) Linux Man Page)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top