이노와 ext4를 캐시 상호 작용 분석

이노와 ext4를 캐시 상호 작용 분석

  • 일반적으로 파일에 쓰기 작업은 파일 특성 (메타 데이터 메타 데이터) (포함 디렉토리 파일 특성, 아이 노드, 등)에 대한 두 부분으로, 데이터 자체의 기록 동작 및 쓰기 작업으로 구성되어 있습니다.
  • O_DIRECT는 페이지 캐시를 우회 IO 직접 왜 / 캐시 적으로 fsync ()에 필요한 버퍼, 그것은 디렉토리 캐시와 아이 노드 캐시 메타 데이터도 저장 장치로 플러시 수입니다. 그리고 커널 및 파일 시스템을 업데이트하기 때문에, 파일 시스템은 몇 가지 확신을 보장 할 수없는 fsync를 () 동기화 메타 데이터하지 않습니다 방식에 따라 데이터 보안 O_DIRECT 문제 원인, 이노 또한 O_DIRECT_NO_FSYNC의 방법을 제공하므로.

A, 이노 디비 관련

전체 1

그림 삽입 설명 여기

위의 그림에서, 우리는 디스크 필요성 InnoDB의 데이터가 통과하는 것을 볼 수 있습니다

  1. InnoDB의 버퍼 풀, 리두 로그 버퍼입니다. 이 애플리케이션은 이노 버퍼 시스템 자체이다.
  2. 페이지 캐시 / 버퍼 캐시 (O_DIRECT 우회 할 수있다). 이 VFS 버퍼 층이다.
  3. 아이 노드 캐시 / 디렉토리 버퍼입니다. 이는 버퍼층 VFS이다. O_SYNC 또는 fsync를 새로 고쳐해야합니다 ().
  4. 쓰기 - 백 버퍼. (파라미터 저장 콘트롤러는 수동으로 제공 될 수있다)
  5. 디스크에-역기전력 정보를 이용하여, 고성 능 버퍼입니다. (설정 디스크 컨트롤러 매개 변수에 의해 무시 될 수 있음)

여기에서 우리는 데이터를 읽을의 임시 저장소를 나타내는 용어는 "캐시"(보통 캐시)의 임시 사용에 기록 된 데이터를 표현하기 위해 "버퍼"(일반적으로 버퍼를) 용어를 사용합니다. 이름으로 인해 일시적으로 버퍼링, 저장 장치 및 메모리 기본 속도의 차이로 알 수 있듯이 히트 "레드"기본 저장 장치 IO에 "천천히"입니다. 캐시는 주로 일시적으로 느리게 다시 기본 저장 장치에 액세스하지 않고,이 데이터에 대한 후속 액세스에 대해, 메모리 내 데이터는 디스크로부터 판독 된 "저장".

RDS를의 기본적으로 여러 매개 변수

innodb_flush_method를 = O_DIRECT

= 1에서 innodb_flush_log_at_trx_commit

innodb_flush_log_at_timeout = 1

2 이노

버퍼층이 호스트 메모리에 저장되고, 그 주요 목적은 자신의 애플리케이션 계층 데이터를 관리 영향 이노 느린 응답 시간을 피하기 위하여 판독 및 기록 동작이다.

리두 로그 버퍼 이노 버퍼 풀 : 이노 층은 주로 두 개의 버퍼를 포함한다.

일시적 리두 로그 리두 로그 로그 기록을 저장하는 기록 버퍼를 재실행 이노 버퍼 풀에 저장 이노 데이터 더티 페이지 즉, 데이터를 기록 데이터를 버퍼링뿐만 아니라 이노를 디스크 장치로부터 판독.

호스트 전원이 꺼져 있거나 만에 검사 점에서 전에 롤에 이노 리두 로그를 사용할 수 있도록 MySQL의 비정상 가동 중단, InnoDB의 버퍼 풀은 즉시, 디스크에 저장되지 않을 경우 (페이지는 리두 로그) 및 리두 로그 버퍼 적시 새로 고침을하는 경우 리두 로그 데이터의 손실로 인해, 그리고 이전에도 리두 롤을 사용하여 디스크, 비 휘발성 디스크 미디어에 실제 기록이 없기 때문에 사용자가 제출 한 트랜잭션이 밖으로 잃게됩니다.

