All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michal Soltys <soltys@ziu.info>
To: Francois Romieu <romieu@fr.zoreil.com>
Cc: netdev@vger.kernel.org
Subject: Re: r8169 (+others ?) and note_interrupt performance hit on 2.6.30.x
Date: Sun, 26 Jul 2009 20:43:59 +0200	[thread overview]
Message-ID: <4A6CA3EF.7080909@ziu.info> (raw)
In-Reply-To: <20090726091803.GA28374@electric-eye.fr.zoreil.com>

I did some more tests, with kernel booted both with noirqdebug and
without (as this decides if note_interrupt gets called from
handle_edge_irq).

As far as cpu load goes, everything remained the same - 100% on chosen
core, unable to reach 1gbit. When noirqdebug was enabled, oprofile showed
majority of time spent in handle_edge_irq:

CPU: AMD64 processors, speed 2517.35 MHz (estimated)
Counted CPU_CLK_UNHALTED events (Cycles outside of halt state) with a unit mask of 0x00 (No unit mask) count 50000
samples  cum. samples  %        cum. %     symbol name
15238    15238         38.1723  38.1723    handle_edge_irq
2146     17384          5.3759  43.5482    rb_get_reader_page
1877     19261          4.7020  48.2502    csum_partial_copy_generic
1671     20932          4.1860  52.4362    getnstimeofday
1618     22550          4.0532  56.4894    udp_sendmsg
1366     23916          3.4219  59.9113    ip_append_data
1159     25075          2.9034  62.8147    ring_buffer_consume
1153     26228          2.8883  65.7030    handle_IRQ_event
779      27007          1.9515  67.6545    __kmalloc_track_caller

... and with callgraph:

CPU: AMD64 processors, speed 2517.35 MHz (estimated)
Counted CPU_CLK_UNHALTED events (Cycles outside of halt state) with a unit mask of 0x00 (No unit mask) count 50000
samples  cum. samples  %        cum. %     symbol name
-------------------------------------------------------------------------------
   1        1              0.0030   0.0030    vmlinux-test             do_IRQ
   1        2              0.0030   0.0060    vmlinux-test             sock_poll
   1        3              0.0030   0.0090    vmlinux-test             net_rx_action
   2        5              0.0060   0.0149    vmlinux-test             do_softirq
   2        7              0.0060   0.0209    vmlinux-test             op_add_code
   3        10             0.0090   0.0298    vmlinux-test             handle_IRQ_event
   12       22             0.0358   0.0657    vmlinux-test             inet_sendmsg
   13       35             0.0388   0.1045    vmlinux-test             sk_filter
   39       74             0.1164   0.2209    vmlinux-test             ktime_get_real
   61       135            0.1821   0.4029    vmlinux-test             log_sample
   104      239            0.3104   0.7133    vmlinux-test             x86_backtrace
   15178    15417         45.2993  46.0127    vmlinux-test             handle_edge_irq
   18089    33506         53.9873  100.000    vmlinux-test             handle_irq
15238    15238         38.1723  38.1723    vmlinux-test             handle_edge_irq
   15238    15238         45.4404  45.4404    vmlinux-test             handle_edge_irq [self]
   15178    30416         45.2615  90.7020    vmlinux-test             handle_edge_irq
   2833     33249          8.4481  99.1501    vmlinux-test             handle_IRQ_event
   166      33415          0.4950  99.6451    vmlinux-test             udp_sendmsg
   42       33457          0.1252  99.7704    vmlinux-test             ack_apic_edge
   39       33496          0.1163  99.8867    vmlinux-test             getnstimeofday
   8        33504          0.0239  99.9105    r8169.ko                 rtl8169_poll
   7        33511          0.0209  99.9314    vmlinux-test             do_IRQ
   5        33516          0.0149  99.9463    vmlinux-test             __pollwait
   5        33521          0.0149  99.9612    vmlinux-test             log_sample
   5        33526          0.0149  99.9761    r8169.ko                 rtl8169_interrupt
   2        33528          0.0060  99.9821    vmlinux-test             __do_softirq
   1        33529          0.0030  99.9851    vmlinux-test             sk_run_filter
   1        33530          0.0030  99.9881    vmlinux-test             udp_poll
   1        33531          0.0030  99.9911    vmlinux-test             op_add_code
   1        33532          0.0030  99.9940    vmlinux-test             x86_backtrace
   1        33533          0.0030  99.9970    vmlinux-test             _spin_lock
   1        33534          0.0030  100.000    vmlinux-test             apic_timer_interrupt
-------------------------------------------------------------------------------

Additional note - with noirqdebug, I often had to sync and reboot through sysreq.


Without noirqdebug, oprofile showed:

