Author: avg
Date: Mon Feb 27 17:18:07 2017
New Revision: 314348
URL: https://svnweb.freebsd.org/changeset/base/314348

Log:
  MFC r313730: try to fix RACCT_RSS accounting

Modified:
  stable/10/sys/kern/kern_racct.c
  stable/10/sys/vm/vm_pageout.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/kern/kern_racct.c
==============================================================================
--- stable/10/sys/kern/kern_racct.c     Mon Feb 27 17:18:05 2017        
(r314347)
+++ stable/10/sys/kern/kern_racct.c     Mon Feb 27 17:18:07 2017        
(r314348)
@@ -1008,10 +1008,13 @@ racct_proc_exit(struct proc *p)
        racct_set_locked(p, RACCT_CPU, runtime);
        racct_add_cred_locked(p->p_ucred, RACCT_PCTCPU, pct);
 
+       KASSERT(p->p_racct->r_resources[RACCT_RSS] == 0,
+           ("process reaped with %ju allocated for RSS\n",
+           p->p_racct->r_resources[RACCT_RSS]));
        for (i = 0; i <= RACCT_MAX; i++) {
                if (p->p_racct->r_resources[i] == 0)
                        continue;
-               if (!RACCT_IS_RECLAIMABLE(i))
+               if (!RACCT_IS_RECLAIMABLE(i))
                        continue;
                racct_set_locked(p, i, 0);
        }

Modified: stable/10/sys/vm/vm_pageout.c
==============================================================================
--- stable/10/sys/vm/vm_pageout.c       Mon Feb 27 17:18:05 2017        
(r314347)
+++ stable/10/sys/vm/vm_pageout.c       Mon Feb 27 17:18:07 2017        
(r314348)
@@ -1981,12 +1981,14 @@ again:
                        if (size >= limit) {
                                vm_pageout_map_deactivate_pages(
                                    &vm->vm_map, limit);
+                               size = vmspace_resident_count(vm);
                        }
 #ifdef RACCT
                        if (racct_enable) {
                                rsize = IDX_TO_OFF(size);
                                PROC_LOCK(p);
-                               racct_set(p, RACCT_RSS, rsize);
+                               if (p->p_state == PRS_NORMAL)
+                                       racct_set(p, RACCT_RSS, rsize);
                                ravailable = racct_get_available(p, RACCT_RSS);
                                PROC_UNLOCK(p);
                                if (rsize > ravailable) {
@@ -2012,7 +2014,8 @@ again:
                                        size = vmspace_resident_count(vm);
                                        rsize = IDX_TO_OFF(size);
                                        PROC_LOCK(p);
-                                       racct_set(p, RACCT_RSS, rsize);
+                                       if (p->p_state == PRS_NORMAL)
+                                               racct_set(p, RACCT_RSS, rsize);
                                        PROC_UNLOCK(p);
                                        if (rsize > ravailable)
                                                tryagain = 1;
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-stable-10
To unsubscribe, send any mail to "[email protected]"

Reply via email to