작은 파일이 많은 시스템에서 EXT4 성능이 실제로 저하되었습니다.


10

RAM이 128MB 인 작은 내장 장치가 있습니다

이 장치에 연결된 2TB USB2 하드 디스크입니다

나는 파일 수가 디스크 용량의 임계 값을 넘었을 때까지 최근까지 장치의 성능에 매우 만족했습니다.

디스크에는 많은 작은 파일이 있습니다. 쓰기 응용 프로그램 파일의 특성으로 인해 매우 균형 잡힌 방식으로 구성됩니다. 리프 노드 디렉토리에는 200 개가 넘는 파일이없고 800,000 개가 넘는 파일이 있습니다.

조사 할 내용에 대한 리드를 얻고 자합니다. 디스크 성능이 크게 떨어지고 장치가 제대로 압축 된 다음 갑자기 성능이 모두 급격히 떨어졌습니다.

내 파일을 위해 디스크에서 선택한 조직 구조로 인해 inode 캐시의 기능이 손상 될 수 있습니다.

실험으로 디스크를 분리했습니다 (플러시 캐시, 무료로 확인). 그런 다음 명령 프롬프트에서 디렉토리 구조를 자세히 탐색했습니다. 모두이 디렉토리와 그 하위 디렉토리에 약 3200 개의 파일 만 포함되어 있으며,이 시점에서 'free'는> 117MB의 여유 메모리를 보여줍니다.

이 시점에서 'find'명령과 'free'명령을 입력했습니다.

'find'는 약 3000 개의 파일을 보여 주지만 메모리 사용량은 ~ 117MB에서 ~ 2MB로 증가했습니다.

캐시와 사용 가능한 메모리의 균형과 커널이 빈 페이지를 나쁜 페이지로 간주하는 방법을 이해합니다. 그러나 3000 개의 파일 디렉토리에서 115MB의 캐시 된 콘텐츠는 이해의 심각한 차이를 나타냅니다. 누군가가 무슨 일이 일어나고 있는지 이해하는 데 도움이되기를 바랍니다.

균형 잡힌 나무가 많은 파일을 가지고 갈 수있는 방법이라고 생각할 수 있습니까?

답변:


9

아주 좋은 문제 설명.

당신이 말한 것을 바탕으로, 당신이보고있는 것은 슬래브 사용량이 높아지고 있다고 생각합니다. 좋은 실험이 실행하는 것입니다 cat /proc/meminfo그리고 cat /proc/slabinfo당신은 FS 계층에 깊은 가서 3000 개 파일을 발견 동안 3 초 지연을 통해. 근본적으로 일어나고있는 것은 커널이 fs 구조를 순회하고 개별 파일과 inode를 스캔하고 모든 파일이 메모리에 저장된다는 것입니다. 확인 /proc/slabinfo하면 ext4_inode_cache각 inode가 얼마나 많은 메모리를 사용하는지 알려주 는 객체가 표시 됩니다. 이것을 객체 없음 (obj_size * no_obj)과 곱하면 객체가 사용하는 메모리 양을 얻습니다. fs 계층에 깊이 들어가면 시스템이 메모리 영역의 높은 워터 마크에 도달 할 때까지 더 많은 메모리가 사용됩니다. 이 시점에서 커널은 회수를 시작합니다.

meminfo 및 slabinfo를 찌르면 찾고자하는 세부 정보를 얻을 수 있습니다. 내가보고 싶다면 pastebin it;)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.