CPU: AMD64 processors, speed 2517.14 MHz (estimated)
Counted CPU_CLK_UNHALTED events (Cycles outside of halt state) with a unit mask of 0x00 (No unit mask) count 50000
samples  cum. samples  %        cum. %     symbol name
24056    24056         63.5108  63.5108    note_interrupt
3415     27471          9.0160  72.5269    rb_get_reader_page
1633     29104          4.3113  76.8382    ring_buffer_consume
728      29832          1.9220  78.7602    add_event_entry
681      30513          1.7979  80.5581    rb_buffer_peek
621      31134          1.6395  82.1976    getnstimeofday
[...]
29       36831          0.0766  97.2384    handle_edge_irq

... and with callgraph:

CPU: AMD64 processors, speed 2517.14 MHz (estimated)
Counted CPU_CLK_UNHALTED events (Cycles outside of halt state) with a unit mask of 0x00 (No unit mask) count 50000
samples  cum. samples  %        cum. %     image name               symbol name
-------------------------------------------------------------------------------
   1        1              0.0041   0.0041    vmlinux-test             do_timer
   10       11             0.0414   0.0456    vmlinux-test             inet_sendmsg
   26       37             0.1077   0.1533    vmlinux-test             timer_start
   43       80             0.1782   0.3315    vmlinux-test             _spin_lock_bh
   24054    24134         99.6685  100.000    vmlinux-test             handle_edge_irq
24056    24056         63.5108  63.5108    vmlinux-test             note_interrupt
   24056    24056         99.6644  99.6644    vmlinux-test             note_interrupt [self]
   44       24100          0.1823  99.8467    vmlinux-test             __pollwait
   37       24137          0.1533  100.000    vmlinux-test             dump_trace
-------------------------------------------------------------------------------
[...]
-------------------------------------------------------------------------------
   1        1              0.0039   0.0039    vmlinux-test             do_softirq
   1        2              0.0039   0.0079    vmlinux-test             irq_exit
   1        3              0.0039   0.0118    vmlinux-test             sock_def_write_space
   3        6              0.0118   0.0236    vmlinux-test             net_rx_action
   3        9              0.0118   0.0354    vmlinux-test             sk_filter
   5        14             0.0197   0.0551    vmlinux-test             do_IRQ
   8        22             0.0315   0.0865    vmlinux-test             handle_edge_irq
   10       32             0.0393   0.1259    vmlinux-test             ktime_get_real
   25389    25421         99.8741  100.000    vmlinux-test             handle_irq
29       36831          0.0766  97.2384    vmlinux-test             handle_edge_irq
   24054    24054         94.5742  94.5742    vmlinux-test             note_interrupt
   1286     25340          5.0562  99.6304    vmlinux-test             handle_IRQ_event
   29       25369          0.1140  99.7444    vmlinux-test             handle_edge_irq [self]
   18       25387          0.0708  99.8152    vmlinux-test             ack_apic_edge
   15       25402          0.0590  99.8742    r8169.ko                 rtl8169_poll
   10       25412          0.0393  99.9135    vmlinux-test             getnstimeofday
   8        25420          0.0315  99.9450    vmlinux-test             handle_edge_irq
   4        25424          0.0157  99.9607    vmlinux-test             apic_timer_interrupt
   3        25427          0.0118  99.9725    r8169.ko                 rtl8169_interrupt
   2        25429          0.0079  99.9803    r8169.ko                 rtl8169_rx_interrupt
   1        25430          0.0039  99.9843    vmlinux-test             __do_softirq
   1        25431          0.0039  99.9882    vmlinux-test             move_native_irq
   1        25432          0.0039  99.9921    vmlinux-test             sk_run_filter
   1        25433          0.0039  99.9961    vmlinux-test             __pollwait
   1        25434          0.0039  100.000    ip_tables.ko             ipt_do_table
-------------------------------------------------------------------------------


 From a breif look over the above, rtl8169_rx_interrupt
is not called in noirqdebug case, and handle_edge_irq gets called
from within handle_edge_irq ?

Anwyay, not sure if this is useful, so if there is anything better
I could do, just push me in the right direction.


  parent reply	other threads:[~2009-07-26 18:44 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-07-26  0:31 r8169 (+others ?) and note_interrupt performance hit on 2.6.30.x Michal Soltys
2009-07-26  9:18 ` Francois Romieu
2009-07-26 10:50   ` Michal Soltys
2009-07-26 18:43   ` Michal Soltys [this message]
2009-07-27 21:52     ` Jarek Poplawski
2009-08-05 18:54       ` Michal Soltys

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4A6CA3EF.7080909@ziu.info \
    --to=soltys@ziu.info \
    --cc=netdev@vger.kernel.org \
    --cc=romieu@fr.zoreil.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.