Remove MSGF_PRIORITY support. The flag testing and message queue selection
authorSepherosa Ziehau <sephe@dragonflybsd.org>
Sat, 22 Nov 2008 11:03:35 +0000 (11:03 +0000)
committerSepherosa Ziehau <sephe@dragonflybsd.org>
Sat, 22 Nov 2008 11:03:35 +0000 (11:03 +0000)
on the hot code path introduce noticeable performance regression during ip
forwarding (from 667Kpps to 655Kpps w/ 64bytes packet and fastforwarding
enabled on Phenom 9550).

sys/kern/lwkt_msgport.c
sys/net/bridge/if_bridge.c
sys/net/ipfw/ip_fw2.c
sys/netinet/if_ether.c
sys/netinet/tcp_syncache.c
sys/sys/msgport.h

index 8ebcc53..317e6e1 100644 (file)
@@ -34,7 +34,7 @@
  * NOTE! This file may be compiled for userland libraries as well as for
  * the kernel.
  *
- * $DragonFly: src/sys/kern/lwkt_msgport.c,v 1.52 2008/11/09 09:20:09 sephe Exp $
+ * $DragonFly: src/sys/kern/lwkt_msgport.c,v 1.53 2008/11/22 11:03:35 sephe Exp $
  */
 
 #include <sys/param.h>
