pdflush, kjournald, swad 등은 어떻게 상호 운용됩니까?

pdflush, kjournald, swad 등은 어떻게 상호 운용됩니까?

나는 최근에 이 아이디어를 촉발한 질문을 보았습니다. 여기 또는 Google 컴퓨터를 통해 답변을 찾을 수 없습니다. 기본적으로 저는 커널 I/O 아키텍처가 어떻게 계층화되어 있는지 이해하고 싶습니다. 예를 들어, kjournald다음으로 발송 되나요 pdflush, 아니면 그 반대로 발송되나요? 내 가정 pdflush(대량 저장소 I/O에 더 일반적임)은 낮은 수준에 앉아서 실제로 쓰기를 수행하는 데 필요한 SCSI/ATA/모든 명령을 트리거하고 kjournald쓰기 전에 더 높은 수준의 파일 시스템 데이터 구조를 처리하는 것입니다. 그러나 kjournald파일 시스템 데이터 구조와 직접 상호 작용하고 pdflush때때로 깨어나 kjournald다른 이유로 두 가지가 전혀 상호 작용하지 않는 것도 가능합니다.

원래:Linux 커널의 대용량 저장소에 I/O를 디스패치하기 위한 기본 아키텍처를 시각화(그래픽으로 또는 설명)할 수 있는 방법이 필요합니다.

답변1

pdflushkswapd`에 대한 세부 사항을 논의하기 전에 kjournald, and먼저 논의 중인 Linux 커널에 대한 배경 지식을 살펴보겠습니다.

GNU/리눅스 아키텍처

GNU/Linux의 아키텍처는 두 가지 공간으로 생각할 수 있습니다.

  • 사용자
  • 핵심

존재하다. . ~ 사이사용자 공간그리고커널 공간GNU C 라이브러리는 ( )에 있습니다 glibc. 이는 커널을 사용자 공간 애플리케이션에 연결하는 시스템 호출 인터페이스를 제공합니다.

커널 공간은 3가지 수준으로 더 세분화될 수 있습니다.

  • 시스템 호출 인터페이스
  • 아키텍처 독립적인 커널 코드
  • 건축 관련 코드

시스템 호출 인터페이스이름에서 알 수 있듯이 glibc커널과의 인터페이스를 제공합니다. 이것아키텍처 독립적인 커널 코드VFS(Virtual File System), VMM(Virtual Memory Management) 등의 논리 단위로 구성됩니다. 이것건축 관련 코드특정 하드웨어 아키텍처에 대한 프로세서 및 플랫폼별 코드의 구성 요소입니다.

GNU/Linux 아키텍처 다이어그램

                                 Gnu/linux 아키텍처용 ss.

이 기사의 나머지 부분에서는 커널 공간의 VFS 및 VMM 논리 장치에 중점을 둘 것입니다.

GNU/Linux 커널의 하위 시스템

                                    커널 com의 ss

VFS 하위 시스템

GNU/Linux 커널이 어떻게 구성되는지에 대한 높은 수준의 개념을 통해 우리는 VFS 하위 시스템을 더 깊이 파고들 수 있습니다. 이 구성 요소는 궁극적으로 물리적 장치(HDD 등)의 파일 시스템(ext3/ext4/등)에 매핑되는 다양한 블록 저장 장치에 대한 액세스를 제공하는 역할을 합니다.

VFS 다이어그램

vfs의 ss

이 다이어그램은 write()사용자 프로세스가 VFS를 통과하여 최종적으로 장치 드라이버로 내려가 물리적 저장 매체에 쓰는 방법을 보여줍니다. 이곳이 우리가 처음 만난 곳이에요 pdflush. 이는 더티 데이터와 메타데이터 버퍼 블록을 백그라운드에서 저장 매체로 플러시하는 역할을 하는 데몬 프로세스입니다. 다이어그램에는 이 내용이 표시되지 않지만 kjournald그 옆에는 pdflush더티 로그 블록을 디스크에 기록하는 유사한 작업을 수행하는 또 다른 데몬이 있습니다.노트:로그 블록은 ext4 및 JFS와 같은 파일 시스템이 파일이 변경되기 전에 디스크 변경 사항을 추적하는 방법입니다.

위의 세부 사항은 다음에서 자세히 논의됩니다.이 종이.

write()단계 개요

write()I/O Sybsystem 작업에 대한 간단한 개요를 제공하기 위해 사용자 공간 응용 프로그램에서 호출되는 이 함수의 예를 사용합니다 .

  1. write()프로세스는 시스템 호출을 통해 파일 쓰기를 요청합니다 .
  2. 커널은 파일에 매핑된 페이지 캐시를 업데이트합니다.
  3. pdflush 커널 스레드는 페이지 캐시를 디스크로 플러시하는 역할을 담당합니다.
  4. 파일 시스템 계층은 각 블록 버퍼를 하나로 통합합니다 bio struct(23페이지의 1.4.3 "블록 레이어"를 참조하십시오.) 블록 장치 계층에 쓰기 요청을 제출합니다.
  5. 블록 장치 계층은 상위 계층으로부터 요청을 받아 I/O 엘리베이터 작업을 수행하고 해당 요청을 I/O 요청 큐에 넣습니다.
  6. 장치 드라이버(예: SCSI 또는 기타 장치별 드라이버)가 쓰기 작업을 담당합니다.
  7. 디스크 장치 펌웨어는 헤드 검색, 회전, 데이터를 플래터의 섹터로 전송하는 등의 하드웨어 작업을 수행합니다.

VMM 하위 시스템

계속해서 탐색을 진행하면서 이제 VMM 하위 시스템을 살펴볼 수 있습니다. 메인 메모리(RAM), 스왑 영역, 물리적 저장 매체 간의 일관성을 유지하는 역할을 하는 구성 요소입니다. 일관성을 유지하는 주요 메커니즘은 입니다 bdflush. 메모리 페이지는 더티 페이지로 간주되므로 저장 매체의 데이터와 동기화되어야 합니다. 이 데이터와 저장 매체의 동기화는 데몬 프로세스 bdflush와 함께 pdflush조정됩니다 .

VMM 다이어그램

                VMM의 SS

교환

시스템 메모리가 부족해지거나 커널 스왑 타이머가 만료되면 kswapd데몬은 페이지를 해제하려고 시도합니다. 사용 가능한 페이지 수가 그 이상으로 유지되는 한 아무 작업도 수행되지 않습니다 free_pages_high. kswapd그러나 사용 가능한 페이지 수가 아래로 떨어지면 kswapd페이지 회수 프로세스가 시작됩니다. kswapd페이지가 재배치 대상으로 표시된 후에는 데몬을 bdflush통해 pdflush저장 매체에 대한 미해결 변경 사항을 동기화하도록 주의를 기울입니다.

참고 자료 및 추가 자료

관련 정보