Print this page
8493 kmem_move taskq appears to be inducing significant system latency
Reviewed by: Robert Mustacchi <rm@joyent.com>
Reviewed by: Dan McDonald <danmcd@joyent.com>


 285  * The magazine lists used in the depot.
 286  */
 287 typedef struct kmem_maglist {
 288         kmem_magazine_t *ml_list;       /* magazine list */
 289         long            ml_total;       /* number of magazines */
 290         long            ml_min;         /* min since last update */
 291         long            ml_reaplimit;   /* max reapable magazines */
 292         uint64_t        ml_alloc;       /* allocations from this list */
 293 } kmem_maglist_t;
 294 
 295 typedef struct kmem_defrag {
 296         /*
 297          * Statistics
 298          */
 299         uint64_t        kmd_callbacks;          /* move callbacks */
 300         uint64_t        kmd_yes;                /* KMEM_CBRC_YES responses */
 301         uint64_t        kmd_no;                 /* NO responses */
 302         uint64_t        kmd_later;              /* LATER responses */
 303         uint64_t        kmd_dont_need;          /* DONT_NEED responses */
 304         uint64_t        kmd_dont_know;          /* DONT_KNOW responses */
 305         uint64_t        kmd_hunt_found;         /* DONT_KNOW: # found in mag */
 306         uint64_t        kmd_slabs_freed;        /* slabs freed by moves */
 307         uint64_t        kmd_defrags;            /* kmem_cache_defrag() */
 308         uint64_t        kmd_scans;              /* kmem_cache_scan() */
 309 
 310         /*
 311          * Consolidator fields
 312          */
 313         avl_tree_t      kmd_moves_pending;      /* buffer moves pending */
 314         list_t          kmd_deadlist;           /* deferred slab frees */
 315         size_t          kmd_deadcount;          /* # of slabs in kmd_deadlist */
 316         uint8_t         kmd_reclaim_numer;      /* slab usage threshold */
 317         uint8_t         kmd_pad1;               /* compiler padding */
 318         uint16_t        kmd_consolidate;        /* triggers consolidator */
 319         uint32_t        kmd_pad2;               /* compiler padding */
 320         size_t          kmd_slabs_sought;       /* reclaimable slabs sought */
 321         size_t          kmd_slabs_found;        /* reclaimable slabs found */
 322         size_t          kmd_tries;              /* nth scan interval counter */
 323         /*
 324          * Fields used to ASSERT that the client does not kmem_cache_free()
 325          * objects passed to the move callback.




 285  * The magazine lists used in the depot.
 286  */
 287 typedef struct kmem_maglist {
 288         kmem_magazine_t *ml_list;       /* magazine list */
 289         long            ml_total;       /* number of magazines */
 290         long            ml_min;         /* min since last update */
 291         long            ml_reaplimit;   /* max reapable magazines */
 292         uint64_t        ml_alloc;       /* allocations from this list */
 293 } kmem_maglist_t;
 294 
 295 typedef struct kmem_defrag {
 296         /*
 297          * Statistics
 298          */
 299         uint64_t        kmd_callbacks;          /* move callbacks */
 300         uint64_t        kmd_yes;                /* KMEM_CBRC_YES responses */
 301         uint64_t        kmd_no;                 /* NO responses */
 302         uint64_t        kmd_later;              /* LATER responses */
 303         uint64_t        kmd_dont_need;          /* DONT_NEED responses */
 304         uint64_t        kmd_dont_know;          /* DONT_KNOW responses */

 305         uint64_t        kmd_slabs_freed;        /* slabs freed by moves */
 306         uint64_t        kmd_defrags;            /* kmem_cache_defrag() */
 307         uint64_t        kmd_scans;              /* kmem_cache_scan() */
 308 
 309         /*
 310          * Consolidator fields
 311          */
 312         avl_tree_t      kmd_moves_pending;      /* buffer moves pending */
 313         list_t          kmd_deadlist;           /* deferred slab frees */
 314         size_t          kmd_deadcount;          /* # of slabs in kmd_deadlist */
 315         uint8_t         kmd_reclaim_numer;      /* slab usage threshold */
 316         uint8_t         kmd_pad1;               /* compiler padding */
 317         uint16_t        kmd_consolidate;        /* triggers consolidator */
 318         uint32_t        kmd_pad2;               /* compiler padding */
 319         size_t          kmd_slabs_sought;       /* reclaimable slabs sought */
 320         size_t          kmd_slabs_found;        /* reclaimable slabs found */
 321         size_t          kmd_tries;              /* nth scan interval counter */
 322         /*
 323          * Fields used to ASSERT that the client does not kmem_cache_free()
 324          * objects passed to the move callback.