Print this page
patch fix-compile3
patch remove-load-flag
patch remove-on-swapq-flag


 285         { "inv_swtch",          KSTAT_DATA_UINT64 },
 286         { "nthreads",           KSTAT_DATA_UINT64 },
 287         { "cpumigrate",         KSTAT_DATA_UINT64 },
 288         { "xcalls",             KSTAT_DATA_UINT64 },
 289         { "mutex_adenters",     KSTAT_DATA_UINT64 },
 290         { "rw_rdfails",         KSTAT_DATA_UINT64 },
 291         { "rw_wrfails",         KSTAT_DATA_UINT64 },
 292         { "modload",            KSTAT_DATA_UINT64 },
 293         { "modunload",          KSTAT_DATA_UINT64 },
 294         { "bawrite",            KSTAT_DATA_UINT64 },
 295         { "iowait",             KSTAT_DATA_UINT64 },
 296 };
 297 
 298 static struct cpu_vm_stats_ks_data {
 299         kstat_named_t pgrec;
 300         kstat_named_t pgfrec;
 301         kstat_named_t pgin;
 302         kstat_named_t pgpgin;
 303         kstat_named_t pgout;
 304         kstat_named_t pgpgout;
 305         kstat_named_t swapin;
 306         kstat_named_t pgswapin;
 307         kstat_named_t swapout;
 308         kstat_named_t pgswapout;
 309         kstat_named_t zfod;
 310         kstat_named_t dfree;
 311         kstat_named_t scan;
 312         kstat_named_t rev;
 313         kstat_named_t hat_fault;
 314         kstat_named_t as_fault;
 315         kstat_named_t maj_fault;
 316         kstat_named_t cow_fault;
 317         kstat_named_t prot_fault;
 318         kstat_named_t softlock;
 319         kstat_named_t kernel_asflt;
 320         kstat_named_t pgrrun;
 321         kstat_named_t execpgin;
 322         kstat_named_t execpgout;
 323         kstat_named_t execfree;
 324         kstat_named_t anonpgin;
 325         kstat_named_t anonpgout;
 326         kstat_named_t anonfree;
 327         kstat_named_t fspgin;
 328         kstat_named_t fspgout;
 329         kstat_named_t fsfree;
 330 } cpu_vm_stats_ks_data_template = {
 331         { "pgrec",              KSTAT_DATA_UINT64 },
 332         { "pgfrec",             KSTAT_DATA_UINT64 },
 333         { "pgin",               KSTAT_DATA_UINT64 },
 334         { "pgpgin",             KSTAT_DATA_UINT64 },
 335         { "pgout",              KSTAT_DATA_UINT64 },
 336         { "pgpgout",            KSTAT_DATA_UINT64 },
 337         { "swapin",             KSTAT_DATA_UINT64 },
 338         { "pgswapin",           KSTAT_DATA_UINT64 },
 339         { "swapout",            KSTAT_DATA_UINT64 },
 340         { "pgswapout",          KSTAT_DATA_UINT64 },
 341         { "zfod",               KSTAT_DATA_UINT64 },
 342         { "dfree",              KSTAT_DATA_UINT64 },
 343         { "scan",               KSTAT_DATA_UINT64 },
 344         { "rev",                KSTAT_DATA_UINT64 },
 345         { "hat_fault",          KSTAT_DATA_UINT64 },
 346         { "as_fault",           KSTAT_DATA_UINT64 },
 347         { "maj_fault",          KSTAT_DATA_UINT64 },
 348         { "cow_fault",          KSTAT_DATA_UINT64 },
 349         { "prot_fault",         KSTAT_DATA_UINT64 },
 350         { "softlock",           KSTAT_DATA_UINT64 },
 351         { "kernel_asflt",       KSTAT_DATA_UINT64 },
 352         { "pgrrun",             KSTAT_DATA_UINT64 },
 353         { "execpgin",           KSTAT_DATA_UINT64 },
 354         { "execpgout",          KSTAT_DATA_UINT64 },
 355         { "execfree",           KSTAT_DATA_UINT64 },
 356         { "anonpgin",           KSTAT_DATA_UINT64 },
 357         { "anonpgout",          KSTAT_DATA_UINT64 },
 358         { "anonfree",           KSTAT_DATA_UINT64 },
 359         { "fspgin",             KSTAT_DATA_UINT64 },
 360         { "fspgout",            KSTAT_DATA_UINT64 },


2664                          * on the right queue, but since this isn't
2665                          * a performance-critical operation it doesn't
2666                          * seem worth the extra code and complexity.
2667                          *
2668                          * If the thread is weakbound to the cpu then it will
2669                          * resist the new binding request until the weak
2670                          * binding drops.  The cpu_surrender or requeueing
2671                          * below could be skipped in such cases (since it
2672                          * will have no effect), but that would require
2673                          * thread_allowmigrate to acquire thread_lock so
2674                          * we'll take the very occasional hit here instead.
2675                          */
2676                         if (tp->t_state == TS_ONPROC) {
2677                                 cpu_surrender(tp);
2678                         } else if (tp->t_state == TS_RUN) {
2679                                 cpu_t *ocp = tp->t_cpu;
2680 
2681                                 (void) dispdeq(tp);
2682                                 setbackdq(tp);
2683                                 /*
2684                                  * Either on the bound CPU's disp queue now,
2685                                  * or swapped out or on the swap queue.
2686                                  */
2687                                 ASSERT(tp->t_disp_queue == cp->cpu_disp ||
2688                                     tp->t_weakbound_cpu == ocp ||
2689                                     (tp->t_schedflag & (TS_LOAD | TS_ON_SWAPQ))
2690                                     != TS_LOAD);
2691                         }
2692                 }
2693         }
2694 
2695         /*
2696          * Our binding has changed; set TP_CHANGEBIND.
2697          */
2698         tp->t_proc_flag |= TP_CHANGEBIND;
2699         aston(tp);
2700 
2701         thread_unlock(tp);
2702 
2703         return (0);
2704 }
2705 
2706 #if CPUSET_WORDS > 1
2707 
2708 /*
2709  * Functions for implementing cpuset operations when a cpuset is more
2710  * than one word.  On platforms where a cpuset is a single word these


3273 cpu_vm_stats_ks_update(kstat_t *ksp, int rw)
3274 {
3275         cpu_t *cp = (cpu_t *)ksp->ks_private;
3276         struct cpu_vm_stats_ks_data *cvskd;
3277         cpu_vm_stats_t *cvs;
3278 
3279         if (rw == KSTAT_WRITE)
3280                 return (EACCES);
3281 
3282         cvs = &cp->cpu_stats.vm;
3283         cvskd = ksp->ks_data;
3284 
3285         bcopy(&cpu_vm_stats_ks_data_template, ksp->ks_data,
3286             sizeof (cpu_vm_stats_ks_data_template));
3287         cvskd->pgrec.value.ui64 = cvs->pgrec;
3288         cvskd->pgfrec.value.ui64 = cvs->pgfrec;
3289         cvskd->pgin.value.ui64 = cvs->pgin;
3290         cvskd->pgpgin.value.ui64 = cvs->pgpgin;
3291         cvskd->pgout.value.ui64 = cvs->pgout;
3292         cvskd->pgpgout.value.ui64 = cvs->pgpgout;
3293         cvskd->swapin.value.ui64 = cvs->swapin;
3294         cvskd->pgswapin.value.ui64 = cvs->pgswapin;
3295         cvskd->swapout.value.ui64 = cvs->swapout;
3296         cvskd->pgswapout.value.ui64 = cvs->pgswapout;
3297         cvskd->zfod.value.ui64 = cvs->zfod;
3298         cvskd->dfree.value.ui64 = cvs->dfree;
3299         cvskd->scan.value.ui64 = cvs->scan;
3300         cvskd->rev.value.ui64 = cvs->rev;
3301         cvskd->hat_fault.value.ui64 = cvs->hat_fault;
3302         cvskd->as_fault.value.ui64 = cvs->as_fault;
3303         cvskd->maj_fault.value.ui64 = cvs->maj_fault;
3304         cvskd->cow_fault.value.ui64 = cvs->cow_fault;
3305         cvskd->prot_fault.value.ui64 = cvs->prot_fault;
3306         cvskd->softlock.value.ui64 = cvs->softlock;
3307         cvskd->kernel_asflt.value.ui64 = cvs->kernel_asflt;
3308         cvskd->pgrrun.value.ui64 = cvs->pgrrun;
3309         cvskd->execpgin.value.ui64 = cvs->execpgin;
3310         cvskd->execpgout.value.ui64 = cvs->execpgout;
3311         cvskd->execfree.value.ui64 = cvs->execfree;
3312         cvskd->anonpgin.value.ui64 = cvs->anonpgin;
3313         cvskd->anonpgout.value.ui64 = cvs->anonpgout;
3314         cvskd->anonfree.value.ui64 = cvs->anonfree;
3315         cvskd->fspgin.value.ui64 = cvs->fspgin;
3316         cvskd->fspgout.value.ui64 = cvs->fspgout;


3403         cso->cpu_sysinfo.modload     = CPU_STATS(cp, sys.modload);
3404         cso->cpu_sysinfo.modunload   = CPU_STATS(cp, sys.modunload);
3405         cso->cpu_sysinfo.bawrite     = CPU_STATS(cp, sys.bawrite);
3406         cso->cpu_sysinfo.rw_enters   = 0;
3407         cso->cpu_sysinfo.win_uo_cnt  = 0;
3408         cso->cpu_sysinfo.win_uu_cnt  = 0;
3409         cso->cpu_sysinfo.win_so_cnt  = 0;
3410         cso->cpu_sysinfo.win_su_cnt  = 0;
3411         cso->cpu_sysinfo.win_suo_cnt = 0;
3412 
3413         cso->cpu_syswait.iowait              = CPU_STATS(cp, sys.iowait);
3414         cso->cpu_syswait.swap                = 0;
3415         cso->cpu_syswait.physio              = 0;
3416 
3417         cso->cpu_vminfo.pgrec                = CPU_STATS(cp, vm.pgrec);
3418         cso->cpu_vminfo.pgfrec               = CPU_STATS(cp, vm.pgfrec);
3419         cso->cpu_vminfo.pgin         = CPU_STATS(cp, vm.pgin);
3420         cso->cpu_vminfo.pgpgin               = CPU_STATS(cp, vm.pgpgin);
3421         cso->cpu_vminfo.pgout                = CPU_STATS(cp, vm.pgout);
3422         cso->cpu_vminfo.pgpgout              = CPU_STATS(cp, vm.pgpgout);
3423         cso->cpu_vminfo.swapin               = CPU_STATS(cp, vm.swapin);
3424         cso->cpu_vminfo.pgswapin     = CPU_STATS(cp, vm.pgswapin);
3425         cso->cpu_vminfo.swapout              = CPU_STATS(cp, vm.swapout);
3426         cso->cpu_vminfo.pgswapout    = CPU_STATS(cp, vm.pgswapout);
3427         cso->cpu_vminfo.zfod         = CPU_STATS(cp, vm.zfod);
3428         cso->cpu_vminfo.dfree                = CPU_STATS(cp, vm.dfree);
3429         cso->cpu_vminfo.scan         = CPU_STATS(cp, vm.scan);
3430         cso->cpu_vminfo.rev          = CPU_STATS(cp, vm.rev);
3431         cso->cpu_vminfo.hat_fault    = CPU_STATS(cp, vm.hat_fault);
3432         cso->cpu_vminfo.as_fault     = CPU_STATS(cp, vm.as_fault);
3433         cso->cpu_vminfo.maj_fault    = CPU_STATS(cp, vm.maj_fault);
3434         cso->cpu_vminfo.cow_fault    = CPU_STATS(cp, vm.cow_fault);
3435         cso->cpu_vminfo.prot_fault   = CPU_STATS(cp, vm.prot_fault);
3436         cso->cpu_vminfo.softlock     = CPU_STATS(cp, vm.softlock);
3437         cso->cpu_vminfo.kernel_asflt = CPU_STATS(cp, vm.kernel_asflt);
3438         cso->cpu_vminfo.pgrrun               = CPU_STATS(cp, vm.pgrrun);
3439         cso->cpu_vminfo.execpgin     = CPU_STATS(cp, vm.execpgin);
3440         cso->cpu_vminfo.execpgout    = CPU_STATS(cp, vm.execpgout);
3441         cso->cpu_vminfo.execfree     = CPU_STATS(cp, vm.execfree);
3442         cso->cpu_vminfo.anonpgin     = CPU_STATS(cp, vm.anonpgin);
3443         cso->cpu_vminfo.anonpgout    = CPU_STATS(cp, vm.anonpgout);
3444         cso->cpu_vminfo.anonfree     = CPU_STATS(cp, vm.anonfree);
3445         cso->cpu_vminfo.fspgin               = CPU_STATS(cp, vm.fspgin);
3446         cso->cpu_vminfo.fspgout              = CPU_STATS(cp, vm.fspgout);


 285         { "inv_swtch",          KSTAT_DATA_UINT64 },
 286         { "nthreads",           KSTAT_DATA_UINT64 },
 287         { "cpumigrate",         KSTAT_DATA_UINT64 },
 288         { "xcalls",             KSTAT_DATA_UINT64 },
 289         { "mutex_adenters",     KSTAT_DATA_UINT64 },
 290         { "rw_rdfails",         KSTAT_DATA_UINT64 },
 291         { "rw_wrfails",         KSTAT_DATA_UINT64 },
 292         { "modload",            KSTAT_DATA_UINT64 },
 293         { "modunload",          KSTAT_DATA_UINT64 },
 294         { "bawrite",            KSTAT_DATA_UINT64 },
 295         { "iowait",             KSTAT_DATA_UINT64 },
 296 };
 297 
 298 static struct cpu_vm_stats_ks_data {
 299         kstat_named_t pgrec;
 300         kstat_named_t pgfrec;
 301         kstat_named_t pgin;
 302         kstat_named_t pgpgin;
 303         kstat_named_t pgout;
 304         kstat_named_t pgpgout;




 305         kstat_named_t zfod;
 306         kstat_named_t dfree;
 307         kstat_named_t scan;
 308         kstat_named_t rev;
 309         kstat_named_t hat_fault;
 310         kstat_named_t as_fault;
 311         kstat_named_t maj_fault;
 312         kstat_named_t cow_fault;
 313         kstat_named_t prot_fault;
 314         kstat_named_t softlock;
 315         kstat_named_t kernel_asflt;
 316         kstat_named_t pgrrun;
 317         kstat_named_t execpgin;
 318         kstat_named_t execpgout;
 319         kstat_named_t execfree;
 320         kstat_named_t anonpgin;
 321         kstat_named_t anonpgout;
 322         kstat_named_t anonfree;
 323         kstat_named_t fspgin;
 324         kstat_named_t fspgout;
 325         kstat_named_t fsfree;
 326 } cpu_vm_stats_ks_data_template = {
 327         { "pgrec",              KSTAT_DATA_UINT64 },
 328         { "pgfrec",             KSTAT_DATA_UINT64 },
 329         { "pgin",               KSTAT_DATA_UINT64 },
 330         { "pgpgin",             KSTAT_DATA_UINT64 },
 331         { "pgout",              KSTAT_DATA_UINT64 },
 332         { "pgpgout",            KSTAT_DATA_UINT64 },




 333         { "zfod",               KSTAT_DATA_UINT64 },
 334         { "dfree",              KSTAT_DATA_UINT64 },
 335         { "scan",               KSTAT_DATA_UINT64 },
 336         { "rev",                KSTAT_DATA_UINT64 },
 337         { "hat_fault",          KSTAT_DATA_UINT64 },
 338         { "as_fault",           KSTAT_DATA_UINT64 },
 339         { "maj_fault",          KSTAT_DATA_UINT64 },
 340         { "cow_fault",          KSTAT_DATA_UINT64 },
 341         { "prot_fault",         KSTAT_DATA_UINT64 },
 342         { "softlock",           KSTAT_DATA_UINT64 },
 343         { "kernel_asflt",       KSTAT_DATA_UINT64 },
 344         { "pgrrun",             KSTAT_DATA_UINT64 },
 345         { "execpgin",           KSTAT_DATA_UINT64 },
 346         { "execpgout",          KSTAT_DATA_UINT64 },
 347         { "execfree",           KSTAT_DATA_UINT64 },
 348         { "anonpgin",           KSTAT_DATA_UINT64 },
 349         { "anonpgout",          KSTAT_DATA_UINT64 },
 350         { "anonfree",           KSTAT_DATA_UINT64 },
 351         { "fspgin",             KSTAT_DATA_UINT64 },
 352         { "fspgout",            KSTAT_DATA_UINT64 },


2656                          * on the right queue, but since this isn't
2657                          * a performance-critical operation it doesn't
2658                          * seem worth the extra code and complexity.
2659                          *
2660                          * If the thread is weakbound to the cpu then it will
2661                          * resist the new binding request until the weak
2662                          * binding drops.  The cpu_surrender or requeueing
2663                          * below could be skipped in such cases (since it
2664                          * will have no effect), but that would require
2665                          * thread_allowmigrate to acquire thread_lock so
2666                          * we'll take the very occasional hit here instead.
2667                          */
2668                         if (tp->t_state == TS_ONPROC) {
2669                                 cpu_surrender(tp);
2670                         } else if (tp->t_state == TS_RUN) {
2671                                 cpu_t *ocp = tp->t_cpu;
2672 
2673                                 (void) dispdeq(tp);
2674                                 setbackdq(tp);
2675                                 /*
2676                                  * On the bound CPU's disp queue now.

2677                                  */
2678                                 ASSERT(tp->t_disp_queue == cp->cpu_disp ||
2679                                     tp->t_weakbound_cpu == ocp);


2680                         }
2681                 }
2682         }
2683 
2684         /*
2685          * Our binding has changed; set TP_CHANGEBIND.
2686          */
2687         tp->t_proc_flag |= TP_CHANGEBIND;
2688         aston(tp);
2689 
2690         thread_unlock(tp);
2691 
2692         return (0);
2693 }
2694 
2695 #if CPUSET_WORDS > 1
2696 
2697 /*
2698  * Functions for implementing cpuset operations when a cpuset is more
2699  * than one word.  On platforms where a cpuset is a single word these


3262 cpu_vm_stats_ks_update(kstat_t *ksp, int rw)
3263 {
3264         cpu_t *cp = (cpu_t *)ksp->ks_private;
3265         struct cpu_vm_stats_ks_data *cvskd;
3266         cpu_vm_stats_t *cvs;
3267 
3268         if (rw == KSTAT_WRITE)
3269                 return (EACCES);
3270 
3271         cvs = &cp->cpu_stats.vm;
3272         cvskd = ksp->ks_data;
3273 
3274         bcopy(&cpu_vm_stats_ks_data_template, ksp->ks_data,
3275             sizeof (cpu_vm_stats_ks_data_template));
3276         cvskd->pgrec.value.ui64 = cvs->pgrec;
3277         cvskd->pgfrec.value.ui64 = cvs->pgfrec;
3278         cvskd->pgin.value.ui64 = cvs->pgin;
3279         cvskd->pgpgin.value.ui64 = cvs->pgpgin;
3280         cvskd->pgout.value.ui64 = cvs->pgout;
3281         cvskd->pgpgout.value.ui64 = cvs->pgpgout;




3282         cvskd->zfod.value.ui64 = cvs->zfod;
3283         cvskd->dfree.value.ui64 = cvs->dfree;
3284         cvskd->scan.value.ui64 = cvs->scan;
3285         cvskd->rev.value.ui64 = cvs->rev;
3286         cvskd->hat_fault.value.ui64 = cvs->hat_fault;
3287         cvskd->as_fault.value.ui64 = cvs->as_fault;
3288         cvskd->maj_fault.value.ui64 = cvs->maj_fault;
3289         cvskd->cow_fault.value.ui64 = cvs->cow_fault;
3290         cvskd->prot_fault.value.ui64 = cvs->prot_fault;
3291         cvskd->softlock.value.ui64 = cvs->softlock;
3292         cvskd->kernel_asflt.value.ui64 = cvs->kernel_asflt;
3293         cvskd->pgrrun.value.ui64 = cvs->pgrrun;
3294         cvskd->execpgin.value.ui64 = cvs->execpgin;
3295         cvskd->execpgout.value.ui64 = cvs->execpgout;
3296         cvskd->execfree.value.ui64 = cvs->execfree;
3297         cvskd->anonpgin.value.ui64 = cvs->anonpgin;
3298         cvskd->anonpgout.value.ui64 = cvs->anonpgout;
3299         cvskd->anonfree.value.ui64 = cvs->anonfree;
3300         cvskd->fspgin.value.ui64 = cvs->fspgin;
3301         cvskd->fspgout.value.ui64 = cvs->fspgout;


3388         cso->cpu_sysinfo.modload     = CPU_STATS(cp, sys.modload);
3389         cso->cpu_sysinfo.modunload   = CPU_STATS(cp, sys.modunload);
3390         cso->cpu_sysinfo.bawrite     = CPU_STATS(cp, sys.bawrite);
3391         cso->cpu_sysinfo.rw_enters   = 0;
3392         cso->cpu_sysinfo.win_uo_cnt  = 0;
3393         cso->cpu_sysinfo.win_uu_cnt  = 0;
3394         cso->cpu_sysinfo.win_so_cnt  = 0;
3395         cso->cpu_sysinfo.win_su_cnt  = 0;
3396         cso->cpu_sysinfo.win_suo_cnt = 0;
3397 
3398         cso->cpu_syswait.iowait              = CPU_STATS(cp, sys.iowait);
3399         cso->cpu_syswait.swap                = 0;
3400         cso->cpu_syswait.physio              = 0;
3401 
3402         cso->cpu_vminfo.pgrec                = CPU_STATS(cp, vm.pgrec);
3403         cso->cpu_vminfo.pgfrec               = CPU_STATS(cp, vm.pgfrec);
3404         cso->cpu_vminfo.pgin         = CPU_STATS(cp, vm.pgin);
3405         cso->cpu_vminfo.pgpgin               = CPU_STATS(cp, vm.pgpgin);
3406         cso->cpu_vminfo.pgout                = CPU_STATS(cp, vm.pgout);
3407         cso->cpu_vminfo.pgpgout              = CPU_STATS(cp, vm.pgpgout);




3408         cso->cpu_vminfo.zfod         = CPU_STATS(cp, vm.zfod);
3409         cso->cpu_vminfo.dfree                = CPU_STATS(cp, vm.dfree);
3410         cso->cpu_vminfo.scan         = CPU_STATS(cp, vm.scan);
3411         cso->cpu_vminfo.rev          = CPU_STATS(cp, vm.rev);
3412         cso->cpu_vminfo.hat_fault    = CPU_STATS(cp, vm.hat_fault);
3413         cso->cpu_vminfo.as_fault     = CPU_STATS(cp, vm.as_fault);
3414         cso->cpu_vminfo.maj_fault    = CPU_STATS(cp, vm.maj_fault);
3415         cso->cpu_vminfo.cow_fault    = CPU_STATS(cp, vm.cow_fault);
3416         cso->cpu_vminfo.prot_fault   = CPU_STATS(cp, vm.prot_fault);
3417         cso->cpu_vminfo.softlock     = CPU_STATS(cp, vm.softlock);
3418         cso->cpu_vminfo.kernel_asflt = CPU_STATS(cp, vm.kernel_asflt);
3419         cso->cpu_vminfo.pgrrun               = CPU_STATS(cp, vm.pgrrun);
3420         cso->cpu_vminfo.execpgin     = CPU_STATS(cp, vm.execpgin);
3421         cso->cpu_vminfo.execpgout    = CPU_STATS(cp, vm.execpgout);
3422         cso->cpu_vminfo.execfree     = CPU_STATS(cp, vm.execfree);
3423         cso->cpu_vminfo.anonpgin     = CPU_STATS(cp, vm.anonpgin);
3424         cso->cpu_vminfo.anonpgout    = CPU_STATS(cp, vm.anonpgout);
3425         cso->cpu_vminfo.anonfree     = CPU_STATS(cp, vm.anonfree);
3426         cso->cpu_vminfo.fspgin               = CPU_STATS(cp, vm.fspgin);
3427         cso->cpu_vminfo.fspgout              = CPU_STATS(cp, vm.fspgout);