태그 보관물: virtual-memory

virtual-memory

Linux에서 RAM으로 파일 캐싱 / 사전로드 에서 최고 라는 것을 목격

나는 4GB의 RAM을 가진 다소 오래된 서버를 가지고 있으며 하루 종일 동일한 파일을 제공하지만 3GB의 RAM은 “무료”인 반면 하드 드라이브에서 그렇게하고 있습니다.

램 드라이브를 사용해 본 사람이라면 누구나 속도면 에서 최고 라는 것을 목격 할 수 있습니다 . 이 시스템의 메모리 사용량은 일반적으로 1GB / 4GB보다 높지 않으므로 추가 메모리를 좋은 방법으로 사용할 수 있는지 알고 싶습니다.

  • 파일 시스템에 RAM에서 특정 파일을 항상 제공하도록 지시 할 수 있습니까?
  • RAM을 사용하여 파일 읽기 기능을 향상시키는 데 사용할 수있는 다른 방법이 있습니까?

더 구체적으로, 나는 여기서 ‘핵’을 찾고 있지 않다. 램 드라이브를 만들고 파일을 수동으로 복사하지 않고도 RAM에서 파일을 제공하기 위해 파일 시스템 호출을 원합니다. 또는 적어도 나를 위해 이것을하는 스크립트.

가능한 응용 프로그램은 다음과 같습니다.

  • 많이 읽히는 정적 파일이있는 웹 서버
  • 큰 라이브러리가있는 응용 프로그램 서버
  • RAM이 너무 많은 데스크탑 컴퓨터

어떤 아이디어?

편집하다:

  • :이 매우 유익한 찾을 리눅스 페이지 캐시와 pdflush
  • Zan이 지적했듯이 메모리는 실제로 비어 있지 않습니다. 내 말은 응용 프로그램에서 사용하지 않고 메모리에 캐시 해야하는 것을 제어하고 싶다는 것입니다.


답변

vmtouch 는 작업에 유용한 도구 인 것 같습니다.

하이라이트:

  • 얼마나 많은 디렉토리가 캐시되는지 쿼리
  • 캐시되는 파일의 양을 쿼리합니다 (또한 페이지, 그래픽 표현).
  • 캐시에 파일로드
  • 캐시에서 파일을 제거
  • 캐시에 파일 잠금
  • 데몬으로 실행

vmtouch 매뉴얼

편집 :
질문에 표시된 사용법은 vmtouch Hompage의 예 5에 나와 있습니다.

Example 5

Daemonise and lock all files in a directory into physical memory:

vmtouch -dl /var/www/htdocs/critical/

EDIT2 :
주목 코멘트에, 지금이 자식 저장소 가능합니다.


답변

vmtouch Virtual Memory Toucher 유틸리티를 사용하여 가능 합니다 .

이 도구를 사용하면 Linux 시스템에서 파일 시스템 캐시를 제어 할 수 있습니다. VM 캐시 서브 시스템에서 특정 파일 또는 디렉토리를 강제로 잠 그거나이를 사용하여 파일 / 디렉토리의 어떤 부분이 VM에 포함되어 있는지 확인할 수 있습니다.

How much of the /bin/ directory is currently in cache?

$ vmtouch /bin/
           Files: 92
     Directories: 1
  Resident Pages: 348/1307  1M/5M  26.6%
         Elapsed: 0.003426 seconds

또는…

Let's bring the rest of big-dataset.txt into memory...

$ vmtouch -vt big-dataset.txt
big-dataset.txt
[OOo                                                 oOOOOOOO] 6887/42116
[OOOOOOOOo                                           oOOOOOOO] 10631/42116
[OOOOOOOOOOOOOOo                                     oOOOOOOO] 15351/42116
[OOOOOOOOOOOOOOOOOOOOOo                              oOOOOOOO] 19719/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOo                        oOOOOOOO] 24183/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOo                  oOOOOOOO] 28615/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOo              oOOOOOOO] 31415/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOo      oOOOOOOO] 36775/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOo  oOOOOOOO] 39431/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO] 42116/42116

           Files: 1
     Directories: 0
   Touched Pages: 42116 (164M)
         Elapsed: 12.107 seconds

답변

파일 시스템 캐시로 물건을 가져 오는 데 대한 가난한 사람의 트릭은 단순히 캐시하여 / dev / null로 리디렉션하는 것입니다.


