• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-13-stable/sys/contrib/openzfs/module/zfs/

Lines Matching defs:mg

454 	metaslab_group_t *mg;
463 if ((mg = mc->mc_allocator[0].mca_rotor) == NULL)
467 vd = mg->mg_vd;
470 ASSERT3P(mg->mg_class, ==, mc);
472 } while ((mg = mg->mg_next) != mc->mc_allocator[0].mca_rotor);
528 metaslab_group_t *mg = vdev_get_mg(tvd, mc);
535 mg->mg_class != mc) {
539 IMPLY(mg == mg->mg_vd->vdev_log_mg,
540 mc == spa_embedded_log_class(mg->mg_vd->vdev_spa));
543 mc_hist[i] += mg->mg_histogram[i];
571 metaslab_group_t *mg = tvd->vdev_mg;
578 mg->mg_class != mc) {
586 if (mg->mg_fragmentation == ZFS_FRAG_INVALID) {
595 fragmentation += mg->mg_fragmentation *
596 metaslab_group_get_space(mg);
620 metaslab_group_t *mg = tvd->vdev_mg;
623 mg->mg_class != mc) {
737 metaslab_group_alloc_update(metaslab_group_t *mg)
739 vdev_t *vd = mg->mg_vd;
740 metaslab_class_t *mc = mg->mg_class;
749 mutex_enter(&mg->mg_lock);
750 was_allocatable = mg->mg_allocatable;
751 was_initialized = mg->mg_initialized;
753 mg->mg_free_capacity = ((vs->vs_space - vs->vs_alloc) * 100) /
766 mg->mg_initialized = metaslab_group_initialized(mg);
767 if (!was_initialized && mg->mg_initialized) {
769 } else if (was_initialized && !mg->mg_initialized) {
773 if (mg->mg_initialized)
774 mg->mg_no_free_space = B_FALSE;
782 mg->mg_allocatable = (mg->mg_activation_count > 0 &&
783 mg->mg_free_capacity > zfs_mg_noalloc_threshold &&
784 (mg->mg_fragmentation == ZFS_FRAG_INVALID ||
785 mg->mg_fragmentation <= zfs_mg_fragmentation_threshold));
802 if (was_allocatable && !mg->mg_allocatable)
804 else if (!was_allocatable && mg->mg_allocatable)
808 mutex_exit(&mg->mg_lock);
833 metaslab_group_t *mg;
835 mg = kmem_zalloc(offsetof(metaslab_group_t,
837 mutex_init(&mg->mg_lock, NULL, MUTEX_DEFAULT, NULL);
838 mutex_init(&mg->mg_ms_disabled_lock, NULL, MUTEX_DEFAULT, NULL);
839 cv_init(&mg->mg_ms_disabled_cv, NULL, CV_DEFAULT, NULL);
840 avl_create(&mg->mg_metaslab_tree, metaslab_compare,
842 mg->mg_vd = vd;
843 mg->mg_class = mc;
844 mg->mg_activation_count = 0;
845 mg->mg_initialized = B_FALSE;
846 mg->mg_no_free_space = B_TRUE;
847 mg->mg_allocators = allocators;
850 metaslab_group_allocator_t *mga = &mg->mg_allocator[i];
854 mg->mg_taskq = taskq_create("metaslab_group_taskq", metaslab_load_pct,
857 return (mg);
861 metaslab_group_destroy(metaslab_group_t *mg)
863 ASSERT(mg->mg_prev == NULL);
864 ASSERT(mg->mg_next == NULL);
870 ASSERT(mg->mg_activation_count <= 0);
872 taskq_destroy(mg->mg_taskq);
873 avl_destroy(&mg->mg_metaslab_tree);
874 mutex_destroy(&mg->mg_lock);
875 mutex_destroy(&mg->mg_ms_disabled_lock);
876 cv_destroy(&mg->mg_ms_disabled_cv);
878 for (int i = 0; i < mg->mg_allocators; i++) {
879 metaslab_group_allocator_t *mga = &mg->mg_allocator[i];
882 kmem_free(mg, offsetof(metaslab_group_t,
883 mg_allocator[mg->mg_allocators]));
887 metaslab_group_activate(metaslab_group_t *mg)
889 metaslab_class_t *mc = mg->mg_class;
895 ASSERT(mg->mg_prev == NULL);
896 ASSERT(mg->mg_next == NULL);
897 ASSERT(mg->mg_activation_count <= 0);
899 if (++mg->mg_activation_count <= 0)
902 mg->mg_aliquot = metaslab_aliquot * MAX(1, mg->mg_vd->vdev_children);
903 metaslab_group_alloc_update(mg);
906 mg->mg_prev = mg;
907 mg->mg_next = mg;
910 mg->mg_prev = mgprev;
911 mg->mg_next = mgnext;
912 mgprev->mg_next = mg;
913 mgnext->mg_prev = mg;
916 mc->mc_allocator[i].mca_rotor = mg;
917 mg = mg->mg_next;
928 metaslab_group_passivate(metaslab_group_t *mg)
930 metaslab_class_t *mc = mg->mg_class;
938 if (--mg->mg_activation_count != 0) {
940 ASSERT(mc->mc_allocator[i].mca_rotor != mg);
941 ASSERT(mg->mg_prev == NULL);
942 ASSERT(mg->mg_next == NULL);
943 ASSERT(mg->mg_activation_count < 0);
962 taskq_wait_outstanding(mg->mg_taskq, 0);
964 metaslab_group_alloc_update(mg);
965 for (int i = 0; i < mg->mg_allocators; i++) {
966 metaslab_group_allocator_t *mga = &mg->mg_allocator[i];
983 mgprev = mg->mg_prev;
984 mgnext = mg->mg_next;
986 if (mg == mgnext) {
993 if (mc->mc_allocator[i].mca_rotor == mg)
997 mg->mg_prev = NULL;
998 mg->mg_next = NULL;
1002 metaslab_group_initialized(metaslab_group_t *mg)
1004 vdev_t *vd = mg->mg_vd;
1007 return (vs->vs_space != 0 && mg->mg_activation_count > 0);
1011 metaslab_group_get_space(metaslab_group_t *mg)
1017 mutex_enter(&mg->mg_lock);
1018 uint64_t ms_count = avl_numnodes(&mg->mg_metaslab_tree);
1019 mutex_exit(&mg->mg_lock);
1020 return ((1ULL << mg->mg_vd->vdev_ms_shift) * ms_count);
1024 metaslab_group_histogram_verify(metaslab_group_t *mg)
1027 avl_tree_t *t = &mg->mg_metaslab_tree;
1028 uint64_t ashift = mg->mg_vd->vdev_ashift;
1039 mutex_enter(&mg->mg_lock);
1042 VERIFY3P(msp->ms_group, ==, mg);
1054 VERIFY3U(mg_hist[i], ==, mg->mg_histogram[i]);
1056 mutex_exit(&mg->mg_lock);
1062 metaslab_group_histogram_add(metaslab_group_t *mg, metaslab_t *msp)
1064 metaslab_class_t *mc = mg->mg_class;
1065 uint64_t ashift = mg->mg_vd->vdev_ashift;
1071 mutex_enter(&mg->mg_lock);
1074 IMPLY(mg == mg->mg_vd->vdev_log_mg,
1075 mc == spa_embedded_log_class(mg->mg_vd->vdev_spa));
1076 mg->mg_histogram[i + ashift] +=
1082 mutex_exit(&mg->mg_lock);
1086 metaslab_group_histogram_remove(metaslab_group_t *mg, metaslab_t *msp)
1088 metaslab_class_t *mc = mg->mg_class;
1089 uint64_t ashift = mg->mg_vd->vdev_ashift;
1095 mutex_enter(&mg->mg_lock);
1098 ASSERT3U(mg->mg_histogram[i + ashift], >=,
1102 IMPLY(mg == mg->mg_vd->vdev_log_mg,
1103 mc == spa_embedded_log_class(mg->mg_vd->vdev_spa));
1105 mg->mg_histogram[i + ashift] -=
1111 mutex_exit(&mg->mg_lock);
1115 metaslab_group_add(metaslab_group_t *mg, metaslab_t *msp)
1118 mutex_enter(&mg->mg_lock);
1119 msp->ms_group = mg;
1121 avl_add(&mg->mg_metaslab_tree, msp);
1122 mutex_exit(&mg->mg_lock);
1125 metaslab_group_histogram_add(mg, msp);
1130 metaslab_group_remove(metaslab_group_t *mg, metaslab_t *msp)
1133 metaslab_group_histogram_remove(mg, msp);
1136 mutex_enter(&mg->mg_lock);
1137 ASSERT(msp->ms_group == mg);
1138 avl_remove(&mg->mg_metaslab_tree, msp);
1148 mutex_exit(&mg->mg_lock);
1152 metaslab_group_sort_impl(metaslab_group_t *mg, metaslab_t *msp, uint64_t weight)
1155 ASSERT(MUTEX_HELD(&mg->mg_lock));
1156 ASSERT(msp->ms_group == mg);
1158 avl_remove(&mg->mg_metaslab_tree, msp);
1160 avl_add(&mg->mg_metaslab_tree, msp);
1165 metaslab_group_sort(metaslab_group_t *mg, metaslab_t *msp, uint64_t weight)
1174 mutex_enter(&mg->mg_lock);
1175 metaslab_group_sort_impl(mg, msp, weight);
1176 mutex_exit(&mg->mg_lock);
1187 metaslab_group_fragmentation(metaslab_group_t *mg)
1189 vdev_t *vd = mg->mg_vd;
1198 if (msp->ms_group != mg)
1205 if (valid_ms <= mg->mg_vd->vdev_ms_count / 2)
1224 metaslab_group_allocatable(metaslab_group_t *mg, metaslab_group_t *rotor,
1227 spa_t *spa = mg->mg_vd->vdev_spa;
1228 metaslab_class_t *mc = mg->mg_class;
1254 if (mg->mg_allocatable) {
1255 metaslab_group_allocator_t *mga = &mg->mg_allocator[allocator];
1266 if (mg->mg_no_free_space)
1294 for (metaslab_group_t *mgp = mg->mg_next;
2626 metaslab_init(metaslab_group_t *mg, uint64_t id, uint64_t object,
2629 vdev_t *vd = mg->mg_vd;
2704 metaslab_group_add(mg, ms);
2718 metaslab_space_update(vd, mg->mg_class,
2763 metaslab_group_t *mg = msp->ms_group;
2764 vdev_t *vd = mg->mg_vd;
2769 metaslab_group_remove(mg, msp);
2780 metaslab_space_update(vd, mg->mg_class,
2956 metaslab_group_t *mg = msp->ms_group;
2957 vdev_t *vd = mg->mg_vd;
3116 metaslab_group_t *mg = msp->ms_group;
3118 uint8_t shift = mg->mg_vd->vdev_ashift;
3265 metaslab_activate_allocator(metaslab_group_t *mg, metaslab_t *msp,
3268 metaslab_group_allocator_t *mga = &mg->mg_allocator[allocator];
3278 metaslab_group_sort(mg, msp, msp->ms_weight |
3286 mutex_enter(&mg->mg_lock);
3288 mutex_exit(&mg->mg_lock);
3299 metaslab_group_sort_impl(mg, msp,
3301 mutex_exit(&mg->mg_lock);
3384 metaslab_passivate_allocator(metaslab_group_t *mg, metaslab_t *msp,
3391 metaslab_group_sort(mg, msp, weight);
3395 mutex_enter(&mg->mg_lock);
3396 ASSERT3P(msp->ms_group, ==, mg);
3398 ASSERT3U(msp->ms_allocator, <, mg->mg_allocators);
3400 metaslab_group_allocator_t *mga = &mg->mg_allocator[msp->ms_allocator];
3411 metaslab_group_sort_impl(mg, msp, weight);
3412 mutex_exit(&mg->mg_lock);
3486 metaslab_group_preload(metaslab_group_t *mg)
3488 spa_t *spa = mg->mg_vd->vdev_spa;
3490 avl_tree_t *t = &mg->mg_metaslab_tree;
3494 taskq_wait_outstanding(mg->mg_taskq, 0);
3498 mutex_enter(&mg->mg_lock);
3504 ASSERT3P(msp->ms_group, ==, mg);
3516 VERIFY(taskq_dispatch(mg->mg_taskq, metaslab_preload,
3519 mutex_exit(&mg->mg_lock);
3734 metaslab_group_t *mg = msp->ms_group;
3735 spa_t *spa = mg->mg_vd->vdev_spa;
3833 metaslab_group_t *mg = msp->ms_group;
3840 metaslab_group_histogram_verify(mg);
3841 metaslab_class_histogram_verify(mg->mg_class);
3842 metaslab_group_histogram_remove(mg, msp);
3855 metaslab_group_histogram_add(mg, msp);
3856 metaslab_group_histogram_verify(mg);
3857 metaslab_class_histogram_verify(mg->mg_class);
3919 metaslab_group_t *mg = msp->ms_group;
3920 vdev_t *vd = mg->mg_vd;
4047 metaslab_group_histogram_verify(mg);
4048 metaslab_class_histogram_verify(mg->mg_class);
4049 metaslab_group_histogram_remove(mg, msp);
4163 metaslab_group_histogram_add(mg, msp);
4164 metaslab_group_histogram_verify(mg);
4165 metaslab_class_histogram_verify(mg->mg_class);
4232 metaslab_group_t *mg = msp->ms_group;
4233 vdev_t *vd = mg->mg_vd;
4245 metaslab_space_update(vd, mg->mg_class, 0, 0, msp->ms_size);
4273 metaslab_space_update(vd, mg->mg_class, alloc_delta + defer_delta,
4339 mutex_enter(&mg->mg_lock);
4340 mg->mg_ms_ready++;
4341 mutex_exit(&mg->mg_lock);
4360 metaslab_sync_reassess(metaslab_group_t *mg)
4362 spa_t *spa = mg->mg_class->mc_spa;
4365 metaslab_group_alloc_update(mg);
4366 mg->mg_fragmentation = metaslab_group_fragmentation(mg);
4375 if (mg->mg_activation_count > 0) {
4376 metaslab_group_preload(mg);
4412 metaslab_trace_add(zio_alloc_list_t *zal, metaslab_group_t *mg,
4442 mat->mat_mg = mg;
4496 metaslab_group_t *mg = vdev_lookup_top(spa, vdev)->vdev_mg;
4497 if (!mg->mg_class->mc_alloc_throttle_enabled)
4500 metaslab_group_allocator_t *mga = &mg->mg_allocator[allocator];
4505 metaslab_group_increment_qdepth(metaslab_group_t *mg, int allocator)
4507 metaslab_group_allocator_t *mga = &mg->mg_allocator[allocator];
4509 &mg->mg_class->mc_allocator[allocator];
4510 uint64_t max = mg->mg_max_alloc_queue_depth;
4530 metaslab_group_t *mg = vdev_lookup_top(spa, vdev)->vdev_mg;
4531 if (!mg->mg_class->mc_alloc_throttle_enabled)
4534 metaslab_group_allocator_t *mga = &mg->mg_allocator[allocator];
4537 metaslab_group_increment_qdepth(mg, allocator);
4550 metaslab_group_t *mg = vdev_lookup_top(spa, vdev)->vdev_mg;
4551 metaslab_group_allocator_t *mga = &mg->mg_allocator[allocator];
4570 metaslab_group_t *mg = msp->ms_group;
4571 vdev_t *vd = mg->mg_vd;
4580 vdev_dirty(mg->mg_vd, VDD_METASLAB, msp, txg);
4610 find_valid_metaslab(metaslab_group_t *mg, uint64_t activation_weight,
4616 avl_tree_t *t = &mg->mg_metaslab_tree;
4632 metaslab_trace_add(zal, mg, msp, asize, d,
4710 metaslab_group_alloc_normal(metaslab_group_t *mg, zio_alloc_list_t *zal,
4720 DVA_GET_VDEV(&dva[i]) == mg->mg_vd->vdev_id) {
4723 DVA_GET_VDEV(&dva[i]) == mg->mg_vd->vdev_id) {
4733 if (mg->mg_ms_ready < mg->mg_allocators * 3)
4735 metaslab_group_allocator_t *mga = &mg->mg_allocator[allocator];
4737 ASSERT3U(mg->mg_vd->vdev_ms_count, >=, 2);
4754 mutex_enter(&mg->mg_lock);
4787 msp = find_valid_metaslab(mg, activation_weight, dva, d,
4792 mutex_exit(&mg->mg_lock);
4898 metaslab_trace_add(zal, mg, msp, asize, d,
4911 metaslab_trace_add(zal, mg, msp, asize, d,
4920 metaslab_trace_add(zal, mg, msp, asize, d,
4931 metaslab_trace_add(zal, mg, msp, asize, d, offset, allocator);
4996 metaslab_group_sort(mg, msp, weight);
5016 metaslab_group_alloc(metaslab_group_t *mg, zio_alloc_list_t *zal,
5021 ASSERT(mg->mg_initialized);
5023 offset = metaslab_group_alloc_normal(mg, zal, asize, txg, want_unique,
5026 mutex_enter(&mg->mg_lock);
5028 mg->mg_failed_allocations++;
5029 metaslab_trace_add(zal, mg, NULL, asize, d,
5043 mg->mg_no_free_space = B_TRUE;
5046 mg->mg_allocations++;
5047 mutex_exit(&mg->mg_lock);
5060 metaslab_group_t *mg, *fast_mg, *rotor;
5106 * longer exists or its mg has been closed (e.g. by
5111 mg = vdev_get_mg(vd, mc);
5114 mg->mg_next != NULL)
5115 mg = mg->mg_next;
5117 mg = mca->mca_rotor;
5121 mg = vd->vdev_mg->mg_next;
5123 mg = fast_mg = mca->mca_rotor;
5127 mg->mg_vd->vdev_pending_fastwrite)
5128 mg = fast_mg;
5133 mg = mca->mca_rotor;
5140 if (mg->mg_class != mc || mg->mg_activation_count <= 0)
5141 mg = mca->mca_rotor;
5143 rotor = mg;
5148 ASSERT(mg->mg_activation_count == 1);
5149 vd = mg->mg_vd;
5170 allocatable = metaslab_group_allocatable(mg, rotor,
5175 metaslab_trace_add(zal, mg, NULL, psize, d,
5180 ASSERT(mg->mg_initialized);
5190 metaslab_trace_add(zal, mg, NULL, psize, d,
5195 ASSERT(mg->mg_class == mc);
5206 uint64_t offset = metaslab_group_alloc(mg, zal, asize, txg,
5250 mg->mg_bias = ((ratio - 100) *
5251 (int64_t)mg->mg_aliquot) / 100;
5253 mg->mg_bias = 0;
5258 mg->mg_aliquot + mg->mg_bias) {
5259 mca->mca_rotor = mg->mg_next;
5277 mca->mca_rotor = mg->mg_next;
5279 } while ((mg = mg->mg_next) != rotor);
6047 metaslab_group_disable_wait(metaslab_group_t *mg)
6049 ASSERT(MUTEX_HELD(&mg->mg_ms_disabled_lock));
6050 while (mg->mg_disabled_updating) {
6051 cv_wait(&mg->mg_ms_disabled_cv, &mg->mg_ms_disabled_lock);
6056 metaslab_group_disabled_increment(metaslab_group_t *mg)
6058 ASSERT(MUTEX_HELD(&mg->mg_ms_disabled_lock));
6059 ASSERT(mg->mg_disabled_updating);
6061 while (mg->mg_ms_disabled >= max_disabled_ms) {
6062 cv_wait(&mg->mg_ms_disabled_cv, &mg->mg_ms_disabled_lock);
6064 mg->mg_ms_disabled++;
6065 ASSERT3U(mg->mg_ms_disabled, <=, max_disabled_ms);
6078 metaslab_group_t *mg = msp->ms_group;
6080 mutex_enter(&mg->mg_ms_disabled_lock);
6091 metaslab_group_disable_wait(mg);
6092 mg->mg_disabled_updating = B_TRUE;
6094 metaslab_group_disabled_increment(mg);
6100 mg->mg_disabled_updating = B_FALSE;
6101 cv_broadcast(&mg->mg_ms_disabled_cv);
6102 mutex_exit(&mg->mg_ms_disabled_lock);
6108 metaslab_group_t *mg = msp->ms_group;
6109 spa_t *spa = mg->mg_vd->vdev_spa;
6119 mutex_enter(&mg->mg_ms_disabled_lock);
6122 mg->mg_ms_disabled--;
6123 cv_broadcast(&mg->mg_ms_disabled_cv);
6128 mutex_exit(&mg->mg_ms_disabled_lock);