Author: trasz
Date: Mon Sep 14 09:44:24 2020
New Revision: 365710
URL: https://svnweb.freebsd.org/changeset/base/365710

Log:
  Move racct/rctl throttling from userret() to ast().  There's no reason
  for it to sit in the syscall fast path.
  
  Reviewed by:  kib
  MFC after:    2 weeks
  Sponsored by: DARPA
  Differential Revision:        https://reviews.freebsd.org/D26368

Modified:
  head/sys/kern/kern_racct.c
  head/sys/kern/subr_trap.c

Modified: head/sys/kern/kern_racct.c
==============================================================================
--- head/sys/kern/kern_racct.c  Mon Sep 14 08:59:16 2020        (r365709)
+++ head/sys/kern/kern_racct.c  Mon Sep 14 09:44:24 2020        (r365710)
@@ -1146,6 +1146,8 @@ racct_proc_throttle(struct proc *p, int timeout)
 
        FOREACH_THREAD_IN_PROC(p, td) {
                thread_lock(td);
+               td->td_flags |= TDF_ASTPENDING;
+
                switch (td->td_state) {
                case TDS_RUNQ:
                        /*

Modified: head/sys/kern/subr_trap.c
==============================================================================
--- head/sys/kern/subr_trap.c   Mon Sep 14 08:59:16 2020        (r365709)
+++ head/sys/kern/subr_trap.c   Mon Sep 14 09:44:24 2020        (r365710)
@@ -206,10 +206,6 @@ userret(struct thread *td, struct trapframe *frame)
            __func__, td, p->p_pid, td->td_name, curvnet,
            (td->td_vnet_lpush != NULL) ? td->td_vnet_lpush : "N/A"));
 #endif
-#ifdef RACCT
-       if (__predict_false(racct_enable && p->p_throttled != 0))
-               racct_proc_throttled(p);
-#endif
 }
 
 /*
@@ -361,6 +357,11 @@ ast(struct trapframe *framep)
                td->td_pflags &= ~TDP_OLDMASK;
                kern_sigprocmask(td, SIG_SETMASK, &td->td_oldsigmask, NULL, 0);
        }
+
+#ifdef RACCT
+       if (__predict_false(racct_enable && p->p_throttled != 0))
+               racct_proc_throttled(p);
+#endif
 
        userret(td, framep);
 }
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to