Lines Matching defs:zdom

694 	uma_zone_domain_t zdom;
697 zdom = ZDOM_GET(zone, domain);
699 if (ZDOM_OWNED(zdom))
701 ZDOM_LOCK(zdom);
705 return (zdom);
767 zone_domain_imax_set(uma_zone_domain_t zdom, int nitems)
771 old = zdom->uzd_imax;
775 } while (atomic_fcmpset_long(&zdom->uzd_imax, &old, nitems) == 0);
781 if (zdom->uzd_wss < old - zdom->uzd_bimin)
782 zdom->uzd_wss = old - zdom->uzd_bimin;
783 zdom->uzd_bimin = nitems;
791 zone_fetch_bucket(uma_zone_t zone, uma_zone_domain_t zdom, bool reclaim)
798 ZDOM_LOCK_ASSERT(zdom);
800 if ((bucket = STAILQ_FIRST(&zdom->uzd_buckets)) == NULL)
811 zdom->uzd_seq = STAILQ_NEXT(bucket, ub_link)->ub_seq;
813 STAILQ_REMOVE_HEAD(&zdom->uzd_buckets, ub_link);
815 KASSERT(zdom->uzd_nitems >= bucket->ub_cnt,
817 __func__, zdom->uzd_nitems, bucket->ub_cnt));
820 zdom->uzd_nitems -= bucket->ub_cnt;
827 cnt = lmin(zdom->uzd_bimin, bucket->ub_cnt);
828 atomic_subtract_long(&zdom->uzd_imax, cnt);
829 zdom->uzd_bimin -= cnt;
830 zdom->uzd_imin -= lmin(zdom->uzd_imin, bucket->ub_cnt);
831 if (zdom->uzd_limin >= bucket->ub_cnt) {
832 zdom->uzd_limin -= bucket->ub_cnt;
834 zdom->uzd_limin = 0;
835 zdom->uzd_timin = 0;
837 } else if (zdom->uzd_bimin > zdom->uzd_nitems) {
838 zdom->uzd_bimin = zdom->uzd_nitems;
839 if (zdom->uzd_imin > zdom->uzd_nitems)
840 zdom->uzd_imin = zdom->uzd_nitems;
843 ZDOM_UNLOCK(zdom);
861 uma_zone_domain_t zdom;
866 zdom = zone_domain_lock(zone, domain);
871 zdom->uzd_nitems += bucket->ub_cnt;
872 if (__predict_true(zdom->uzd_nitems < zone->uz_bucket_max)) {
874 zone_domain_imax_set(zdom, zdom->uzd_nitems);
880 atomic_add_long(&zdom->uzd_imax, bucket->ub_cnt);
881 zdom->uzd_imin += bucket->ub_cnt;
882 zdom->uzd_bimin += bucket->ub_cnt;
883 zdom->uzd_limin += bucket->ub_cnt;
885 if (STAILQ_EMPTY(&zdom->uzd_buckets))
886 zdom->uzd_seq = bucket->ub_seq;
893 STAILQ_INSERT_HEAD(&zdom->uzd_buckets, bucket, ub_link);
895 STAILQ_INSERT_TAIL(&zdom->uzd_buckets, bucket, ub_link);
896 ZDOM_UNLOCK(zdom);
899 zdom->uzd_nitems -= bucket->ub_cnt;
900 ZDOM_UNLOCK(zdom);
1050 uma_zone_domain_t zdom;
1057 zdom = ZDOM_GET(zone, domain);
1058 if (zdom->uzd_nitems == 0)
1062 (seq = atomic_load_32(&zdom->uzd_seq)) != SMR_SEQ_INVALID &&
1069 zdom = zone_domain_lock(zone, domain);
1070 if ((bucket = zone_fetch_bucket(zone, zdom, false)) != NULL)
1072 ZDOM_UNLOCK(zdom);
1123 zone_domain_update_wss(uma_zone_domain_t zdom)
1127 ZDOM_LOCK_ASSERT(zdom);
1128 MPASS(zdom->uzd_imax >= zdom->uzd_nitems);
1129 MPASS(zdom->uzd_nitems >= zdom->uzd_bimin);
1130 MPASS(zdom->uzd_bimin >= zdom->uzd_imin);
1136 zdom->uzd_wss = lmax(zdom->uzd_wss * 3 / 4,
1137 zdom->uzd_imax - zdom->uzd_bimin);
1146 m = zdom->uzd_imin - zdom->uzd_wss;
1148 if (zdom->uzd_limin >= m)
1149 zdom->uzd_limin = m;
1151 zdom->uzd_limin = (m + zdom->uzd_limin * 255) / 256;
1152 zdom->uzd_timin++;
1154 zdom->uzd_limin = 0;
1155 zdom->uzd_timin = 0;
1159 atomic_subtract_long(&zdom->uzd_imax,
1160 (zdom->uzd_imax - zdom->uzd_nitems + 1) / 2);
1161 zdom->uzd_imin = zdom->uzd_bimin = zdom->uzd_nitems;
1519 uma_zone_domain_t zdom;
1528 zdom = ZDOM_GET(zone, domain);
1531 bucket = zdom->uzd_cross;
1532 zdom->uzd_cross = NULL;
1546 ZDOM_LOCK(zdom);
1547 zone_domain_update_wss(zdom);
1551 target = zdom->uzd_wss;
1552 else if (zdom->uzd_timin > 900 / UMA_TIMEOUT)
1553 target = zdom->uzd_nitems - zdom->uzd_limin / 4;
1555 ZDOM_UNLOCK(zdom);
1558 while ((bucket = STAILQ_FIRST(&zdom->uzd_buckets)) != NULL &&
1559 zdom->uzd_nitems >= target + bucket->ub_cnt) {
1560 bucket = zone_fetch_bucket(zone, zdom, true);
1565 ZDOM_LOCK(zdom);
1567 ZDOM_UNLOCK(zdom);
2627 uma_zone_domain_t zdom;
2754 zdom = ZDOM_GET(zone, i);
2759 "nitems", CTLFLAG_RD, &zdom->uzd_nitems,
2762 "imax", CTLFLAG_RD, &zdom->uzd_imax,
2765 "imin", CTLFLAG_RD, &zdom->uzd_imin,
2768 "bimin", CTLFLAG_RD, &zdom->uzd_bimin,
2771 "wss", CTLFLAG_RD, &zdom->uzd_wss,
2774 "limin", CTLFLAG_RD, &zdom->uzd_limin,
2777 "timin", CTLFLAG_RD, &zdom->uzd_timin, 0,
2849 uma_zone_domain_t zdom;
2879 zdom = ZDOM_GET(zone, i);
2880 ZDOM_LOCK_INIT(zone, zdom, (arg->flags & UMA_ZONE_MTXCLASS));
2881 STAILQ_INIT(&zdom->uzd_buckets);
3825 * we must go back to the zone. This requires the zdom lock, so we
3884 uma_zone_domain_t zdom;
3916 zdom = zone_domain_lock(zone, domain);
3917 if ((bucket = zone_fetch_bucket(zone, zdom, false)) != NULL) {
3934 ZDOM_UNLOCK(zdom);
4626 uma_zone_domain_t zdom;
4655 zdom = ZDOM_GET(zone, domain);
4656 if (zdom->uzd_cross == NULL) {
4659 zdom->uzd_cross = b;
4672 if (zdom->uzd_cross != NULL) {
4676 zdom->uzd_cross = b;
4680 b = zdom->uzd_cross;
4687 zdom->uzd_cross = b;
4762 * FIRSTTOUCH domains need to free to the correct zdom. When
4763 * enabled this is the zdom of the item. The bucket is the
5520 uma_zone_domain_t zdom;
5525 zdom = ZDOM_GET(z, i);
5526 uth->uth_zone_free += zdom->uzd_nitems;