수명이 짧은 파일이 디스크로 플러시됩니까?


9

내 프로그램은 많은 작은 단기 파일을 만듭니다. 일반적으로 생성 후 1 초 이내에 삭제됩니다. 파일은 실제 하드 디스크가 지원하는 ext4 파일 시스템에 있습니다. Linux가 정기적으로 pdflush더티 페이지를 디스크로 플러시한다는 것을 알고 있습니다. 내 파일은 수명이 짧기 때문에에 의해 캐시되지 않을 가능성이 높습니다 pdflush. 내 질문은 내 프로그램이 많은 디스크 쓰기를 유발합니까? 내 관심사는 내 하드 디스크의 수명입니다.

파일이 작기 때문에 크기의 합이 dirty_bytesand 보다 작다고 가정하겠습니다 dirty_background_bytes.

Ext4에는 기본 저널이 켜져 있습니다 (예 : 메타 데이터 저널). 또한 메타 데이터 또는 데이터가 디스크에 기록되는지 여부를 알고 싶습니다.


> 내 프로그램은 '작은'정도의 작은 단기 파일을 여러 개 만듭니다? 이 파일을 삭제하거나 파일을 다시 작성하고 있습니까? > 또한 메타 데이터 또는 데이터가 디스크에 기록되는지 여부를 알고 싶습니다. 기본 메타 데이터 모드가 정렬되어 데이터가 디스크에 기록되기 전에 메타 데이터가 커밋됨을 의미합니다. 물론 이것을 변경하기 위해 추가 할 수있는 마운트 옵션이 있습니다. 내 질문은 내 프로그램이 많은 디스크 쓰기를 유발합니까? 귀하가 제공 한 정보를 고려하는 데 응답하기가 어렵습니다. 디스크 IO를 모니터링하기 위해 iotopsysstat 와 같은 도구를 사용하는 것을 고려 했습니까 ?
AngryWombat

ReiserFS는 만약 당신이 실제로 디스크에 부딪히기를 원한다면 작은 파일에 더 좋습니다 tmpfs는 당신이 신경 쓰지 않는다면 괜찮습니다
xenoterracide

몇 가지 설명 : (1). ext4 파일 시스템은 sync옵션으로 마운트되지 않습니다 . 기본 설치된 fedora, debian 또는 ubuntu를 고려할 수 있습니다. 하나를 선택하십시오. (2). 각 파일은 약 60KB입니다. (삼). 초당 약 1000 개의 파일이 작성 및 삭제되지만 언제든지 10 개를 초과하는 파일이 없습니다. 다시 말해, I / O 처리량은 크지 만 차지하는 공간은 작습니다.
Wu Yongzheng

답변:


5

ext4를 사용한 간단한 실험 :

100MB 이미지 만들기 ...

# dd if=/dev/zero of=image bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.0533049 s, 2.0 GB/s

루프 장치로 만드십시오 ...

# losetup -f --show image
/dev/loop0

파일 시스템을 만들고 마운트하십시오 ...

# mkfs.ext4 /dev/loop0
# mount /dev/loop0 /mnt/tmp

짧은 수명의 파일로 실행하십시오. (원하는 방법으로 변경하십시오.)

for ((x=0; x<1000; x++))
do
    (echo short-lived-content-$x > /mnt/tmp/short-lived-file-$x
     sleep 1
     rm /mnt/tmp/short-lived-file-$x ) &
done

마운트 해제, 동기화, 루프 해제

# umount /mnt/tmp
# sync
# losetup -d /dev/loop0

이미지 내용을 확인하십시오.

# strings image | grep short-lived-file | tail -n 3
short-lived-file-266
short-lived-file-895
short-lived-file-909
# strings image | grep short-lived-content | tail -n 3

필자의 경우 모든 파일 이름을 나열했지만 파일 내용은 나열하지 않았습니다. 내용 만 쓰지 않았습니다.


좋은 시도. 이제 확신합니다. 나는 또한 ext2를 시도했고 당신과 같은 결과를 얻었습니다. 병렬 I / O 워크로드를 순차적 인 워크로드로 변경하고 하나의 짧은 수명 파일 -999와 8 개의 짧은 수명 콘텐츠 *를 얻었습니다. 누구든지 설명이 있습니까?
Wu Yongzheng

@msw : 명확하지 않은 경우 편집했습니다. 그렇지 않으면 정교하게 작성하십시오.
frostschutz

그냥 바보입니다. 파일이 동시에 존재하고 덮어 쓸 내용이 없으며 파일 시스템은 삭제 된 파일 내용을 덮어 쓰지 않으므로 성능이 저하 될 수 있습니다. 그러나 nbd트래픽을 사용 하고 기록하십시오 (또는 모든 쓰기를 추적하는 유사한 방법).
frostschutz

7

솔리드 스테이트 드라이브에 대해 이야기하지 않는 한 많은 디스크 쓰기가 드라이브 수명의 주요 요소가되지는 않습니다.

디스크 쓰기를 전혀 피하려면 tmpfs를 살펴보십시오 .


2
tmpfs는 실제로이 경우에 적합하지만 일반적인 운영 체제 질문으로 데이터가 디스크에 불필요하게 기록되어 있는지 알고 싶습니다.
Wu Yongzheng

당신의 질문은 당신이 결정적인 대답을 받기 위해 공식화 할 수있는 것보다 훨씬 더 구체적이어야합니다. 버퍼 캐시는 성능과 지속성 간의 복잡한 트레이드 오프를 중재하여 요약 할 수는 없습니다. @AngryWombat에 나열된 도구를 사용하면 특정 응용 프로그램에서 실제 쓰기를 측정 할 수 있지만 실행마다 달라질 수있는 많은 요소가 있습니다.
msw