리프레시 타이밍 파라미터 버퍼 제어 리두 로그에서 innodb_flush_log_at_trx_commit이며 리두 로그 버퍼 제어 파라미터는 풀 리프레시 모드가된다 innodb_flush_method를 버퍼 이노. 이 두 매개 변수에 대한 기술 정보는 우리가 해결할 수있는 버퍼의 관점에서 주로 현재 매우 크다.

2.1 브러시 로그에 영향을에서 innodb_flush_log_at_trx_commit를

에서 innodb_flush_log_at_trx_commit의 제어 리두 로그 버퍼는 현재 세 가지 파라미터 값을 지원 0,1,2

그림 삽입 설명 여기

<5.6.6 : 초마다 데이터 버퍼 리두 로그는 디스크로 플러시

= 5.6.6 : 초 innodb_flush_log_at_timeout 모든 디스크에 데이터를 새로 고칩니다.

노트:

  • 1의 기본 설정은 전체 ACID 준수가 필요합니다. 로그 기록 및 각 트랜잭션 커밋을에서 디스크로 플러시됩니다.

    쓰기 로그 플러스 트랜잭션 커밋을 플러시

  • 0로 설정하면, 로그가 기록되며 초당 한 번씩 디스크로. 로그 플러시되지 않은에 대한 거래는 사고로 손실 될 수 있습니다.

    트랜잭션 로그 커밋 할 때 쓰기 전용, 로그 버퍼 쓰기도 디스크에 플러시 1 초 플러시 시간이 없습니다

  • 2로 설정하면, 로그는 각 트랜잭션 후 커밋 기록되며 초당 한 번씩 디스크로. 로그 플러시되지 않은에 대한 거래는 사고로 손실 될 수 있습니다

    로그 기록하지만 플러시 1 초 세척 시간을 디스크에

2.2 효과 브러시와 브러시 로그 데이터 : innodb_flush_method를

제어 innodb_flush_method를의 수영장은 현재 네 가지 매개 변수 값을 지원 버퍼 이노 :

  • 를 fdatasync
  • O_DSYNC
  • O_DIRECT
  • O_DIRECT_NO_FSYNC
  1. innodb_flush_method를은 "로그 파일"새로 고침 모드를 지정, 단지 "데이터 파일"새로 고침 모드를 지정했습니다.
  2. 시작 5.6.7에서 전용 버전을 사용하기 전에 5.6.6과 5.6.6에서 허용 처음 세 개의 매개 변수, O_DIRECT_NO_FSYNC을 추가했다. 즉 O_DIRECT로 파일을 열리지 만 fsync를하지 않고 () 데이터를 동기화 할 수 있습니다. 이 비교적 새로운 리눅스 커널 및 파일 시스템의 일부이기 때문에, 당신은 메타 데이터는 또한 비 휘발성 디스크 미디어에 플러시되도록 동기화를하지 구체적으로 fsync () 다음 O_DIRECT 데이터 보안을 위해 사용하고 있습니다. 예를 들어 : XFS이 매개 변수를 사용할 수 없습니다. O_DIRECT는 페이지 캐시, 왜 사용 된 fsync () 한 후 다음 새로 고침을 우회, 우리는 다음 섹션을 헌신.
  3. O_DIRECT_NO_FSYNC뿐만 아니라, InnoDB는 새로 고침으로 fsync ()를 사용 "데이터 파일을." 여기서 예외 O_DIRECT_NO_FSYNC이다.
  4. 당신이 O_DIRECT, O_DIRECT_NO_FSYNC를 지정하는 경우, 데이터 파일이 열려 O_DIRECT 있습니다

수집

열기 로그 공개 로그 플러시 로그 오픈 데이터 파일 플러시 데이터 파일
를 fdatasync fsync를 () fsync를 ()
O_DSYNC O_SYNC fsync를 ()
O_DIRECT fsync를 () O_DIRECT fsync를 ()
O_DIRECT_NO_FSYNC fsync를 () O_DIRECT
All_O_DIRECT (percona) O_DIRECT fsync를 () O_DIRECT fsync를