답변

리눅스는 가능한 많은 메모리에 디스크 IO를 캐시 할 것이다. 이것이 캐시 및 버퍼 메모리 통계입니다. 올바른 것을 저장하는 것보다 더 나은 작업을 수행 할 것입니다.

그러나 데이터를 메모리에 저장해야한다면 tmpfs 또는 ramfs를 사용하여 램 드라이브를 만들 수 있습니다. 차이점은 ramfs가 요청한 모든 메모리를 할당한다는 것입니다. tmpfs는 블록 장치가 사용하는 메모리 만 사용하기 때문입니다. 내 기억은 조금 녹슬지 만, 당신은 할 수 있어야합니다 :

 # mount -t ramfs ram /mnt/ram

또는

 # mount -t tmpfs tmp /mnt/tmp

그런 다음 데이터를 디렉토리에 복사하십시오. 머신을 끄거나 파티션을 마운트 해제하면 데이터가 손실됩니다.


답변

2.6 커널 스와핑 및 페이지 캐싱 기능에 대한 광범위한 내용을 읽은 후 ‘fcoretools’를 발견했습니다. 두 가지 도구로 구성됩니다.

  • fincore : 애플리케이션이 코어 메모리에 저장 한 페이지 수를 나타냅니다.
  • fadvise : 코어 메모리 (페이지 캐시)를 조작 할 수 있습니다.

(다른 누군가 가이 흥미로운 것을 발견하면 여기에 게시하고 있습니다)


답변

다른 도구를 사용하지 않아도 크게 도움이되는 두 가지 커널 설정이 있습니다.

교환

리눅스 커널에게 스왑을 얼마나 적극적으로 사용해야하는지 알려줍니다. Wikipedia 기사 인용 :

Swappiness는 시스템 페이지 캐시에서 페이지를 삭제하는 대신 런타임 메모리 교체 간의 균형을 변경하는 Linux 커널의 속성입니다. 교환 율은 0에서 100 사이의 값으로 설정할 수 있습니다. 값이 낮을수록 커널은 가능한 많이 스왑을 피하려고 시도하지만 값이 높을수록 커널이 적극적으로 스왑 공간을 사용하려고합니다. 기본값은 60이며 대부분의 데스크톱 시스템에서 100으로 설정하면 전체 성능에 영향을 줄 수 있지만 낮게 설정 (0이라도)하면 대화 형 작업이 향상 ​​될 수 있습니다 (응답 대기 시간 감소).

vfs_cache_pressure

vm.txt 에서 인용 :

커널이 디렉토리 및 inode 객체를 캐싱하는 데 사용되는 메모리를 회수하는 경향을 제어합니다.

vfs_cache_pressure = 100의 기본값에서 커널은 pagecache 및 swapcache 재생과 관련하여 “공정한”속도로 덴 트리 및 inode를 재생하려고 시도합니다. vfs_cache_pressure를 줄이면 커널은 dentry 및 inode 캐시를 유지하는 것을 선호합니다. …


swappiness커널을 100과 같이 높게 설정 하면 커널은 교체 할 필요가없는 모든 것을 이동시켜 파일 캐싱을위한 RAM을 비 웁니다. 그리고 vfs_cache_pressure더 낮게 설정 하면 (0이 아닌 50 으로 설정 ) 응용 프로그램 데이터를 RAM에 유지하는 대신 파일 캐싱을 선호합니다.

(저는 큰 Java 프로젝트를 작업하고 실행할 때마다 많은 RAM이 필요하고 디스크 캐시를 플러시했습니다. 따라서 다음에 프로젝트를 컴파일 할 때 모든 것을 디스크에서 다시 읽었습니다.이 두 설정을 조정하여 관리합니다. 소스와 컴파일 된 출력을 RAM에 캐시하여 프로세스 속도를 크게 향상시킵니다.)


답변

실제로 3GB RAM이없는 디스크에서 파일을 제공한다는 것은 의심의 여지가 있습니다. 리눅스 파일 캐싱은 매우 좋습니다.

디스크 IO가 표시되면 로깅 구성을 살펴 보겠습니다. 충돌시 최신 로그 정보를 사용할 수 있도록 많은 로그가 버퍼되지 않은 상태로 설정됩니다. 속도에 관계없이 속도가 빠른 시스템에서는 버퍼 로그 IO를 사용하거나 원격 로그 서버를 사용하십시오.