파일이 삭제 된 pdflush가 나오면 쓸 필요가 없습니다.
Wu Yongzheng

1

일반적으로, 그들은 작성되지 않습니다. 두 가지 조건 중 하나가 충족되면 캐시가 더티 페이지를 플러시하기 때문입니다.

  1. 이후에 데이터가 만료 /proc/sys/vm/dirty_writeback_centisecs되며 기본값은 5 초입니다.

  2. 캐시에서 dirty_ratio더티 페이지 보다 더 많은 데이터를 보유하기 위해 캐시에 메모리가 너무 적습니다 (기본값 : 20 %).

따라서 사용 가능한 메모리가 충분하고 5 초 이내에 삭제되는 작은 파일을 제외하고 쓰기 트래픽이 적은 시스템에서는 데이터가 플러시되지 않습니다.


0

수명이 짧은 파일이 디스크에 기록되는지 여부는 커널 파일 캐시의 기본 동작뿐만 아니라 파일 시스템 드라이버 구현 및 해당 파일 시스템의 마운트 옵션에 대한 세부 사항에 따라 달라집니다. 모든 것이 항상 즉시 디스크에 기록되도록 시스템을 구성 할 수 있습니다 (본질적으로 DOS와 같은 동작).

관심있는 동작 ( "지연 할당"이라고 함)을 두드러지게 나타내는 파일 시스템 중 하나는 XFS입니다. 이를 통해 삭제 된 파일에 속하는 블록이 중간 디스크 액세스없이 메모리에서 재사용 될 것이라는 확신을 가질 수 있습니다. XFS는 여전히 메타 데이터 저널을 업데이트하려고 할 수 있습니다 (디스크에 자주 기록됨). 그러나 XFS 저널이 메타 데이터 전용 인 경우 배터리 백업 RAM과 같은 다른 빠른 장치에 설정할 수있을 정도로 작습니다. 많은 RAID 컨트롤러에서).

이 동작으로 인해 전원이 완전히 차단 된 것은 드문 일이 아니지만 갑작스런 전원 중단 후 XFS 파일 시스템에서 합법적으로 보이는 파일 (크기 및 기타 메타 데이터는 그대로)을 찾는 것입니다. 이는 "일시적인"빠른 파일 작업을 지원하는 비용입니다.

어떤 이론

일반적으로 파일 시스템에 액세스하는 시스템 호출은 파일 시스템 드라이버 정의 메소드 (VFS 드라이버가 등록 될 때 "struct inode_operations"및 "struct file_operations"에 첨부)에서 다소 빨리 종료됩니다. 그 후 발생하는 일은 파일 시스템 구현의 재량에 달려 있습니다. 일반적으로 다음과 같은 접근 방식이 사용됩니다 (이 간단한 예는 Linux FAT 드라이버에서 가져온 것입니다).

if (IS_DIRSYNC(dir))
    (void)fat_sync_inode(dir);
else
    mark_inode_dirty(dir);

파일 시스템이 "동기화"모드로 마운트되면 모든 변경 사항이 즉시 디스크로 이동합니다 (이 경우 fat_sync_inode ()를 통해). 그렇지 않으면, 블록은 "더티 (dirty)"로 표시되고 적당한 기회에 플러시 될 때까지 메모리 캐시에 남아 있습니다.

따라서 파일 시스템 마운트 옵션을 고려하고 해당 구현의 소스 코드를 검사하지 않고 임시 파일에 대한 시스템 동작을 예측하는 것은 불가능합니다 (물론 임베디드 공간에서 주로 발견되는 모든 종류의 이국적인 파일 시스템에 적용됨) .


답변 주셔서 감사합니다. ext4도 할당이 지연된 것 같습니다. 내 대답이 아니오라는 것을 의미합니까? (다른 곳에서는 재미있는 구성 옵션이 제공되지 않았습니다). ext2를 사용하면 대답이 예라는 의미입니까?
Wu Yongzheng

현대 커널에서 ext2를 사용하더라도 대답은 NO라고 생각합니다. 이 특정 문제는 커널 소스에서 많이 논의되었으며 간단히 살펴보면 ext2 드라이버는 대부분 "기본"커널 작업을 사용하여 작업을 수행한다는 것을 보여줍니다 (따라서 모든 것이 블록 캐시에 의해 지연됨). 추가 정보를 포함하도록 답변을 업데이트해야한다고 가정합니다.
oakad

내 ext4는 분명히 sync옵션으로 마운트되지 않았습니다 . 나는 그렇게하지 않을 것입니다.
Wu Yongzheng

inode를 더티 마크로 표시 할 때 파일 시스템이 해당 페이지를 더티 마크로 표시한다고 가정합니다. 나중에 inode가 삭제되면 파일 시스템이 더티 페이지를 정리합니까? 그렇지 않으면 데이터가 불필요하게 디스크로 플러시됩니다.
Wu Yongzheng

2
사용하지 않는 데이터 블록은 "릴리스"되므로 더러워지지 않습니다. 파일에 내용을 쓴 다음 플러시하기 전에 잘린 경우 EOF를 지나친 정크는 사라집니다 (정렬). 메타 데이터의 경우 파일 시스템 데이터 구조의 무결성과 관련하여 다양한 상충 관계가있을 수 있으므로 그렇게 간단하지 않을 수 있습니다. 그건 그렇고, 항상 플랫폼을 완전히 제어 할 것으로 기대한다는 것은 확실하지 않습니다. 대부분의 응용 프로그램은 일반적으로 개발자가 아닌 알 수없는 구성의 컴퓨터에서 실행됩니다.
oakad
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.