Linux는 동시 디스크 IO를 어떻게 처리합니까?


12

Linux 서버가 많은 다른 파일을 읽기 위해 많은 동시 요청을 처리하는 경우 다음을 수행하십시오.

  1. File_1을 찾고, 전체 파일을 읽은 다음 File_2를 찾고, 전체 파일을 읽은 다음 File_3을 찾으십시오.

  2. File_1을 찾고, 그 부분을 읽습니다 (최대 미리 읽기 값까지?). File_2를 탐색하고, 그 부분을 읽은 다음 중단 된 곳의 File_1을 다시 찾고, 더 읽은 다음 File_3을 탐색하십시오. 기타

두 번째 경우에는 서버가 필요한 것보다 더 많은 탐색을 수행하므로 작업 속도가 크게 느려집니다. 이 경우 내가 할 수있는 튜닝이 있습니까?

답변:


14

디스크 I / O에는 엘리베이터라는 것이 있습니다. 디스크 하위 시스템은 플래터 전체에 디스크 헤드가 튀는 것을 피하려고합니다. 헤드가 디스크 내부에서 외부로 이동하고 다시 요청 된 I / O를 수행 할 수 있도록 I / O 요청 (예 : 장벽으로 금지되지 않은 경우)을 다시 주문합니다.

두 번째는 I / O 요청 병합입니다. 단시간 내에 파일의 다른 부분에 액세스하는 많은 요청이있는 경우, I / O 서브 시스템은 여러 개의 분리 된 요청을 발행하는 대신 모든 데이터를 한 번에 가져 오려고 시도합니다.

튜닝이 진행되는 한. 응용 프로그램 작성자라면 할 수있는 일이 많습니다. fsync () 등을 사용할 수있을 때마다 큰 순차적 I / O를 발행 할 수 있습니다. 데이터가 플래터에 있는지 확인해야 할 때.

sysadmin이고 2 개의 앱의 데이터 요청이 도약하고 파일을 순차적으로 읽으려고 시도하는 경우 (예 : 2 개의 DVD가 병렬로 트랜스 코딩되는 경우) 예, 미리 읽기를 늘리면 도움이됩니다. 그렇지 않으면 튜닝을 수행하기 전에 I / O 패턴 및 크기를 살펴보고 RAID 레벨 (있는 경우) 및 기타 요소를 고려해야합니다. 실제 병목 현상이 무엇인지 살펴보십시오. 튜닝을 시작하기 전에 추측하기 어려울 수 있으며 실제로 시스템을 제한하는 것은 무엇입니까?


5

리눅스에서 당신은 자신의 스케줄링 알고리즘을 정의 할 수 있습니다, 당신은 다른 가능성을 가지고 있습니다. 학교에서 그 일을해야했고 Red Hat 의이 기사는 많은 도움이되었습니다. Red Hat 전용이지만 거의 모든 Linux 배포판에서 이러한 스케줄러를 찾을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.