그림 삽입 설명 여기

노트:

  • fsync: InnoDB용도 fsync()모두 데이터를 플러시하고 로그 파일에 시스템 호출을. fsync기본 설정입니다.

    fsync를 로그 데이터가 아니라 OS에 버퍼 바이

  • O_DIRECT: InnoDB사용 O_DIRECT(또는 directio()데이터 파일을 열려면 Solaris에서), 및 사용은 fsync()모두 데이터 파일과 로그 파일을 플러시합니다. 이 옵션은 일부 GNU / 리눅스 버전의 FreeBSD 및 Solaris에서 사용할 수 있습니다.

    하지 로그에 대한 주위의 데이터를 버퍼링 O를

  • O_DIRECT_NO_FSYNC: InnoDB사용 O_DIRECTI / O를 세척하는 동안,하지만 건너 뜁니다 fsync()각 쓰기 작업 후 시스템 호출을.

    하지 로그에 대해, 주위의 데이터를 더 동기를 버퍼링하지 O를

fsync를하고 O_DIRECT는 무엇인가?

쓰기 디스크는 세 가지 동작으로 구성되어 있습니다

[1] 파일을 열도록 열

[1] 쓰기 기록 파일 (오픈 바인딩)

[2] 플러시 플러시 동작 (디스크 브러시 파일 캐시)

  • 예를 들어 열기 :open("test.file",O_WRONLY|O_APPDENT|O_SYNC))

    • O_SYNC가 : 파일에 데이터를 기록 할 때, 데이터가 디스크에 기록되어있는 경우에만 쓰기 작업이 (쓰기는 성공을 반환) 완료되지 및 속성 데이터 파일에 해당하는 (예를 들어, 파일 길이 등) 필요가 완료되기 전에 업데이트 할 운영자 성공적인 쓰기 (메타 데이터) 작업
    • O_DIRECT가 : 쓰기 작업이 OSCACHE를 건너 뜁니다 / 파일을 열 읽고 직접 장치 (디스크)에 읽기 / 쓰기. 더 OSCACHE이 없기 때문에, 그것은 읽기를 줄이고 순차 파일의 O_DIRECT 효율을 기록합니다.
  • 쓰기 작업은 디스크 캐시에 직접 쓰거나 쓸 수있는 오픈 방식에 의해 결정된다

  • 디스크 브러시로 캐시를 플러시, O_DIRECT 이유는 다음 절을 참조 평면에 직접 작성해야

두 시스템 캐시 관련 (중요)

원칙 1 O_DIRECT

우리는 파일 및 쓰기 데이터를 열고 VFS와 파일 시스템은 하드웨어 계층 열, 쇼, 키 데이터 구조 아래 그림에 데이터를 작성하는 방법입니다 :

그림 삽입 설명 여기

https://www.usenix.org/legacy/event/usenix01/full_papers/kroeger/kroeger_html/node8.html

  • 메인 데이터와 블록 데이터 구조가 버퍼링 page_cache / 버퍼 캐시 메모리.
  • 아이 노드 캐시 버퍼 아이 노드
  • 디렉토리 구조의 데이터를 버퍼링 디렉토리 캐시.

운영 체제 및 파일 시스템에 따라, 파일에 일반적으로 쓰기 동작이 파일 속성은 두 부분, 데이터 자체의 기록 동작 및 기록 동작 (메타 데이터는 메타 데이터)는 파일; 상기 속성 (여기서 이루어져 디렉토리, 아이 노드, 등).

