자양
10.12.13
조회 수 6800
추천 수 4
댓글 13

아래 내용에 대해서는 본인이 몇일 사용해 본정도밖에 없으며,

특별한 피드백을 받은적이 없어서 결과에 대해서 알지 못합니다.

특별히 시스템에 위해적인 내용은 아니니 몇일 사용해 보셔도 큰 문제는 없습니다.

출처)

http://blog.naver.com/dowkim10/120119483848

(이전 벼리님 답글 땜에 글 한번 더 올렸네요..ㅎㅎ)

----------------------------------------------------------------------------------------

파일에 대한 억세스(read,write)에 대한 지연과 리눅스에서 사용하는 IO 스케듈러와 밀접한 관련이 있다.
물론 가장 IO 딜레이에 영향을 미치는 것은 파일시스템 및 플래시 매체이긴 하지만, 그다음으로 보자면 IO 스케쥴러로 생각된다.


리눅스에서 선택할 수 있는 IO 스케쥴러는 다음의 4가지 중에 하나이다.

http://www.wlug.org.nz/LinuxIoScheduler
Noop
Anticipatory
Dedline
CFQ (completly Fair Queuing)


Noop은 단순하며 ssd장치의 수명과 연관한다면 좋을수 있으며, Anticipatory는 핀을 사용하는 하드 디스크에 적합할 수 있으나 IO 딜레이가 큰편이며, deadline은 프로세서의 IO요청에 대해 특정 시간내에 처리를 하므로 starvation(굶는것)을 방지하고 response타이을 줄여 유저 인테페이스 반응을 좋게 한다.

일반적인 대부분의 리눅스 시스템(redhat, ubuntu)등은 CFQ를 사용하고 있다. 이는 CFQ가 하드 디스크를 사용하는 일반적인 환경에서 처리량 및 지연에 대해서 좋은 성능을 보여주고 있기 때문이다. (갤럭시s도 CFQ를 사용한다.)


하지만, 갤럭시s 같은 경우 처리량(performance/throuput)에 문제가 있는것은 아니다. 단지, response time이 늦는데 문제가 있다.
RFS 나 moviNAND 자체의 문제도 있지만, IO 스케듈러의 영향도 무시 못할 것이라 생각된다.

response time 또는 IO delay가 가장 작은 것은 스케듈러는 deadline 스케듈러이다. 하지만, 단점은로 IO에 대한 억세스가 더 많으므로 플래시 수명에는 더 안좋으며, 전체적인 성능은 좀 떨어진다.


아래 링크의 벤치마크 테스트 자료를 보면 deadline 스크쥴러의 IO 딜레이가 가장작다.
http://lwn.net/Articles/113869/

쿼드런트 벤치마크 및 RL 벤치마크
IO 스케듈러의 변경으로는 벤치마크 점수가 차이가 거의 나지 않는다.
이런 류의 벤치마크는 실제 사용상에서 중요한 IO delay대한 측정은 하지 않고, 단지 성능(performance, thouput, speed)에 대한 점수를 내기 때문이다.
그래서, 쿼드런트에서 2000점이 나온다고 하더라도, 한번씩 심각한 IO delay가 발생한다면 체감 성능은 더 않좋을 수 밖에 없다.
(본인이 사용하는 ext3패치는 1000점 정도 밖에 안나오지만 특별한 렉 현상이나 멈춤 현상이 없다.)

적용법
순정 커널, 패치 커널은 상관없지만 루팅은 되어 있어야 사용가능하다.
그리고, 아래 방법은 임시적인 방법이다. 아래와 같이 적용하더라도 폰을 껏다 키면 다시 원상태로 돌아온다.
(영구적으로 적용시킬려면 init.rc를 수정해서 커널 이미지를 새로 만들어야 한다.)
$ su
# echo "deadline" > /sys/block/{DEVICE-NAME}/queue/scheduler

여기서 {DEVICE-NAME}에 들어갈수 있는 내용으로는
stl9 (/system)
stl10 (/dbdata)
stl11 (/cache)
mmcblk0 (/data 및 /sdcard)
mmcblk1 (외장 sd)
... (기타 등등)