@@ -225,7 +225,6 @@ _lwkt_initport(lwkt_port_t port,
 {
     bzero(port, sizeof(*port));
     TAILQ_INIT(&port->mp_msgq);
-    TAILQ_INIT(&port->mp_msgq_prio);
     port->mp_getport = gportfn;
     port->mp_putport = pportfn;
     port->mp_waitmsg =  wmsgfn;
@@ -362,16 +361,10 @@ static __inline
 void
 _lwkt_pullmsg(lwkt_port_t port, lwkt_msg_t msg)
 {
-    lwkt_msg_queue *queue;
-
     /*
      * normal case, remove and return the message.
      */
-    if (__predict_false(msg->ms_flags & MSGF_PRIORITY))
-       queue = &port->mp_msgq_prio;
-    else
-       queue = &port->mp_msgq;
-    TAILQ_REMOVE(queue, msg, ms_node);
+    TAILQ_REMOVE(&port->mp_msgq, msg, ms_node);
     msg->ms_flags &= ~MSGF_QUEUED;
 }
 
@@ -379,29 +372,14 @@ static __inline
 void
 _lwkt_pushmsg(lwkt_port_t port, lwkt_msg_t msg)
 {
-    lwkt_msg_queue *queue;
-
     msg->ms_flags |= MSGF_QUEUED;
-    if (__predict_false(msg->ms_flags & MSGF_PRIORITY))
-       queue = &port->mp_msgq_prio;
-    else
-       queue = &port->mp_msgq;
-    TAILQ_INSERT_TAIL(queue, msg, ms_node);
+    TAILQ_INSERT_TAIL(&port->mp_msgq, msg, ms_node);
 }
 
 static __inline
 lwkt_msg_t
 _lwkt_pollmsg(lwkt_port_t port)
 {
-    lwkt_msg_t msg;
-
-    msg = TAILQ_FIRST(&port->mp_msgq_prio);
-    if (__predict_false(msg != NULL))
-       return msg;
-
-    /*
-     * Priority queue has no message, fallback to non-priority queue.
-     */
     return TAILQ_FIRST(&port->mp_msgq);
 }
 
index 317018f..2b49e1f 100644 (file)
@@ -66,7 +66,7 @@
  * $OpenBSD: if_bridge.c,v 1.60 2001/06/15 03:38:33 itojun Exp $
  * $NetBSD: if_bridge.c,v 1.31 2005/06/01 19:45:34 jdc Exp $
  * $FreeBSD: src/sys/net/if_bridge.c,v 1.26 2005/10/13 23:05:55 thompsa Exp $
- * $DragonFly: src/sys/net/bridge/if_bridge.c,v 1.57 2008/11/22 09:54:28 sephe Exp $
+ * $DragonFly: src/sys/net/bridge/if_bridge.c,v 1.58 2008/11/22 11:03:35 sephe Exp $
  */
 
 /*
@@ -624,12 +624,12 @@ bridge_clone_create(struct if_clone *ifc, int unit)
 
        callout_init(&sc->sc_brcallout);
        netmsg_init(&sc->sc_brtimemsg, &netisr_adone_rport,
-                   MSGF_DROPABLE | MSGF_PRIORITY, bridge_timer_handler);
+                   MSGF_DROPABLE, bridge_timer_handler);
        sc->sc_brtimemsg.nm_lmsg.u.ms_resultp = sc;
 
        callout_init(&sc->sc_bstpcallout);
        netmsg_init(&sc->sc_bstptimemsg, &netisr_adone_rport,
-                   MSGF_DROPABLE | MSGF_PRIORITY, bstp_tick_handler);
+                   MSGF_DROPABLE, bstp_tick_handler);
        sc->sc_bstptimemsg.nm_lmsg.u.ms_resultp = sc;
 
        /* Initialize per-cpu member iface lists */
@@ -2643,7 +2643,7 @@ bridge_rtsaddr(struct bridge_softc *sc, const uint8_t *dst,
 
        ASSERT_NOT_SERIALIZED(sc->sc_ifp->if_serializer);
 
-       netmsg_init(&brmsg.br_nmsg, &curthread->td_msgport, MSGF_PRIORITY,
+       netmsg_init(&brmsg.br_nmsg, &curthread->td_msgport, 0,
                    bridge_rtinstall_handler);
        memcpy(brmsg.br_dst, dst, ETHER_ADDR_LEN);
        brmsg.br_dst_if = dst_if;
index 2551807..73de534 100644 (file)
@@ -23,7 +23,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/netinet/ip_fw2.c,v 1.6.2.12 2003/04/08 10:42:32 maxim Exp $
- * $DragonFly: src/sys/net/ipfw/ip_fw2.c,v 1.99 2008/11/11 12:59:11 sephe Exp $
+ * $DragonFly: src/sys/net/ipfw/ip_fw2.c,v 1.100 2008/11/22 11:03:35 sephe Exp $
  */
 
 /*
@@ -4446,8 +4446,7 @@ ipfw_init_dispatch(struct netmsg *nmsg)
 
        callout_init_mp(&ipfw_timeout_h);
        netmsg_init(&ipfw_timeout_netmsg, &netisr_adone_rport,
-                   MSGF_MPSAFE | MSGF_PRIORITY | MSGF_DROPABLE,
-                   ipfw_tick_dispatch);
+                   MSGF_MPSAFE | MSGF_DROPABLE, ipfw_tick_dispatch);
        lockinit(&dyn_lock, "ipfw_dyn", 0, 0);
 
        ip_fw_loaded = 1;
index 5fca734..f72e732 100644 (file)
@@ -64,7 +64,7 @@
  *
  *     @(#)if_ether.c  8.1 (Berkeley) 6/10/93
  * $FreeBSD: src/sys/netinet/if_ether.c,v 1.64.2.23 2003/04/11 07:23:15 fjoe Exp $
- * $DragonFly: src/sys/netinet/if_ether.c,v 1.58 2008/11/09 10:18:42 sephe Exp $
+ * $DragonFly: src/sys/netinet/if_ether.c,v 1.59 2008/11/22 11:03:35 sephe Exp $
  */
 
 /*
@@ -734,8 +734,7 @@ arp_update_oncpu(struct mbuf *m, in_addr_t saddr, boolean_t create,
 
                        pmsg = &m->m_hdr.mh_netmsg;
                        netmsg_init(&pmsg->nm_netmsg, &netisr_apanic_rport,
-                                   MSGF_PRIORITY | MSGF_MPSAFE,
-                                   arp_hold_output);
+                                   MSGF_MPSAFE, arp_hold_output);
                        pmsg->nm_packet = m;
 
                        /* Record necessary information */
index fa7582e..64e2d0f 100644 (file)
@@ -69,7 +69,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/netinet/tcp_syncache.c,v 1.5.2.14 2003/02/24 04:02:27 silby Exp $
- * $DragonFly: src/sys/netinet/tcp_syncache.c,v 1.34 2008/11/09 10:32:16 sephe Exp $
+ * $DragonFly: src/sys/netinet/tcp_syncache.c,v 1.35 2008/11/22 11:03:35 sephe Exp $
  */
 
 #include "opt_inet6.h"
@@ -336,7 +336,7 @@ syncache_init(void)
                        syncache_percpu->mrec[i].msg.nm_mrec =
                            &syncache_percpu->mrec[i];
                        netmsg_init(&syncache_percpu->mrec[i].msg.nm_netmsg,
-                                   &syncache_null_rport, MSGF_PRIORITY,
+                                   &syncache_null_rport, 0,
                                    syncache_timer_handler);
                }
        }
index a4de8aa..d2dc5f7 100644 (file)
@@ -3,7 +3,7 @@
  *
  *     Implements LWKT messages and ports.
  * 
- * $DragonFly: src/sys/sys/msgport.h,v 1.30 2008/11/09 09:20:09 sephe Exp $
+ * $DragonFly: src/sys/sys/msgport.h,v 1.31 2008/11/22 11:03:35 sephe Exp $
  */
 
 #ifndef _SYS_MSGPORT_H_
@@ -101,7 +101,6 @@ typedef struct lwkt_msg {
 #define MSGF_NORESCHED 0x0020          /* do not reschedule target lwkt */
 #define MSGF_DROPABLE  0x0040          /* message supports drop */
 #define MSGF_ABORTABLE 0x0080          /* message supports abort */
-#define MSGF_PRIORITY  0x0100          /* priority message */
 
 #define MSGF_USER0     0x00010000
 #define MSGF_USER1     0x00020000
@@ -148,7 +147,6 @@ MALLOC_DECLARE(M_LWKTMSG);
  */
 typedef struct lwkt_port {
     lwkt_msg_queue     mp_msgq;
-    lwkt_msg_queue     mp_msgq_prio;
     int                        mp_flags;
     union {
        struct spinlock spin;