표지 버퍼 캐시 inode 캐시 dictory 캐시
O_DIRECT 쓰기 바이 패스 쓰기 바이 패스 쓰기 & 더 높이 쓰기 & 더 높이
O_DSYNC /를 fdatasync () 쓰기 및 플러시 쓰기 및 플러시 쓰기 & 더 높이 쓰기 & 더 높이
O_SYNC / fsync를 () 쓰기 및 플러시 쓰기 및 플러시 쓰기 및 플러시 쓰기 및 플러시
  • 또는 전화를 fdatasync 전체 페이지 캐시에 대한 쓰기 특정 데이터 () 잠시 후 버퍼 캐시, 모든 해당 페이지 캐시에 대한 갱신 및 각 IO시 버퍼 캐시 제출 : 차이 O_DSYNC과를 fdatasync는 ()이다 새로 고침. O_SYNC 및 fsync를 () 공감 차이.
  • 페이지 캐쉬와 버퍼 캐시의 주요 차이점은, 실제 파일 데이터가 배향되어있는 블록 지향 장치이다. , 당신이 메이크업 사용 된 mkfs 파일 시스템 페이지 캐시를 사용하여 버퍼 캐시 할 파일 VFS에의 상단에 길을 열어) (오픈 사용하고, 당신이 사용하는 경우는 Linux 운영 체제 Linux 운영 블록 장치에이 방법을 dd는, 당신은 단지 버퍼 캐시를 사용합니다.
  • O_DSYNC와 O_SYNC 차이가 있다는 것입니다 : 데이터는 데이터가 디스크에 기록 된 경우에만 파일에 기록 될 때, O_DSYNC 커널에게, 쓰기 작업은 (성공을 반환하기 전에 쓰기) 완료되지 않았습니다. 더 엄격한 O_DSYNC 이상의 O_SYNC는 성공을 위해 쓰기 작업을 완료하기 위해 업데이트 할 필요 (예 : 파일 아이 노드, 디렉토리 관련 변경 등) 해당 데이터 파일을 데이터가 디스크에 기록되었습니다뿐만 아니라 필요로하고, 속성. O_SYNC 더 O_DSYNC 이상의 일부 작업 할 볼 수.
  • 오픈 ()는 referense O_ASYNC가 주로 단자되고 가상 소켓 및 파이프 / FIFO들, 장치 읽고 쓸 수있는 경우 IO, 송신 신호합니다 (SIGIO)를 구동하기위한 신호,이 신호 캡쳐 애플리케이션 프로세스에 사용되며, 존재 에 IO 작업.
  • O_SYNC와 O_DIRECT가 쓰기에 동기화, 즉 단지 성공을 쓰기로 돌아갑니다.

다시 찾고, 우리는 더 나은 이해에서 innodb_flush_log_at_trx_commit 구성을 볼 것이다.

O_DIRECT는 페이지 캐시를 우회 IO 직접 왜 / 캐시 적으로 fsync ()에 필요한 버퍼, 그것은 디렉토리 캐시와 아이 노드 캐시 메타 데이터도 저장 장치로 플러시 수입니다.

그리고 커널 및 파일 시스템을 업데이트하기 때문에, 파일 시스템은 몇 가지 확신을 보장 할 수없는 fsync를 () 동기화 메타 데이터하지 않습니다 방식에 따라 데이터 보안 O_DIRECT 문제 원인, 이노 또한 O_DIRECT_NO_FSYNC의 방법을 제공하므로.

2 O_DIRECT 장점과 단점

권장 innodb_flush_method를 매개 변수 값의 대부분은 percona 서버 분기도 ALL_O_DIRECT을 제공, 심지어에서, O_DIRECT에 추천, 로그 파일은 O_DIRECT 열기를 사용한다.

우월

  • 운영 시스템 메모리를 저장 : O_DIRECT를 페이지 캐시 바이 패스 / 따라서 InnoDB의 데이터를 읽기 및 쓰기 운영 체제에서 메모리를 적게 차지 피하고, 버퍼 캐시, 더 많은 메모리 사용에 풀 버퍼 InnoDB에두고있다.
  • 저장 CPU : 주요 여론 조사, 인터럽트와 DMA 모드의 전송에 메모리 저장 장치. O_DIRECT 시스템 프롬프트 기억 장치에 DMA 동작의 화장 용도에 사용하기위한 조작은 CPU를 저장한다.

불우 아동

  • 바이트 정렬 : 기록 데이터에 필요한 O_DIRECT하게는, 메모리는 (다른 커널의 파일 시스템에 따라 상이하게 배향) 바이트 - 정렬된다. 이 추가 정렬 작업의 필요성 쓰기의 데이터를 필요로한다. 당신은 할 수 /sys/block/sda/queue/logical_block_size정렬, 일반적으로 512 바이트의 크기를 알고있다.
  • IO 병합 될 수 O_DIRECT를 우회 page cache/buffer cache직접 기록 저장 장치, 메모리에 동일한 데이터 조각 반복 쓰기가 조회 할 수없는 경우 그래서, page cache/buffer cache머지 기능이 유효로 기록 될 수 없다.
  • 쓰기의 효율성을 줄이기 위해 : O_DIRECT 파일을 열 경우, 읽기 / 쓰기 작업은 캐시, 저장 장치에 직접 읽기 / 쓰기를 건너 뜁니다. 더 캐시, 읽기, 상대적으로 낮은 효율 O_DIRECT 방식으로 소형 IO 요청을 사용하여 파일을 작성하므로 순서가 없기 때문에. 모든 응용 프로그램의 100 %를 innodb_flush_method를 설정 O_DIRECT를 사용하여, 일반적으로 및 시나리오가 적용된다 (로그는 로그 효율이 상대적으로 낮은 것 또한 만일 그렇다면, 순차적으로 기록된다).

파라미터 최적화 매달려 판 3에서 ext4

  • noatime으로

    값이 아이 노드에 기록되지 않은 atime에 시간을 읽고, 자주 디스크에 기록 읽기를 줄일 수 있습니다

  • nodiratime

    당신이 할 수 있도록이 옵션 만에 atime 업데이트를 금지 디렉토리입니다 atime에의 디렉토리 LS 값을 업데이트하지 않도록 주문

  • nodelalloc

    안 지연 할당, 사전 할당 블록에서 ext4의 좋은 특성이있는 페이지 캐시에 할당 된 블록 번호, 큰 파일은 속도를 높일 수 있습니다

  • nobarrier

    예기치 않은 충돌 후 빠른 복구를 위해 리두 로그 데이터베이스 필드와 유사한 저널 영역이 존재하는 한 현대에서 ext4 파일 시스템 저널링 : 사실, 단순히 장벽은 WAL 로그 파일 시스템 (쓰기 앞서 로깅) 수단을 보장하는 것입니다. 먼저 디스크 영역에 기록 저널 데이터를 기록 할 경우, 다음 디스크의 실제 위치에 해당하는 데이터를 기록. 디스크의 디스크 쓰기 속도를 빠르게하기 위해 디스크 제조업체가 캐시에 내장되어, 데이터는 일반적으로 디스크 캐시에 기록됩니다 .. 즉 실제 데이터가 갱신 및 저널의 순서 될 수 있습니다 있도록 캐시는 물론, 훌륭한 일, 쓰기 속도를 빠르게하지만, 캐시 데이터는 최적의 디스크에 플러시 정도로 분류에 일반적으로 디스크 캐시를 가질 수 있습니다. 시스템 충돌하면, 다음 부팅 디스크를 참조 저널 영역을 복원, 이번에는 실제 저널 기록 시퀀스 데이터 순서 데이터가 발생합니다하지만 서로 다른 "복원"일치로 새로 고칩니다. 이름 "울타리"에 대한 장벽은, 먼저 시스템 충돌 후 디스크 복구의 정확성을 보장하기 위해 이러한 방법으로, 저널이 다음 해당 데이터가 디스크에 플러싱 항상 첫 번째 서면 기록입니다 보장하기 위해 "울타리"를 추가 할 수 있지만 쓰기 성능에 매우 큰 영향.

  • 주문 데이터 =

    사용자의 필요에 따라 다양한 모드를 이용하여 로그인 ext4를 지원. 되돌림 지원 Ext4 모드에만 기록되는 메타 데이터 메타 데이터를 기록 정렬 또는 모드가, 기록 된 데이터는 로그의 메타 데이터에 기록 또는 저널 모드 (가장 안정적인 모드), 또한 메타 데이터를 기록 데이터. 참고 저널 모드는 파일 시스템의 일관성을 보장하기 위해 최선의 선택이라고하지만, 그러나 모든 데이터가 로그를 통해 이동해야하기 때문에 그것은 또한 가장 느린이다.

https://www.kernel.org/doc/Documentation/filesystems/ext4.txt

data= journal 
      All data are committed into the journal prior to being
			written into the main file system.  Enabling this mode will 
			disable delayed allocation and O_DIRECT support.

data= ordered	(*)
      All data are forced directly out to the main file
		  system prior to its metadata being committed to the journal.

data= writeback 
      Data ordering is not preserved, data may be written
			into the main file system after its metadata has been
			committed to the journal.

셋째, 메모리 관련

버퍼층 온보드, 그 주된 목적은 스토리지 컨트롤러 레벨에서 데이터를 버퍼링하는 캐시 메모리 제어기에 대응으로 게재되어 블록 장치는 판독 및 기록 동작의 응답 시간이 느린 것을 방지하는 것은 IO에 영향을 미친다.

데이터 저장 층에 브러시처럼 fsync ()를 인 경우 제 1 층은 상기 메모리 제어기에 전송한다. 일반적인 스토리지 컨트롤러는 1G 또는 RAID 카드의 가장 큰 저장 용량이 지금 레이드 카드 및입니다. 배터리 / 캐패시터 기기 전원 오프 후, "비 휘발성 메모리"데이터가 여전히 기본 디스크 저장 매체에 동기화 될 수 있도록 내장이 버퍼는, 일반적으로 휘발성 스토리지이다.

스토리지 컨트롤러에 대해 우리는 일부 지역 필요 관심이 있습니다 :

  1. 라이트 백 / 통해 적는다 대한 버퍼의 여부, 메모리 컨트롤러는 두 가지 방법을 통해 일반적인 기록하고 다시 기록을 제공한다. 쓰기 다시 모드에서 운영 체제가 성공을 반환 버퍼에 직접 쓰기 요청을 제출 한 데이터를 기록, 모드를 통해 다음 쓰기, 운영 체제는 기본 미디어에 성공을 반환하기 전에 요청이 실제로 디스크에 기록해야 제출 된 데이터를 기록합니다.
  2. 배터리 / 캐패시터 구별 "휘발성"버퍼 다운 기기에 데이터를 신속 하층의 디스크 매체로 플러시 될 수 있음을 보장하기 위하여, 메모리 제어기 확보 배터리 / 캐패시터를 갖는다. 페이딩 배터리 용량, 즉 일반적인 문제와 배터리 충전 및 방전주기가 내장 배터리의 용량을 보장하기 위해 제어되어야한다. 배터리 충전 및 방전 과정에서 자동적으로 변경 쓰기 메모리 라이트 - 백 제어기에 제공된다 . 이 사이클 (사이클주기를 알아보기) 찾을 경우 충전 및 방전, LSI 카드가 MegaCli 볼 수 있습니다, 일반적으로 구십일 될 때마다 IO 요청 응답 시간이 갑자기 느리게 동안, 오, 문제가있을 수 있습니다에 한 번. MegaCli -AdpEventLog -GetEvents -f mr_AdpEventLog.txt -aALL하여 이벤트 설명의 로그 : 배터리는 충 방전의 발생이 발생 여부를 확인할 수 있습니다 충전을 시작했다.
  3. 읽기 / 쓰기 비율 : 캐시는 읽기 및 쓰기 (가속기 비율) 사이에 HP의 스마트 어레이는 구별를 제공하기 위해, hpacucli Ctrl 키를 모든 쇼 설정 상세 | 그렙 '가속기 RatioAccelerator는 비율 : 25 % 읽기 / 75 % 쓰기 당신은 응용 프로그램에 따라 할 수 있습니다 버퍼 캐시의 비율을 설정하는 실제 상황의 읽고 쓰기 캐시.
  4. 열기 직접 IO는 : 순서는 RAID 카드 우회에 직접 IO의 방법으로 상위 장치의 사용을 할 수 있도록, 당신은 RAID의 설정에 공개 된 directio의 방법이 필요합니다 : / 옵션 / 메가 RAID / MegaCli / MegaCli64 -LDSetProp 직접적인 -Immediate -Lall -aAll
  5. LSI 플래시 RAID : 우리는 이제 비 휘발성 완충액, 수백 G의 용량이있는 경우 "휘발성"기본 디바이스 버퍼 메모리 컨트롤러하게 속도가되도록, 버퍼, 상기 언급? 카드 제조업체의 베테랑 레이드는 LSI 현재 그러한 메모리 컨트롤러가 있고, 기록들의 비교 사용을 다시 저장 콘트롤러 이러한 유형의 사용을 고려할 수있다 메모리 제어기에 의존 애플리케이션 버퍼.
  6. 장벽을 쓰기 : 현재 캐시 RAID 카드를 리눅스 용 배터리 나 커패시터 보호 그렇게이며, 쓰기 장벽을 엽니 다 기본은, 그것은 새로 고침 계속 저널링 파일 시스템 리눅스의 일관성을 보장하기 위해, 아니 볼 수있는 경우 ". 휘발성 "버퍼, 그것은 크게 IO 성능이 저하 될 것입니다. 당신은 기본 배터리가 "휘발성"버퍼가 기본 디스크 장치에 브러시 할 수 있도록한다는 확신 그래서, 당신은 할 수 있습니다 -o nobarrier 마운트 디스크에 시간을 추가 할 수 있습니다.

넷째, 디스크 컨트롤러 관련

버퍼층 디스크 컨트롤러 보드 캐시 대응 배치된다. 규칙에 의해 정렬됩니다 저장 장치 펌웨어 (펌웨어) 정말 갈 미디어 쓰기에 동기화됩니다. 당신이 더 많은 디스크 쓰기 작업을 수행 할 수있는 머리의 움직임을 시도 할 수 있도록 여기에 주로 순차 쓰기, 기계 디스크를 확인합니다.

일반적으로, DMA 제어기는 CPU 자원을 절약 할 수 디스크, DMA 컨트롤러에 의해 직접 메모리 액세스의 층에 배치된다.

우리는 강력하게 그 디스크 캐시 폐쇄 추천 할 수 있도록 기계적인 하드 디스크 등 일반적으로 디스크 장치없이 배터리 용량 때문에, 전원이 기계 내부 디스크 캐시에있는 모든 데이터는 미디어에 시간에하지 보증 동기화 할 수 수있다.

참고

메모리 및 디스크 속도의 문제가 일치하지 않거나, 디스크의 속도가 너무 느립니다 : 미디어의 마지막에 이노, 우리는 쿠션의 모든 종류의를 통과 한 그들의 목적은 매우 분명하다, 그것을 해결하는 것입니다.

또한, 사실, 데이터는 (순서는 임의 쓰기 쓰기가됩니다 중복 IO를 병합하기 위해) 슬로우 기본 저장 장치를 완화하기 위해 캐시 또는 응용 프로그램 자체가, VFS는, 스토리지 컨트롤러 및 디스크 만 지연으로 쓸 수 / 가장 알고 버퍼해야하는지 여부 느린 응답 문제로 인해 발생합니다. 응용 프로그램의 데이터베이스 유형은 다음 버퍼를 관리하며, 할 수 있도록 운영 체제 및 기본 장비를 버퍼 피하려고.

그러나 사실, 때문에 솔리드 스테이트 드라이브 SSD 및 PCIe 플래시 카드, 메모리의 출현 사이의 현재 속도의 차이 및 디스크는 크게, 이러한 버퍼를 감소하면 개선 될 수있다 필요한 하드웨어와 소프트웨어, 소프트웨어 및 하드웨어 엔지니어들에게 큰 도전.

https://www.ibm.com/developerworks/cn/linux/l-anatomy-ext4/index.html

https://www.cnblogs.com/DataArt/p/10229913.html

http://en.wikipedia.org/wiki/Disk_buffer

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Storage_Administration_Guide/writebarrieronoff.html

http://en.wikipedia.org/wiki/Direct_memory_access

게시 27 개 원래 기사 · 원 찬양 2 ·은 50000 +를 볼

추천

출처blog.csdn.net/jackgo73/article/details/105204944