ext4를 사용하는 시스템에서 I/O 대기 시간 문제를 디버깅하려고 하는데 로깅을 잘 이해하지 못하기 때문에 약간 혼란스럽습니다.
제가 특히 알고 싶은 것은 디스크 블록이 실제로 로그에 기록되고 "실제로" 기록되는 시점입니다. 지금까지 내 가정은 rename()
사용자 프로세스가 일부 메타데이터 작업(예: 변경된 페이지를 기록하는 jbd2 트랜잭션도 생성한 다음 나중에 해당 페이지를 로그에 기록하고 완료되었을 때만 로그에 기록)을 완료하는 것 입니다. 임의의 나중 시점에 올바른 파일 시스템에 기록합니다. 여기 어딘가에 틀렸다면 정정해 주세요.
내 말이 어느 정도 맞다고 가정하면 무엇이 로그에 쓰기를 유발할 수 있는지 알고 싶습니다. 커널의 좀 더 일반적인 FS/VM 부분이 더티 페이지를 플러시할 시간이라고 결정할 때인가요? 더 이상 트랜잭션을 할당할 수 있는 로그 공간이 없을 때인가요? 커널이 버퍼 캐시에서 일부 더티 페이지를 회수해야 하면 어떻게 됩니까? 이로 인해 로그 쓰기와 기본 쓰기가 지속적으로 트리거됩니까?
그리고 표준용어는 무엇인가요? "Committed"라는 트랜잭션이 표시되면 더 정확하게는 무엇을 의미합니까?