순정 커널 사용자라면 mmcblk0이 가장 크게 영향을 미칠 것으로 보이며, 임시적으로 몇일 사용해 보는 것은 시스템에 큰 영향이 없다.
(deadline IO 스케듈러의 해제는 그냥 껏다 키면된다.)

사용예)
# echo "deadline" > /sys/block/mmcblk0/queue/scheduler
이 경우 /data 및 /sdcard가 CFQ가 아니라 deadline방식으로 IO scheduler가 동작한다.

사용후기
본인의 경우 sd패치를 통해서 외장 sd가 /data로 바뀌어 있다.
그래서, 실험적으로 다음과 같이 변경하였다. (mmcblk1이 됨)
# echo "deadline" > /sys/block/mmcblk1/queue/scheduler

본인의 갤럭시s의 경우 사실 렉이 거의 없다.
따라서, 실제 체감적으로 성능 향상을 잘 알수 없었지만, 순정 커널 사용자라면 다른 차이점을 느낄수 있을지 모르겠다.

댓글 13
  • ?
    자양님의 글 잘읽고있습니다..^^
    적용완료했구요~! 플라시보효과인지는 모르겟지만.. 빨라진듯 합니다..^^
  • ?
    자양
    10.12.13
    플라시보 효과라.. 재밌는 표현이네요.. ㅎㅎ
    실제 빨라질거라 믿고 하면 진짜 빨라질듯...
  • ?
    태리
    10.12.13
    해보고싶은데 어케하는질 몰라서요 초보자에게 설명해주신다고 가정하에 설명해주시면 안될까요 ?

    ㅜㅜ 넘 어려워서..
  • ?
    bvlgaria
    10.12.13
    블로그 포스트 잘보고 있습니다..^^ 추가내용 기대되네요..
  • ?
    적용이 재대로 된건지 확인할수있는 방법은 없는가요?...그리고 한가지영역만 가능한가요? 예를들어 stl9 stl10
    stl11 mmcblk0 전부다 적용할수도 있는건가요?
  • ?
    dEcaDENt
    10.12.13
    현재의 부두나 태그라크의 EXT4 패치들처럼 뚝뚝 끊기는 종류의 파일 시스템에 효과가 조금이나 있으리라 생각합니다.
    (물론 근본적으론 프로요 자체의 파일 I/O 영역의 버그때문에 이클레어때보다 효과를 덜 보기 때문입니다)
  • ?
    자양
    10.12.13
    확인 방법은 다음과 같습니다. (아래는 default로 cfq가 되어 있음)
    $ cd /sys/block/{DEVICE-NAME}/queue
    $ cat scheduler
    noop anticipatory deadline [cfq]

    그리고, 모든 블럭(stl9, stl10, ...등)에 대해서 각각 설정을 바꿀수 있습니다.
  • ?
    dEcaDENt
    10.12.13
    부두커널 이용하시는 분들 스크립트로 넣어보실 생각이면 이대로 적용하시면 스케쥴러 있는건 죄다 되는것 같습니다.

    echo \"deadline\" > /sys/block/tfsr0!c/queue/scheduler
    echo \"deadline\" > /sys/block/tfsr1/queue/scheduler
    echo \"deadline\" > /sys/block/tfsr2/queue/scheduler
    echo \"deadline\" > /sys/block/tfsr3/queue/scheduler
    echo \"deadline\" > /sys/block/tfsr4/queue/scheduler
    echo \"deadline\" > /sys/block/tfsr5/queue/scheduler
    echo \"deadline\" > /sys/block/tfsr6/queue/scheduler
    echo \"deadline\" > /sys/block/tfsr7/queue/scheduler
    echo \"deadline\" > /sys/block/tfsr8/queue/scheduler
    echo \"deadline\" > /sys/block/tfsr9/queue/scheduler
    echo \"deadline\" > /sys/block/tfsr10/queue/scheduler
    echo \"deadline\" > /sys/block/tfsr11queue/scheduler
    echo \"deadline\" > /sys/block/tfsr12/queue/scheduler
    echo \"deadline\" > /sys/block/mmcblk0/queue/scheduler
    echo \"deadline\" > /sys/block/mmcblk1/queue/scheduler
    echo \"deadline\" > /sys/block/bml0!c/queue/scheduler
    echo \"deadline\" > /sys/block/bml1/queue/scheduler
    echo \"deadline\" > /sys/block/bml2/queue/scheduler
    echo \"deadline\" > /sys/block/bml3/queue/scheduler
    echo \"deadline\" > /sys/block/bml4/queue/scheduler
    echo \"deadline\" > /sys/block/bml5/queue/scheduler
    echo \"deadline\" > /sys/block/bml6/queue/scheduler
    echo \"deadline\" > /sys/block/bml7/queue/scheduler
    echo \"deadline\" > /sys/block/bml8/queue/scheduler
    echo \"deadline\" > /sys/block/bml9/queue/scheduler
    echo \"deadline\" > /sys/block/bml10/queue/scheduler
    echo \"deadline\" > /sys/block/bml11/queue/scheduler
    echo \"deadline\" > /sys/block/bml12/queue/scheduler
    echo \"deadline\" > /sys/block/stl1/queue/scheduler
    echo \"deadline\" > /sys/block/stl2/queue/scheduler
    echo \"deadline\" > /sys/block/stl3/queue/scheduler
    echo \"deadline\" > /sys/block/stl4/queue/scheduler
    echo \"deadline\" > /sys/block/stl5/queue/scheduler
    echo \"deadline\" > /sys/block/stl6/queue/scheduler
    echo \"deadline\" > /sys/block/stl7/queue/scheduler
    echo \"deadline\" > /sys/block/stl8/queue/scheduler
    echo \"deadline\" > /sys/block/stl9/queue/scheduler
    echo \"deadline\" > /sys/block/stl10/queue/scheduler
    echo \"deadline\" > /sys/block/stl11/queue/scheduler
    echo \"deadline\" > /sys/block/stl12/queue/scheduler
    echo \"deadline\" > /sys/block/dm-0/queue/scheduler
  • ?
    dEcaDENt
    10.12.13
    sk05용 부두 NILFS2에 적용 결과 부팅이 좀 빨라졌고 스크롤이 좀 더 부드러워졌습니다.
  • ?
    싹바리
    10.12.13
    스크립트 삽입하려면 어떤프로그램써야하죠? ㅠㅠ

    완전 쌩초보라서요 조언좀 부탁드려요 ㅠㅠ

    터미널로 수정은해서쓰고있는데 매번 수정하기 귀차나서 ㅠㅠ
  • ?
    벼리
    10.12.14
    맛클에 이런 자료들이 많이 올라와야 되는데 너무 감사합니다 ㅎㅎ
    많이 배우고 갑니다 ^^
  • ?
    10.12.14
    학교에서 공부하면서 OS 스케쥴에 배웟지 사용법은 몰랏었는데.
    좀더 공부를 해야겟네요 ㅠ
    감사합니다.
  • ?
    자양
    10.12.14
    혹시 플래시 수명을 걱정하실분 있을거 같아서 부연설명 드리자면,
    oneNAND의 경우 3-5만, moviNAND의 겨우 3-5천정도 write를 보장한다는 내용을 본적있는것 같은데,
    read의 경우 횟수와 상관이 없습니다.
    그리고, noop이나 deadline은 SSD(플래시)에서 추천된는 옵션이며, 수명상에는 noop이 좋지만, response가 아주 느려요..
    CFQ가 일반적인 하드디스크 타입에 최적화 되었지만, SSD에는 noop이나 deadline을 많이 쓰는듯
    deadline을 쓰면 눈에 먼저 띄는 것은 부팅타임이 빨라지는데, 이걸 확인하려면 init.rc에 넣어야 되죠.
    참고)
    http://www.phoronix.com/forums/showthread.php?t=16322
댓글 쓰기 권한이 없습니다.
정렬 목록 검색 쓰기
등록된 글이 없습니다.
1 - 2