Lines Matching defs:mg

294 	metaslab_group_t *mg;
303 if ((mg = mc->mc_rotor) == NULL)
307 vd = mg->mg_vd;
310 ASSERT3P(mg->mg_class, ==, mc);
312 } while ((mg = mg->mg_next) != mc->mc_rotor);
330 metaslab_group_t *mg;
334 if ((mg = mc->mc_rotor) == NULL) {
340 vd = mg->mg_vd;
343 } while ((mg = mg->mg_next) != mc->mc_rotor);
393 metaslab_group_t *mg = tvd->vdev_mg;
400 mg->mg_class != mc) {
405 mc_hist[i] += mg->mg_histogram[i];
431 metaslab_group_t *mg = tvd->vdev_mg;
438 mg->mg_class != mc) {
446 if (mg->mg_fragmentation == ZFS_FRAG_INVALID) {
455 fragmentation += mg->mg_fragmentation *
456 metaslab_group_get_space(mg);
480 metaslab_group_t *mg = tvd->vdev_mg;
483 mg->mg_class != mc) {
537 metaslab_group_alloc_update(metaslab_group_t *mg)
539 vdev_t *vd = mg->mg_vd;
540 metaslab_class_t *mc = mg->mg_class;
547 mutex_enter(&mg->mg_lock);
548 was_allocatable = mg->mg_allocatable;
549 was_initialized = mg->mg_initialized;
551 mg->mg_free_capacity = ((vs->vs_space - vs->vs_alloc) * 100) /
564 mg->mg_initialized = metaslab_group_initialized(mg);
565 if (!was_initialized && mg->mg_initialized) {
567 } else if (was_initialized && !mg->mg_initialized) {
571 if (mg->mg_initialized)
572 mg->mg_no_free_space = B_FALSE;
580 mg->mg_allocatable = (mg->mg_activation_count > 0 &&
581 mg->mg_free_capacity > zfs_mg_noalloc_threshold &&
582 (mg->mg_fragmentation == ZFS_FRAG_INVALID ||
583 mg->mg_fragmentation <= zfs_mg_fragmentation_threshold));
600 if (was_allocatable && !mg->mg_allocatable)
602 else if (!was_allocatable && mg->mg_allocatable)
606 mutex_exit(&mg->mg_lock);
612 metaslab_group_t *mg;
614 mg = kmem_zalloc(sizeof (metaslab_group_t), KM_SLEEP);
615 mutex_init(&mg->mg_lock, NULL, MUTEX_DEFAULT, NULL);
616 avl_create(&mg->mg_metaslab_tree, metaslab_compare,
618 mg->mg_vd = vd;
619 mg->mg_class = mc;
620 mg->mg_activation_count = 0;
621 mg->mg_initialized = B_FALSE;
622 mg->mg_no_free_space = B_TRUE;
623 refcount_create_tracked(&mg->mg_alloc_queue_depth);
625 mg->mg_taskq = taskq_create("metaslab_group_taskq", metaslab_load_pct,
628 return (mg);
632 metaslab_group_destroy(metaslab_group_t *mg)
634 ASSERT(mg->mg_prev == NULL);
635 ASSERT(mg->mg_next == NULL);
641 ASSERT(mg->mg_activation_count <= 0);
643 taskq_destroy(mg->mg_taskq);
644 avl_destroy(&mg->mg_metaslab_tree);
645 mutex_destroy(&mg->mg_lock);
646 refcount_destroy(&mg->mg_alloc_queue_depth);
647 kmem_free(mg, sizeof (metaslab_group_t));
651 metaslab_group_activate(metaslab_group_t *mg)
653 metaslab_class_t *mc = mg->mg_class;
658 ASSERT(mc->mc_rotor != mg);
659 ASSERT(mg->mg_prev == NULL);
660 ASSERT(mg->mg_next == NULL);
661 ASSERT(mg->mg_activation_count <= 0);
663 if (++mg->mg_activation_count <= 0)
666 mg->mg_aliquot = metaslab_aliquot * MAX(1, mg->mg_vd->vdev_children);
667 metaslab_group_alloc_update(mg);
670 mg->mg_prev = mg;
671 mg->mg_next = mg;
674 mg->mg_prev = mgprev;
675 mg->mg_next = mgnext;
676 mgprev->mg_next = mg;
677 mgnext->mg_prev = mg;
679 mc->mc_rotor = mg;
684 metaslab_group_passivate(metaslab_group_t *mg)
686 metaslab_class_t *mc = mg->mg_class;
691 if (--mg->mg_activation_count != 0) {
692 ASSERT(mc->mc_rotor != mg);
693 ASSERT(mg->mg_prev == NULL);
694 ASSERT(mg->mg_next == NULL);
695 ASSERT(mg->mg_activation_count < 0);
699 taskq_wait(mg->mg_taskq);
700 metaslab_group_alloc_update(mg);
702 mgprev = mg->mg_prev;
703 mgnext = mg->mg_next;
705 if (mg == mgnext) {
713 mg->mg_prev = NULL;
714 mg->mg_next = NULL;
719 metaslab_group_initialized(metaslab_group_t *mg)
721 vdev_t *vd = mg->mg_vd;
724 return (vs->vs_space != 0 && mg->mg_activation_count > 0);
728 metaslab_group_get_space(metaslab_group_t *mg)
730 return ((1ULL << mg->mg_vd->vdev_ms_shift) * mg->mg_vd->vdev_ms_count);
734 metaslab_group_histogram_verify(metaslab_group_t *mg)
737 vdev_t *vd = mg->mg_vd;
762 VERIFY3U(mg_hist[i], ==, mg->mg_histogram[i]);
768 metaslab_group_histogram_add(metaslab_group_t *mg, metaslab_t *msp)
770 metaslab_class_t *mc = mg->mg_class;
771 uint64_t ashift = mg->mg_vd->vdev_ashift;
777 mutex_enter(&mg->mg_lock);
779 mg->mg_histogram[i + ashift] +=
784 mutex_exit(&mg->mg_lock);
788 metaslab_group_histogram_remove(metaslab_group_t *mg, metaslab_t *msp)
790 metaslab_class_t *mc = mg->mg_class;
791 uint64_t ashift = mg->mg_vd->vdev_ashift;
797 mutex_enter(&mg->mg_lock);
799 ASSERT3U(mg->mg_histogram[i + ashift], >=,
804 mg->mg_histogram[i + ashift] -=
809 mutex_exit(&mg->mg_lock);
813 metaslab_group_add(metaslab_group_t *mg, metaslab_t *msp)
816 mutex_enter(&mg->mg_lock);
817 msp->ms_group = mg;
819 avl_add(&mg->mg_metaslab_tree, msp);
820 mutex_exit(&mg->mg_lock);
823 metaslab_group_histogram_add(mg, msp);
828 metaslab_group_remove(metaslab_group_t *mg, metaslab_t *msp)
831 metaslab_group_histogram_remove(mg, msp);
834 mutex_enter(&mg->mg_lock);
835 ASSERT(msp->ms_group == mg);
836 avl_remove(&mg->mg_metaslab_tree, msp);
838 mutex_exit(&mg->mg_lock);
842 metaslab_group_sort(metaslab_group_t *mg, metaslab_t *msp, uint64_t weight)
851 mutex_enter(&mg->mg_lock);
852 ASSERT(msp->ms_group == mg);
853 avl_remove(&mg->mg_metaslab_tree, msp);
855 avl_add(&mg->mg_metaslab_tree, msp);
856 mutex_exit(&mg->mg_lock);
867 metaslab_group_fragmentation(metaslab_group_t *mg)
869 vdev_t *vd = mg->mg_vd;
902 metaslab_group_allocatable(metaslab_group_t *mg, metaslab_group_t *rotor,
905 spa_t *spa = mg->mg_vd->vdev_spa;
906 metaslab_class_t *mc = mg->mg_class;
929 if (mg->mg_allocatable) {
932 uint64_t qmax = mg->mg_max_alloc_queue_depth;
941 if (mg->mg_no_free_space)
944 qdepth = refcount_count(&mg->mg_alloc_queue_depth);
962 for (mgp = mg->mg_next; mgp != rotor; mgp = mgp->mg_next) {
1429 metaslab_init(metaslab_group_t *mg, uint64_t id, uint64_t object, uint64_t txg,
1432 vdev_t *vd = mg->mg_vd;
1468 metaslab_group_add(mg, ms);
1471 ms->ms_ops = mg->mg_class->mc_ops;
1506 metaslab_group_t *mg = msp->ms_group;
1508 metaslab_group_remove(mg, msp);
1513 vdev_space_update(mg->mg_vd, -space_map_allocated(msp->ms_sm),
1650 metaslab_group_t *mg = msp->ms_group;
1651 vdev_t *vd = mg->mg_vd;
1781 metaslab_group_preload(metaslab_group_t *mg)
1783 spa_t *spa = mg->mg_vd->vdev_spa;
1785 avl_tree_t *t = &mg->mg_metaslab_tree;
1789 taskq_wait(mg->mg_taskq);
1793 mutex_enter(&mg->mg_lock);
1824 mutex_exit(&mg->mg_lock);
1825 VERIFY(taskq_dispatch(mg->mg_taskq, metaslab_preload,
1827 mutex_enter(&mg->mg_lock);
1830 mutex_exit(&mg->mg_lock);
2000 metaslab_group_t *mg = msp->ms_group;
2001 vdev_t *vd = mg->mg_vd;
2066 metaslab_group_histogram_verify(mg);
2067 metaslab_class_histogram_verify(mg->mg_class);
2068 metaslab_group_histogram_remove(mg, msp);
2097 metaslab_group_histogram_add(mg, msp);
2098 metaslab_group_histogram_verify(mg);
2099 metaslab_class_histogram_verify(mg->mg_class);
2134 metaslab_group_t *mg = msp->ms_group;
2135 vdev_t *vd = mg->mg_vd;
2221 metaslab_group_sort(mg, msp, metaslab_weight(msp));
2226 metaslab_sync_reassess(metaslab_group_t *mg)
2228 metaslab_group_alloc_update(mg);
2229 mg->mg_fragmentation = metaslab_group_fragmentation(mg);
2234 metaslab_group_preload(mg);
2267 metaslab_group_t *mg = vdev_lookup_top(spa, vdev)->vdev_mg;
2268 if (!mg->mg_class->mc_alloc_throttle_enabled)
2271 (void) refcount_add(&mg->mg_alloc_queue_depth, tag);
2281 metaslab_group_t *mg = vdev_lookup_top(spa, vdev)->vdev_mg;
2282 if (!mg->mg_class->mc_alloc_throttle_enabled)
2285 (void) refcount_remove(&mg->mg_alloc_queue_depth, tag);
2297 metaslab_group_t *mg = vdev_lookup_top(spa, vdev)->vdev_mg;
2298 VERIFY(refcount_not_held(&mg->mg_alloc_queue_depth, tag));
2304 metaslab_group_alloc(metaslab_group_t *mg, uint64_t asize,
2307 spa_t *spa = mg->mg_vd->vdev_spa;
2310 avl_tree_t *t = &mg->mg_metaslab_tree;
2317 if (DVA_GET_VDEV(&dva[i]) == mg->mg_vd->vdev_id) {
2326 mutex_enter(&mg->mg_lock);
2330 "requirement: vdev %llu, txg %llu, mg %p, "
2333 mg->mg_vd->vdev_id, txg,
2334 mg, msp, asize, msp->ms_weight);
2335 mutex_exit(&mg->mg_lock);
2360 mutex_exit(&mg->mg_lock);
2410 vdev_dirty(mg->mg_vd, VDD_METASLAB, msp, txg);
2426 metaslab_group_t *mg, *rotor;
2474 mg = vd->vdev_mg;
2477 mg->mg_next != NULL)
2478 mg = mg->mg_next;
2480 mg = mc->mc_rotor;
2484 mg = vd->vdev_mg->mg_next;
2486 mg = mc->mc_rotor;
2493 if (mg->mg_class != mc || mg->mg_activation_count <= 0)
2494 mg = mc->mc_rotor;
2496 rotor = mg;
2500 ASSERT(mg->mg_activation_count == 1);
2501 vd = mg->mg_vd;
2522 allocatable = metaslab_group_allocatable(mg, rotor,
2529 ASSERT(mg->mg_initialized);
2541 ASSERT(mg->mg_class == mc);
2552 uint64_t offset = metaslab_group_alloc(mg, asize, txg,
2555 mutex_enter(&mg->mg_lock);
2557 mg->mg_failed_allocations++;
2572 mg->mg_no_free_space = B_TRUE;
2575 mg->mg_allocations++;
2576 mutex_exit(&mg->mg_lock);
2605 mg->mg_bias = ((cu - vu) *
2606 (int64_t)mg->mg_aliquot) / 100;
2608 mg->mg_bias = 0;
2612 mg->mg_aliquot + mg->mg_bias) {
2613 mc->mc_rotor = mg->mg_next;
2625 mc->mc_rotor = mg->mg_next;
2627 } while ((mg = mg->mg_next) != rotor);