o_sync는 어떻게 pdflush를 트리거합니까?

o_sync는 어떻게 pdflush를 트리거합니까?

write 를 사용하면 o_sync데이터가 디스크에 기록되면 쓰기 호출이 반환됩니다. 하지만 o_syncLinux가 디스크에 데이터를 쓰도록 하려면 어떻게 해야 할까요?

일반적으로 최악의 경우 데이터가 디스크에 기록되기 dirty_expire_centisecs +dirty_writeback_centisecs전에 최대(30초 + 5초) 기다려야 합니다 .pdflush

데이터 o_sync세트가 dirty_expire_centisecs더 낮습니까? 아니면 다른 일이 발생합니까(새로 고침이 수동으로 호출됨)?

답변의 출처를 제공해 주세요. 이 주제에 대해서는 아무것도 찾을 수 없습니다.

답변1

Sankalp가 언급했듯이 pdflush 스레드는 O_SYNC 플래그가 설정된 파일을 작성하는 데 관여하지 않습니다. 스레드 컨텍스트에서 발생합니다. 커널이 사용하는 정확한 코드 경로를 얻으려면 ftrace를 사용하여 쓰기 시스템 호출을 추적할 수 있습니다. 나는 똑같이 테스트하고 기록할 수 있었다여기내 블로그에

답변2

pdflush 스레드의 컨텍스트에서는 플러시할 필요가 없습니다. O_SYNC 및 fsync 호출의 경우 쓰기/동기화 시스템 호출을 호출한 스레드의 컨텍스트에서 플러시가 발생합니다. o_sync의 경우 코드 경로는 대략 다음과 같습니다.

__vfs_write -> (f_op->write_iter)/generic_file_write_iter -> generic_write_sync -> (f_op->fsync) -> filemap_write_and_wait_range -> do_writepages -> write_cache_pages -> (f_op->writepage)

관련 정보