2011-03-16 3 views
0

버퍼 캐시의 사용 가능한 주소 공간에 상한값을 설정하는 방법이 있는지 궁금합니다. I 은 제한이 없으며 메모리 사용량이 특정 지점에 도달하면 다른 프로세스가 버퍼 캐시를 확장 할 수 있도록 스왑 아웃 될 것이라고 생각하십니까?버퍼 캐시 제한

그런 점에서 말하자면, 필자는이 시점에 온다면 읽기/쓰기가 단순히 실패 할 수 있다고 생각합니까?

+0

왜 읽기 쓰기가 실패 할 것이라고 생각하십니까? – Zimbabao

답변

3

버퍼 캐쉬가 많은 메모리를 차지하고 있기 때문에 읽기 쓰기가 실패하지 않습니다. 사용되지 않는 RAM 만 캐싱 디스크 용 버퍼로 사용되지만 일부 프로세스가 메모리를 필요로하는 경우 더 높은 우선 순위를 갖습니다. 이것은 커널에 의해 자동적으로 이루어지며, 버퍼 캐시는 자원의 최적 사용에 불과하며 시스템의 정상 작동에 해를 끼치 지 않을 것입니다.

+0

필자는 읽기/쓰기 실패에 대해별로 염려하지 않는다고 생각합니다. 버퍼 캐시가 너무 커지면 내 프로세스가 바뀌지 않을 것입니다. 그리고 스왑 등을 튜닝하는 것보다 가능한 한 버퍼 캐쉬에 ​​상한을 설정하는 것을 선호합니다. – stackmate

+0

사용되지 않는 프로세스의 일부만 스왑 아웃됩니다. 예를 들어 언젠가 사람들은 너무 많은 버퍼 풀이나 힙을 만듭니다. 왜냐하면 당신은 데이터가 적기 때문에 그렇게 많이 할 필요가 없기 때문입니다.이 경우에는 스왑 아웃 될 것입니다. 실제 문제를 설명하면 도움이 될 것입니다. – Zimbabao

+1

vm.vfs_cache_pressure는 확인할 수있는 매개 변수 중 하나입니다. 0에서 200 사이의 값은 100입니다. 0 inodes, dentry 캐시 (매우 작음) 및 200 데이터 캐시를 선호합니다. 이 매개 변수와 함께 스왑을 사용하면 필요한 것을 얻을 수 있습니다. 버퍼 캐시에 한계를 두는 것은 불가능합니다. – Zimbabao

1

일반적인 문제는 읽기/쓰기가 실패하지만 응용 프로그램이 정지되어 결국 실패 할 수 있다는 것입니다. 다음은 매우 간단한 실험입니다. 매우 큰 파일의 디렉토리를 가져 와서 매우 느린 장치로 복사하십시오. 사용 가능한 메모리의 100 %는 쓰기 캐시에 의해 소비됩니다. 이 캐시는 느린 장치에 실제로 쓰는 것만으로 지워집니다. 문제는 응용 프로그램이 메모리를 필요로하거나 디스크로 스왑 된 것으로 다시 스왑해야 할 때 발생합니다. 캐시가 너무 천천히 비워지고 있기 때문에 더 많은 메모리를 사용할 수 있도록 디스크에 다른 것을 교환하는 것이 유일한 실제 옵션입니다. 이제는 전체 시스템이 엉망입니다. 스왑 공간이 부족하면 심각한 문제가 발생합니다. 어느 쪽이든, 귀하의 바탕 화면은 상당히 슬러시이며 복사가 완료 될 때까지 완전히 잠길 수도 있습니다.

이 문제를 해결할 수있는 방법은 모르지만 vm.vfs_cache_pressure를 0으로, vm.swappiness를 0으로 조정하면이 문제를 줄일 수 있습니다.

+0

이것이 바로 제가 보는 문제입니다. 나는 vm.vfs_cache_pressure를 1 (그리고 또한 0)으로 설정하고 vm.swappiness를 0으로 시도했다. 그리고 조금만 도움이된다. 다른 프로그램을 위해 큰 파일을 복사 할 때 버퍼가 절반 밖에 안되기 때문에 버퍼가 정말로 필요하다. 느린. – Mihai