커널 스케줄링 질문 - SCHED_BATCH, ksoftirqd 관련

dorado2의 이미지


현재 임베디드 기기에 들어가는 네트워크 프로그램 작성중입니다.
동작은 잘 합니다만, 네트워크 부하가 많이 걸릴 때 interactivity가 떨어지는 문제가 있습니다.
브라우징이 늦게 된다던지, 디스플레이가 버벅인다든지 하는 문제가 있네요.

top 등으로 관찰해 보면 네트워크 부하가 많이 걸릴 때 ksoftirqd가 CPU를 4~50% 가까이 사용하는 경우를
볼 수 있습니다.

softirq는 제가 알기로는 interrupt를 top half, bottom half로 나누어 처리하는 경우에 bottom half쪽에 해당하며
critical하지 않은 부분을 H/W interrupt가 아닌 S/W 부분에서 지연처리하기 위해 사용하는 것으로 알고 있습니다.
그리고 ksoftirqd는 softirq 처리를 마치고 복귀하는 시점에 pending된 softirq가 있다면 이를 처리하기 위해 수행되는 것으로
파악하였습니다. 틀린 부분에 대해 지적 부탁드립니다.

하여튼, 현재 사용하고 있는 2.6.17 kernel에서는 kosftirqd의 nice level이 원래는 19 (최하)로 되어 있습니다.
최근 커널에서는 set_user_nice(19)를 없애고 다른 프로세스와 동등하게 경쟁하게끔 바뀌었더군요.
제 PC의 최근 커널(2.6.27)에서는 -5 로 설정되어 있더군요.

현재 시스템에 customizing된 실제 2.6.17 커널은 nice level이 -5로 변경되어 있구요,
그리고 SOFTIRQ 중에서 TASKLET, NET_TX, NET_RX는 masking하여 __do_softirq에서 처리하지 않도록 되어 있습니다.
즉, ksoftirqd의 priority는 아주 높인 상태이고, network TX, RX는 softirq가 아닌 ksoftirqd에서
모두 처리하도록 되어 있는 상태입니다.

__do_softirq에서 network TX,RX를 처리 안 하기 때문에 네트워크 성능은 좀 떨어지는 것 같은데, 다른 프로세스에
리소스를 좀 더 주려고 기존 개발자가 이렇게 설정을 한 것 같습니다. 반면에 nice level은 또 -5로 변경했구요.
저로선 의도를 100% 파악하기 힘드네요. 하드웨어 제약 때문인지 다른 원인이 있는지...

네트워크 전송도 중요하긴 하지만 user interactivity가 제일 우선순위 입니다. SCHED_BATCH 스케줄 정책이
이러한 상황에 도움이 된다는 내용을 보았습니다. Priority 레벨에 penalty를 받게 된다는데요.

1. 이 경우 실제 네트워크 작업을 수행하는 user process만 SCHED_BATCH로 해주는 경우와, ksoftirqd의 scheduler 역시
SCHED_BATCH로 해주는 경우에 차이가 있을까요?

2. SOFTIRQ를 masking하여 사용하게 되는 이유가 따로 있을까요?

3. 임베디드 시스템에서 network쪽 tuning을 해본 경험담을 좀 공유해주시면 정말 유용할 것 같습니다. 네트워크 성능을
최대화해야 할 경우도 있고, 1차적으로 다른 성능을 보장하는 선에서 네트워크 성능을 최적화하는 경우도 있겠구요.

저도 문제 해결이 잘 되면 이곳에 결과 올리도록 하겠습니다~

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.