2009-11-19 3 views
2

리눅스에서 rtkaio 라이브러리가있는 async io를 사용하고 있습니다. 내 테스트에서 모든 것이 완벽하게 작동하지만, 실제 응용 프로그램에서는 매우 빠르게 리턴되어야하는 aio_write가 매우 느린 것을 볼 수 있습니다. O_DIRECT 패딩 된 파일에 128KB를 기록하는 데 100 밀리 이상이 걸릴 수 있습니다. 내 테스트와 애플리케이션 모두 동일한 I/O 크기를 사용하므로 같은 파일 시스템 (GFS)을 검사합니다.aio_write on Linux with rtkaio가 가끔 길다

나는 카운트를 추가했는데, 짧은 (2 밀리미터보다 짧음)과 50 밀리 초 (2 밀리미터보다 길다) 인 비동기 작업의 약 50 %가 있음을 알 수 있습니다.

또한 테스트와 응용 프로그램이 모두 동일한 rtkaio 라이브러리를 사용하는지 확인했습니다.

저는 꽤 잃어버린 사람입니다. 어떤 생각을해야합니까?

또 다른 내 관련 질문 : /proc/sys/fs/aio-nr is never higher than 1024 (AIO on linux)

+0

나는 실제로 나는 아이오에 대해 아무것도 모른다 고 고백한다. 그러나 이것은 SystemTap의 좋은 응용 프로그램처럼 들립니다. 특히, 전체 커널 호출 트리 (예제 스크립트가 있음)를 표시 할 수 있고, 호출하기 전에 추적을 사용 가능하게 설정 한 후 바로 사용할 수 있습니다. 시간 소인과 함께, 시간을 많이 소모하는 것이 무엇인지를 좁혀 야합니다. 웬일인지 대체 경로를 타파하고 쓰기를 기다리는 것처럼 들리거나 의존하기로 결정한 디스크 작업과 같지만 그게 추측입니다. – sfink

답변

1

내가 낙담 할 의미하지 않는다,하지만 난 너무 많은 변수가 여기에 있기 때문에이 질문에 매우 유용한 답변을 얻을 수 있습니다 의심 (클러스터 파일 - 시스템, 비동기 I/O, O_DIRECT 등)를 사용하고, 누군가가 특히 설정에 익숙하지 않으면 최고의 사람이 모호한 조언을 제공 할 수 있습니다.

필자는 느린 실제 쓰기인지 또는 오래 걸리는 비동기 콜백 처리기의 호출인지 여부를 판단해야한다고 생각합니다. aio_write으로의 호출을 정기적 인 동기 쓰기 호출로 대체 할 수 있습니다. 또한 언급 한 쓰기 크기가 매우 작아 보이는데, 왜 O_DIRECT을 사용하고 있습니까? 나는 많은 작은 쓰기가있는 경우에 O_DIRECT가 성과를 줄 것이라는 점을 생각할 것입니다.

+0

예, 맞습니다. 퀘스트는 매우 구체적입니다. 그러나 나는 어떤 납을 받아 들일 용의가있다 :). 128KB의 I/O는 그리 작지 않습니다. I/O를 완료하는 데 걸리는 시간이 아니라 비동기식 IO 만 대기하는 시스템 호출을 측정하고 있습니다. 내가 버퍼링을 필요로하지 않기 때문에 그리고 내가 TB 파일을 가지고 있기 때문에 나는 O_DIRECT를 사용하고있다. 10 배! – Drakosha

0

open()으로 파일을여시겠습니까?

O_NONBLOCK으로 파일을 열고 있는지 확인하고 O_WRONLY으로 시작해야합니다.

+0

O_NONBLOCK이 필요한지 잘 모르겠습니다. aio_write/aio_read는 그것을 요구하지 않습니다. O_RDWR 모드로 열어도 읽고 쓸 필요가 있기 때문입니다. O_NONBLOCK이 필요한 이유를 자세히 설명해 주시겠습니까? – Drakosha