Lines Matching defs:mg
452 metaslab_group_t *mg;
461 if ((mg = mc->mc_allocator[0].mca_rotor) == NULL)
465 vd = mg->mg_vd;
468 ASSERT3P(mg->mg_class, ==, mc);
470 } while ((mg = mg->mg_next) != mc->mc_allocator[0].mca_rotor);
526 metaslab_group_t *mg = vdev_get_mg(tvd, mc);
533 mg->mg_class != mc) {
537 IMPLY(mg == mg->mg_vd->vdev_log_mg,
538 mc == spa_embedded_log_class(mg->mg_vd->vdev_spa));
541 mc_hist[i] += mg->mg_histogram[i];
569 metaslab_group_t *mg = tvd->vdev_mg;
576 mg->mg_class != mc) {
584 if (mg->mg_fragmentation == ZFS_FRAG_INVALID) {
593 fragmentation += mg->mg_fragmentation *
594 metaslab_group_get_space(mg);
618 metaslab_group_t *mg = tvd->vdev_mg;
621 mg->mg_class != mc) {
738 metaslab_group_alloc_update(metaslab_group_t *mg)
740 vdev_t *vd = mg->mg_vd;
741 metaslab_class_t *mc = mg->mg_class;
750 mutex_enter(&mg->mg_lock);
751 was_allocatable = mg->mg_allocatable;
752 was_initialized = mg->mg_initialized;
754 mg->mg_free_capacity = ((vs->vs_space - vs->vs_alloc) * 100) /
767 mg->mg_initialized = metaslab_group_initialized(mg);
768 if (!was_initialized && mg->mg_initialized) {
770 } else if (was_initialized && !mg->mg_initialized) {
774 if (mg->mg_initialized)
775 mg->mg_no_free_space = B_FALSE;
783 mg->mg_allocatable = (mg->mg_activation_count > 0 &&
784 mg->mg_free_capacity > zfs_mg_noalloc_threshold &&
785 (mg->mg_fragmentation == ZFS_FRAG_INVALID ||
786 mg->mg_fragmentation <= zfs_mg_fragmentation_threshold));
803 if (was_allocatable && !mg->mg_allocatable)
805 else if (!was_allocatable && mg->mg_allocatable)
809 mutex_exit(&mg->mg_lock);
834 metaslab_group_t *mg;
836 mg = kmem_zalloc(offsetof(metaslab_group_t,
838 mutex_init(&mg->mg_lock, NULL, MUTEX_DEFAULT, NULL);
839 mutex_init(&mg->mg_ms_disabled_lock, NULL, MUTEX_DEFAULT, NULL);
840 cv_init(&mg->mg_ms_disabled_cv, NULL, CV_DEFAULT, NULL);
841 avl_create(&mg->mg_metaslab_tree, metaslab_compare,
843 mg->mg_vd = vd;
844 mg->mg_class = mc;
845 mg->mg_activation_count = 0;
846 mg->mg_initialized = B_FALSE;
847 mg->mg_no_free_space = B_TRUE;
848 mg->mg_allocators = allocators;
851 metaslab_group_allocator_t *mga = &mg->mg_allocator[i];
855 return (mg);
859 metaslab_group_destroy(metaslab_group_t *mg)
861 ASSERT(mg->mg_prev == NULL);
862 ASSERT(mg->mg_next == NULL);
868 ASSERT(mg->mg_activation_count <= 0);
870 avl_destroy(&mg->mg_metaslab_tree);
871 mutex_destroy(&mg->mg_lock);
872 mutex_destroy(&mg->mg_ms_disabled_lock);
873 cv_destroy(&mg->mg_ms_disabled_cv);
875 for (int i = 0; i < mg->mg_allocators; i++) {
876 metaslab_group_allocator_t *mga = &mg->mg_allocator[i];
879 kmem_free(mg, offsetof(metaslab_group_t,
880 mg_allocator[mg->mg_allocators]));
884 metaslab_group_activate(metaslab_group_t *mg)
886 metaslab_class_t *mc = mg->mg_class;
892 ASSERT(mg->mg_prev == NULL);
893 ASSERT(mg->mg_next == NULL);
894 ASSERT(mg->mg_activation_count <= 0);
896 if (++mg->mg_activation_count <= 0)
899 mg->mg_aliquot = metaslab_aliquot * MAX(1,
900 vdev_get_ndisks(mg->mg_vd) - vdev_get_nparity(mg->mg_vd));
901 metaslab_group_alloc_update(mg);
904 mg->mg_prev = mg;
905 mg->mg_next = mg;
908 mg->mg_prev = mgprev;
909 mg->mg_next = mgnext;
910 mgprev->mg_next = mg;
911 mgnext->mg_prev = mg;
914 mc->mc_allocator[i].mca_rotor = mg;
915 mg = mg->mg_next;
926 metaslab_group_passivate(metaslab_group_t *mg)
928 metaslab_class_t *mc = mg->mg_class;
936 if (--mg->mg_activation_count != 0) {
938 ASSERT(mc->mc_allocator[i].mca_rotor != mg);
939 ASSERT(mg->mg_prev == NULL);
940 ASSERT(mg->mg_next == NULL);
941 ASSERT(mg->mg_activation_count < 0);
962 metaslab_group_alloc_update(mg);
963 for (int i = 0; i < mg->mg_allocators; i++) {
964 metaslab_group_allocator_t *mga = &mg->mg_allocator[i];
981 mgprev = mg->mg_prev;
982 mgnext = mg->mg_next;
984 if (mg == mgnext) {
991 if (mc->mc_allocator[i].mca_rotor == mg)
995 mg->mg_prev = NULL;
996 mg->mg_next = NULL;
1000 metaslab_group_initialized(metaslab_group_t *mg)
1002 vdev_t *vd = mg->mg_vd;
1005 return (vs->vs_space != 0 && mg->mg_activation_count > 0);
1009 metaslab_group_get_space(metaslab_group_t *mg)
1015 mutex_enter(&mg->mg_lock);
1016 uint64_t ms_count = avl_numnodes(&mg->mg_metaslab_tree);
1017 mutex_exit(&mg->mg_lock);
1018 return ((1ULL << mg->mg_vd->vdev_ms_shift) * ms_count);
1022 metaslab_group_histogram_verify(metaslab_group_t *mg)
1025 avl_tree_t *t = &mg->mg_metaslab_tree;
1026 uint64_t ashift = mg->mg_vd->vdev_ashift;
1037 mutex_enter(&mg->mg_lock);
1040 VERIFY3P(msp->ms_group, ==, mg);
1052 VERIFY3U(mg_hist[i], ==, mg->mg_histogram[i]);
1054 mutex_exit(&mg->mg_lock);
1060 metaslab_group_histogram_add(metaslab_group_t *mg, metaslab_t *msp)
1062 metaslab_class_t *mc = mg->mg_class;
1063 uint64_t ashift = mg->mg_vd->vdev_ashift;
1069 mutex_enter(&mg->mg_lock);
1072 IMPLY(mg == mg->mg_vd->vdev_log_mg,
1073 mc == spa_embedded_log_class(mg->mg_vd->vdev_spa));
1074 mg->mg_histogram[i + ashift] +=
1080 mutex_exit(&mg->mg_lock);
1084 metaslab_group_histogram_remove(metaslab_group_t *mg, metaslab_t *msp)
1086 metaslab_class_t *mc = mg->mg_class;
1087 uint64_t ashift = mg->mg_vd->vdev_ashift;
1093 mutex_enter(&mg->mg_lock);
1096 ASSERT3U(mg->mg_histogram[i + ashift], >=,
1100 IMPLY(mg == mg->mg_vd->vdev_log_mg,
1101 mc == spa_embedded_log_class(mg->mg_vd->vdev_spa));
1103 mg->mg_histogram[i + ashift] -=
1109 mutex_exit(&mg->mg_lock);
1113 metaslab_group_add(metaslab_group_t *mg, metaslab_t *msp)
1116 mutex_enter(&mg->mg_lock);
1117 msp->ms_group = mg;
1119 avl_add(&mg->mg_metaslab_tree, msp);
1120 mutex_exit(&mg->mg_lock);
1123 metaslab_group_histogram_add(mg, msp);
1128 metaslab_group_remove(metaslab_group_t *mg, metaslab_t *msp)
1131 metaslab_group_histogram_remove(mg, msp);
1134 mutex_enter(&mg->mg_lock);
1135 ASSERT(msp->ms_group == mg);
1136 avl_remove(&mg->mg_metaslab_tree, msp);
1146 mutex_exit(&mg->mg_lock);
1150 metaslab_group_sort_impl(metaslab_group_t *mg, metaslab_t *msp, uint64_t weight)
1153 ASSERT(MUTEX_HELD(&mg->mg_lock));
1154 ASSERT(msp->ms_group == mg);
1156 avl_remove(&mg->mg_metaslab_tree, msp);
1158 avl_add(&mg->mg_metaslab_tree, msp);
1163 metaslab_group_sort(metaslab_group_t *mg, metaslab_t *msp, uint64_t weight)
1172 mutex_enter(&mg->mg_lock);
1173 metaslab_group_sort_impl(mg, msp, weight);
1174 mutex_exit(&mg->mg_lock);
1185 metaslab_group_fragmentation(metaslab_group_t *mg)
1187 vdev_t *vd = mg->mg_vd;
1196 if (msp->ms_group != mg)
1203 if (valid_ms <= mg->mg_vd->vdev_ms_count / 2)
1222 metaslab_group_allocatable(metaslab_group_t *mg, metaslab_group_t *rotor,
1225 spa_t *spa = mg->mg_vd->vdev_spa;
1226 metaslab_class_t *mc = mg->mg_class;
1252 if (mg->mg_allocatable) {
1253 metaslab_group_allocator_t *mga = &mg->mg_allocator[allocator];
1264 if (mg->mg_no_free_space)
1301 for (metaslab_group_t *mgp = mg->mg_next;
2688 metaslab_init(metaslab_group_t *mg, uint64_t id, uint64_t object,
2691 vdev_t *vd = mg->mg_vd;
2768 metaslab_group_add(mg, ms);
2782 metaslab_space_update(vd, mg->mg_class,
2828 metaslab_group_t *mg = msp->ms_group;
2829 vdev_t *vd = mg->mg_vd;
2834 metaslab_group_remove(mg, msp);
2845 metaslab_space_update(vd, mg->mg_class,
3022 metaslab_group_t *mg = msp->ms_group;
3023 vdev_t *vd = mg->mg_vd;
3182 metaslab_group_t *mg = msp->ms_group;
3184 uint8_t shift = mg->mg_vd->vdev_ashift;
3340 metaslab_activate_allocator(metaslab_group_t *mg, metaslab_t *msp,
3343 metaslab_group_allocator_t *mga = &mg->mg_allocator[allocator];
3353 metaslab_group_sort(mg, msp, msp->ms_weight |
3361 mutex_enter(&mg->mg_lock);
3363 mutex_exit(&mg->mg_lock);
3374 metaslab_group_sort_impl(mg, msp,
3376 mutex_exit(&mg->mg_lock);
3459 metaslab_passivate_allocator(metaslab_group_t *mg, metaslab_t *msp,
3466 metaslab_group_sort(mg, msp, weight);
3470 mutex_enter(&mg->mg_lock);
3471 ASSERT3P(msp->ms_group, ==, mg);
3473 ASSERT3U(msp->ms_allocator, <, mg->mg_allocators);
3475 metaslab_group_allocator_t *mga = &mg->mg_allocator[msp->ms_allocator];
3486 metaslab_group_sort_impl(mg, msp, weight);
3487 mutex_exit(&mg->mg_lock);
3561 metaslab_group_preload(metaslab_group_t *mg)
3563 spa_t *spa = mg->mg_vd->vdev_spa;
3565 avl_tree_t *t = &mg->mg_metaslab_tree;
3571 mutex_enter(&mg->mg_lock);
3577 ASSERT3P(msp->ms_group, ==, mg);
3590 msp, TQ_SLEEP | (m <= mg->mg_allocators ? TQ_FRONT : 0))
3593 mutex_exit(&mg->mg_lock);
3864 metaslab_group_t *mg = msp->ms_group;
3865 spa_t *spa = mg->mg_vd->vdev_spa;
3933 metaslab_group_t *mg = msp->ms_group;
3940 metaslab_group_histogram_verify(mg);
3941 metaslab_class_histogram_verify(mg->mg_class);
3942 metaslab_group_histogram_remove(mg, msp);
3955 metaslab_group_histogram_add(mg, msp);
3956 metaslab_group_histogram_verify(mg);
3957 metaslab_class_histogram_verify(mg->mg_class);
4021 metaslab_group_t *mg = msp->ms_group;
4022 vdev_t *vd = mg->mg_vd;
4132 metaslab_group_histogram_verify(mg);
4133 metaslab_class_histogram_verify(mg->mg_class);
4134 metaslab_group_histogram_remove(mg, msp);
4252 metaslab_group_histogram_add(mg, msp);
4253 metaslab_group_histogram_verify(mg);
4254 metaslab_class_histogram_verify(mg->mg_class);
4321 metaslab_group_t *mg = msp->ms_group;
4322 vdev_t *vd = mg->mg_vd;
4334 metaslab_space_update(vd, mg->mg_class, 0, 0, msp->ms_size);
4363 metaslab_space_update(vd, mg->mg_class, alloc_delta + defer_delta,
4429 mutex_enter(&mg->mg_lock);
4430 mg->mg_ms_ready++;
4431 mutex_exit(&mg->mg_lock);
4450 metaslab_sync_reassess(metaslab_group_t *mg)
4452 spa_t *spa = mg->mg_class->mc_spa;
4455 metaslab_group_alloc_update(mg);
4456 mg->mg_fragmentation = metaslab_group_fragmentation(mg);
4465 if (mg->mg_activation_count > 0) {
4466 metaslab_group_preload(mg);
4502 metaslab_trace_add(zio_alloc_list_t *zal, metaslab_group_t *mg,
4532 mat->mat_mg = mg;
4586 metaslab_group_t *mg = vdev_lookup_top(spa, vdev)->vdev_mg;
4587 if (!mg->mg_class->mc_alloc_throttle_enabled)
4590 metaslab_group_allocator_t *mga = &mg->mg_allocator[allocator];
4595 metaslab_group_increment_qdepth(metaslab_group_t *mg, int allocator)
4597 metaslab_group_allocator_t *mga = &mg->mg_allocator[allocator];
4599 &mg->mg_class->mc_allocator[allocator];
4600 uint64_t max = mg->mg_max_alloc_queue_depth;
4620 metaslab_group_t *mg = vdev_lookup_top(spa, vdev)->vdev_mg;
4621 if (!mg->mg_class->mc_alloc_throttle_enabled)
4624 metaslab_group_allocator_t *mga = &mg->mg_allocator[allocator];
4627 metaslab_group_increment_qdepth(mg, allocator);
4640 metaslab_group_t *mg = vdev_lookup_top(spa, vdev)->vdev_mg;
4641 metaslab_group_allocator_t *mga = &mg->mg_allocator[allocator];
4661 metaslab_group_t *mg = msp->ms_group;
4662 vdev_t *vd = mg->mg_vd;
4671 vdev_dirty(mg->mg_vd, VDD_METASLAB, msp, txg);
4701 find_valid_metaslab(metaslab_group_t *mg, uint64_t activation_weight,
4707 avl_tree_t *t = &mg->mg_metaslab_tree;
4723 metaslab_trace_add(zal, mg, msp, asize, d,
4800 metaslab_group_alloc_normal(metaslab_group_t *mg, zio_alloc_list_t *zal,
4810 DVA_GET_VDEV(&dva[i]) == mg->mg_vd->vdev_id) {
4813 DVA_GET_VDEV(&dva[i]) == mg->mg_vd->vdev_id) {
4823 if (mg->mg_ms_ready < mg->mg_allocators * 3)
4825 metaslab_group_allocator_t *mga = &mg->mg_allocator[allocator];
4827 ASSERT3U(mg->mg_vd->vdev_ms_count, >=, 2);
4844 mutex_enter(&mg->mg_lock);
4877 msp = find_valid_metaslab(mg, activation_weight, dva, d,
4882 mutex_exit(&mg->mg_lock);
4988 metaslab_trace_add(zal, mg, msp, asize, d,
5001 metaslab_trace_add(zal, mg, msp, asize, d,
5010 metaslab_trace_add(zal, mg, msp, asize, d,
5021 metaslab_trace_add(zal, mg, msp, asize, d, offset, allocator);
5086 metaslab_group_sort(mg, msp, weight);
5106 metaslab_group_alloc(metaslab_group_t *mg, zio_alloc_list_t *zal,
5112 offset = metaslab_group_alloc_normal(mg, zal, asize, txg, want_unique,
5115 mutex_enter(&mg->mg_lock);
5117 mg->mg_failed_allocations++;
5118 metaslab_trace_add(zal, mg, NULL, asize, d,
5132 mg->mg_no_free_space = B_TRUE;
5135 mg->mg_allocations++;
5136 mutex_exit(&mg->mg_lock);
5149 metaslab_group_t *mg, *rotor;
5197 * longer exists or its mg has been closed (e.g. by
5202 mg = vdev_get_mg(vd, mc);
5205 mg = mg->mg_next;
5207 mg = mca->mca_rotor;
5211 mg = vd->vdev_mg->mg_next;
5214 mg = mca->mca_rotor;
5221 if (mg->mg_class != mc || mg->mg_activation_count <= 0)
5222 mg = mca->mca_rotor;
5224 rotor = mg;
5229 ASSERT(mg->mg_activation_count == 1);
5230 vd = mg->mg_vd;
5251 allocatable = metaslab_group_allocatable(mg, rotor,
5256 metaslab_trace_add(zal, mg, NULL, psize, d,
5268 metaslab_trace_add(zal, mg, NULL, psize, d,
5273 ASSERT(mg->mg_class == mc);
5284 uint64_t offset = metaslab_group_alloc(mg, zal, asize, txg,
5328 mg->mg_bias = ((ratio - 100) *
5329 (int64_t)mg->mg_aliquot) / 100;
5331 mg->mg_bias = 0;
5336 mg->mg_aliquot + mg->mg_bias) {
5337 mca->mca_rotor = mg->mg_next;
5350 mca->mca_rotor = mg->mg_next;
5352 } while ((mg = mg->mg_next) != rotor);
6066 metaslab_group_disable_wait(metaslab_group_t *mg)
6068 ASSERT(MUTEX_HELD(&mg->mg_ms_disabled_lock));
6069 while (mg->mg_disabled_updating) {
6070 cv_wait(&mg->mg_ms_disabled_cv, &mg->mg_ms_disabled_lock);
6075 metaslab_group_disabled_increment(metaslab_group_t *mg)
6077 ASSERT(MUTEX_HELD(&mg->mg_ms_disabled_lock));
6078 ASSERT(mg->mg_disabled_updating);
6080 while (mg->mg_ms_disabled >= max_disabled_ms) {
6081 cv_wait(&mg->mg_ms_disabled_cv, &mg->mg_ms_disabled_lock);
6083 mg->mg_ms_disabled++;
6084 ASSERT3U(mg->mg_ms_disabled, <=, max_disabled_ms);
6097 metaslab_group_t *mg = msp->ms_group;
6099 mutex_enter(&mg->mg_ms_disabled_lock);
6110 metaslab_group_disable_wait(mg);
6111 mg->mg_disabled_updating = B_TRUE;
6113 metaslab_group_disabled_increment(mg);
6119 mg->mg_disabled_updating = B_FALSE;
6120 cv_broadcast(&mg->mg_ms_disabled_cv);
6121 mutex_exit(&mg->mg_ms_disabled_lock);
6127 metaslab_group_t *mg = msp->ms_group;
6128 spa_t *spa = mg->mg_vd->vdev_spa;
6138 mutex_enter(&mg->mg_ms_disabled_lock);
6141 mg->mg_ms_disabled--;
6142 cv_broadcast(&mg->mg_ms_disabled_cv);
6147 mutex_exit(&mg->mg_ms_disabled_lock);