Bug 164130 - [netisr] broken netisr initialization
Summary: [netisr] broken netisr initialization
Status: Open
Alias: None
Product: Base System
Classification: Unclassified
Component: kern (show other bugs)
Version: 10.0-CURRENT
Hardware: Any Any
: Normal Affects Only Me
Assignee: freebsd-bugs (Nobody)
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-01-14 21:10 UTC by kes-kes
Modified: 2017-12-31 22:27 UTC (History)
0 users

See Also:


Attachments
file.diff (576 bytes, patch)
2012-01-14 21:10 UTC, kes-kes
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description kes-kes 2012-01-14 21:10:15 UTC
netisr has been broken in r230059

and after booting there are conflicting values in sysctl net.isr

Fix: you must call netisr_dispatch_policy_compat() in any case dispite on net.isr.dispatch is set or not in /boot/loader.conf

+       netisr_dispatch_policy_compat();
+
        netisr_start_swi(curcpu, pcpu_find(curcpu));
 }
 SYSINIT(netisr_init, SI_SUB_SOFTINTR, SI_ORDER_FIRST, netisr_init, NULL);

or send way: you must setup default values for direct and direct_force to 1 because of default dispatcher is 'direct'


-static int     netisr_direct;
+static int     netisr_direct = 1;
 SYSCTL_INT(_net_isr, OID_AUTO, direct, CTLFLAG_RD, &netisr_direct, 0,
     "compat: enable direct dispatch");

But I think first way is more right way

*Sponsored by ISP FreeLine, Eugen Konkov--DCQRexvSRjr9YooPdq0E1QMivixR2WYd78Cer3ktH4f9P1AM
Content-Type: text/plain; name="file.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="file.diff"

Index: src/sys/net/netisr.c
===================================================================
--- src/sys/net/netisr.c        (revision 230107)
+++ src/sys/net/netisr.c        (working copy)
@@ -1201,13 +1201,14 @@
                        error = EINVAL;
                if (error == 0) {
                        netisr_dispatch_policy = dispatch_policy;
-                       netisr_dispatch_policy_compat();
                } else
                        printf(
                            "%s: invalid dispatch policy %s, using default\n",
                            __func__, tmp);
        }
How-To-Repeat: just run:
#sysctl net.isr
# sysctl net.isr
net.isr.direct: 0
net.isr.direct_force: 0
net.isr.dispatch: direct

for net.isr.dispatch=direct is conflicting with values direct=0 and direct_force=0
Comment 1 Bjoern A. Zeeb freebsd_committer freebsd_triage 2012-01-14 21:26:00 UTC
Responsible Changed
From-To: freebsd-bugs->rwatson

This is in addition to emails on current@ . I think it's yours.
Comment 2 Mark Linimon 2012-01-17 22:32:52 UTC
----- Forwarded message from "Robert N. M. Watson" <rwatson@FreeBSD.org> -----

Thanks for your (multiple) e-mails. I will catch up on the remainder of
the thread tomorrow, having returned from travel today, but wanted to
point you at "netstat -Q", which will allow you to more directly test
what dispatch policy is being implemented. It allows you to directly
inspect counters for directly dispatched vs. deferred packets with each
netisr thread. Relying on sampled CPU use can be quite misleading, as
dispatch policies can have counter-intuitive effects on performance and
CPU use; directly monitoring the cause, rather than the effect, would
be more reliable for debugging purposes.

Robert

> 
>  PID USERNAME   PRI NICE   SIZE    RES STATE   C   TIME   WCPU COMMAND
>   11 root       155 ki31     0K    32K RUN     1  25:02 87.16% idle{idle: cpu1}
>   11 root       155 ki31     0K    32K CPU0    0  25:08 86.72% idle{idle: cpu0}
>   11 root       155 ki31     0K    32K CPU2    2  24:23 83.50% idle{idle: cpu2}
>   11 root       155 ki31     0K    32K CPU3    3  24:47 81.93% idle{idle: cpu3}
>   12 root       -92    -     0K   248K WAIT    3   0:59  6.54% intr{irq266: re0}
> 3375 root        40    0 15468K  6504K select  2   1:03  4.98% snmpd
>   12 root       -72    -     0K   248K WAIT    3   0:28  3.12% intr{swi1: netisr 1}
>   12 root       -60    -     0K   248K WAIT    0   0:34  1.71% intr{swi4: clock}
>   12 root       -72    -     0K   248K WAIT    3   0:27  1.71% intr{swi1: netisr 3}
>   12 root       -72    -     0K   248K WAIT    1   0:20  1.37% intr{swi1: netisr 0}
>    0 root       -92    0     0K   152K -       2   0:30  0.98% kernel{dummynet}
>   12 root       -72    -     0K   248K WAIT    3   0:13  0.88% intr{swi1: netisr 2}
>   13 root       -92    -     0K    32K sleep   1   0:11  0.24% ng_queue{ng_queue3}
>   13 root       -92    -     0K    32K sleep   1   0:11  0.10% ng_queue{ng_queue0}
>   13 root       -92    -     0K    32K sleep   1   0:11  0.10% ng_queue{ng_queue1}
> 
> 
> 2. There is no cpu load differences between dispatch methods. I have
> tested two: direct and deferred (see on picture)
> 
> http://piccy.info/view3/2482121/cc6464fbe959fd65ecb5a8b94a23ec38/orig/
> 
> 'deferred' method works same as 'direct' method!
> 
> 

_______________________________________________
freebsd-bugs@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "freebsd-bugs-unsubscribe@freebsd.org"


----- End forwarded message -----
Comment 3 Hiren Panchasara freebsd_committer freebsd_triage 2014-04-04 18:26:53 UTC
I believe the code around reported problem has been reworked and the
issue no longer exists.
Comment 4 Eitan Adler freebsd_committer freebsd_triage 2017-12-31 07:59:08 UTC
For bugs matching the following criteria:

Status: In Progress Changed: (is less than) 2014-06-01

Reset to default assignee and clear in-progress tags.

Mail being skipped