파일 시스템 집약적인 스크립트가 RAM 디스크에서 더 빠르지 않은 이유

파일 시스템 집약적인 스크립트가 RAM 디스크에서 더 빠르지 않은 이유

많은 파일과 디렉토리를 생성하는 스크립트가 있습니다. 스크립트는 많은 파일과 디렉토리에서 작동하는 프로그램에 대한 블랙박스 테스트를 수행합니다. 테스트 횟수가 늘어나고 테스트 시간이 너무 오래 걸립니다(2초 이상). 램 디스크에서 테스트를 실행한다고 생각했습니다.

에서 테스트를 진행했습니다 /dev/shm. 이상하게도 더 이상 빨라지지 않았습니다. 평균 실행 시간은 일반 하드디스크와 거의 동일했습니다. 나는 또한Perl로 작성된 퓨즈 기반 RAM 디스크. 홈페이지가 없어졌는데 네이버에서 찾았네요인터넷 아카이브. 퓨즈 램 디스크의 평균 실행 시간은 훨씬 더 느립니다. 아마도 Perl 코드의 차선적인 구현 때문일 것입니다.

내 스크립트의 단순화된 버전은 다음과 같습니다.

#! /bin/sh

preparedir() {
  mkdir foo
  mkdir bar
  touch bar/file
  mkdir bar/baz
  echo qux > bar/baz/file
}

systemundertest() {
  # here is the black box program that i am testing
  # i do not know what it does exactly
  # but it must be reading the files
  # since it behaves differently based on them
  find $1 -type f -execdir cat '{}' \; > /dev/null

singletest() {
  mkdir actual
  (cd actual; preparedir)
  systemundertest actual
  mkdir expected
  (cd expected; preparedir)
  diff -qr actual expected
}

manytests() {
  while read dirname; do
    rm -rf $dirname
    mkdir $dirname
    (cd $dirname; singletest)
  done
}

seq 100 | manytests

실제 스크립트는 좀 더 많은 오류 검사와 결과 수집 및 요약을 수행합니다. 이것은 find내가 테스트하고 있는 실제 프로그램에 대한 더미입니다.

내 파일 시스템 집약적 스크립트가 메모리 지원 파일 시스템에서 더 빠르게 실행되지 않는 이유가 궁금합니다. Linux 커널이 파일 시스템 캐시를 매우 효율적으로 처리하여 사실상 메모리 기반 파일 시스템이기 때문입니까?

답변1

일반적으로 모든 작업은 RAM에서 먼저 발생하며 파일 시스템은 캐시됩니다. 이 규칙에는 예외가 있지만 이러한 다소 특별한 경우는 일반적으로 매우 구체적인 요구 사항에서 발생합니다. 따라서 캐시 플러시를 시작하기 전까지는 차이점을 알 수 없습니다.

또 다른 점은 성능에 따라 다르다는 것입니다.많이정확한 파일 시스템에서 - 일부는 엄청난 양의 작은 파일에 더 쉽게 액세스하는 것을 목표로 하고, 일부는 대용량 파일과의 실시간 데이터 전송(멀티미디어 캡처/스트리밍)에 효율적이며, 일부는 데이터 일관성을 강조하고 다른 일부는 다음을 갖도록 설계될 수 있습니다. 작은 메모리/코드 공간.

사용 사례로 돌아가서: 단 하나의 루프 패스에서 약 20개의 새로운 프로세스를 생성하며, 그 중 대부분은 하나의 디렉터리/파일을 생성합니다( ()하위 셸을 생성하고 모든 단일 일치에 대해 find생성된다는 점에 유의하세요 cat). 병목 현상은 실제로 파일 시스템(그리고 시스템이ASLR그리고 당신은 엔트로피의 좋은 빠른 소스가 없습니다. 시스템의 임의성 풀도 매우 빠르게 고갈됩니다. Perl로 작성된 FUSE도 마찬가지입니다. 이는 작업에 적합한 도구가 아닙니다.

답변2

주로 소규모 거래로 구성된 테스트에 대한 내 의견보다 응답이 다소 깁니다.

테스트하기에 작업량이 부족함

파일 시스템을 스트레스 테스트하려면 더 큰 작업 세트가 필요합니다.

상자에 얼마나 많은 메모리가 있는지에 따라 수만 번의 폴더 생성 작업에서도 둘 사이에 눈에 띄는 차이가 나타나지 않습니다. 따라서 버퍼로 사용될 메모리를 고려하여 파일 시스템을 충분히 테스트하도록 워크로드를 수정하십시오.

시스템 RAM의 이점과 테스트 결과를 왜곡하는 기타 요인을 무효화하는 테스트를 고안하는 방법은 다양합니다.

또는 bonnie++와 같은 표준화된 테스트 도구 모음을 사용할 수 있습니다.

관련 정보