CentOS는 동기 쓰기 또는 비동기 쓰기를 사용합니까? 이것을 확인하거나 변경할 수 있는 방법이 있나요?
답변1
기본적으로 모든 쓰기는 비동기식입니다.
O_DIRECT|O_SYNC
open(2)
-o sync
애플리케이션 수준 플래그 또는 파일 시스템 수준( mount 명령에 대한 옵션) 에서 동기화하도록 구성할 수 있습니다 .
답변2
Red Hat의 (상당히 오래된) 페이지에 따르면12.5. 비동기 I/O 사용량 확인, 비동기 I/O를 지원하기 위해 libaio를 사용합니다. 응용 프로그램은 라이브러리와 연결되거나 연결되지 않습니다. 활성화 또는 비활성화에 대한 언급이 없습니다. 앱은 단지사용도서관. 이 페이지에서는 사용량을 확인하기 위해 수행할 수 있는 검사를 보여줍니다 /proc/slabinfo
.
내 CentOS 6 시스템에는 2466개의 파일이 있고 /usr/bin
3개만 libaio와 연결되어 있습니다.
- 다시 하다
- qemu-img
- qemu-io
이 기능을 사용하는 일부 프로그램이 있지만 많지는 않습니다. 어떤 사람들은 이를 버퍼 캐싱과 혼동합니다.
추가 자료:
UNIX 및 Linux 시스템의 I/O 작업은 일반적으로 파일 시스템 캐시를 통해 수행됩니다. 이 자체로는 문제가 되지 않지만 이 추가 처리에는 리소스가 필요합니다. 파일 시스템 캐시를 우회하면 CPU 요구 사항이 줄어들고 데이터베이스가 아닌 다른 파일 작업을 위해 파일 시스템 캐시가 확보됩니다. 원시 장치에 대한 작업은 자동으로 파일 시스템 캐시를 우회합니다.
답변3
/u/jiliagre로언급하다, 장치별 플래그를 통해 O_SYNC
또는 마운트 시 파일을 강제로 열 수 있습니다( "willtain" -o sync
을 사용하여 대부분의 열린 마운트 지점을mount -o remount,sync <mtpt>
동기 모드가 활성화되지 않으면 복잡한 쓰기 저장 알고리즘이 작동됩니다. 쓰기 저장 알고리즘은 다음과 같이 설계되었습니다.한계IO 작업. 여기서는 사용자가 시스템이 가끔(마감일 이후 또는 플러시할 "더티" 페이지의 임계값이 있는 경우)에만 디스크 플러시를 수행하는 것을 선호한다고 가정합니다. 플러시하려면 커널 스레드에 일부 작업을 할당하고 커널 스레드를 "깨우기"만 하면 됩니다 pdflush
.
sysctl
일부 시스템 변수를 조작하여 /proc/
쓰기 저장 동작을 제어 할 수 있습니다. 당신은 주로 다음에 관심이 있습니다:
vm.dirty_background_ratio = 0
이는 본질적으로 모든 더티 쓰기를 깨우고 플러시하도록 강제합니다.
vm.dirty_writeback_centisecs = 1
이렇게 하면 더티 페이지가 1/100초마다 플러시됩니다. 후자를 0으로 설정하고 싶을 수도 있지만 이렇게 하면 타이머가 효과적으로 비활성화됩니다. 0으로 설정하고 싶을 수도 있지만 vm.dirty_ratio
적어도 2.6.25에서는 값이 5% 이하로 제한되어 있어 여기서는 도움이 되지 않습니다.
참고 #1: 쓰기 저장 알고리즘은 속도 제한 동작을 채택합니다. 알고리즘이 복잡하기 때문에 완전히 확신할 수는 없지만 그렇게 많은 페이지가 디스크에 플러시되는 경우 설정된 번호에 대해 pdflush가 호출되고 다음 순간에 pdflush가 예약됩니다. pdflusted로 전송된 첫 번째 청크 이후 다른 페이지가 번지면 1초 타이머 직전에 다른 청크가 예약될 것이라고 생각합니다.
참고 #2: pdflush가 쓰기 작업을 "대기열"에 푸시하는 블록 수준 IO 스케줄러로 데이터를 보내기 때문에 여전히 완전히 동기화되지 않습니다. 하지만 이것이 동기화 모드와 어떻게 다른지는 잘 모르겠습니다.
추신: 좋아요를 누르는 것을 잊지 마세요.이 아름다운 대답.