Exemplo n.º 1
0
Arquivo: lvmtsd.c Projeto: Auboo/lvmts
void print_extents(struct extent_info_t *extent_info)
{
    struct extent_score_t *extent_score;

    extent_score = convert_extent_info_to_extent_score(extent_info);

    qsort(extent_score, EXTENTS, sizeof(struct extent_score_t), extent_cmp);

    init_le_to_pe();

    time_t res;

    res = time(NULL);

    printf("\n\n");
    printf("%s", asctime(localtime(&res)));
    printf("%i most active physical extents: (from most to least)\n", ext_to_print);
    for(int i=EXTENTS-1, num=0; num<ext_to_print; i--) {

        struct pv_info *ret;

        if(!extent_score[i].read_score && !extent_score[i].write_score)
            break;

        ret = LE_to_PE(vg_name, lv_name, extent_score[i].offset);

        if(num%10==9)
            printf("%lu\n", ret->start_seg);
        else
            printf("%lu:", ret->start_seg);

        num++;
        free(ret->pv_name);
        free(ret);
    }
    printf("\n\n");

    qsort(extent_score, EXTENTS, sizeof(struct extent_score_t), extent_read_cmp);

    printf("%i most read extents (from most to least):\n", ext_to_print);
    for(int i=EXTENTS-1, num=0; num<ext_to_print; i--) {

        struct pv_info *ret;

        if(!extent_score[i].read_score)
            break;

        ret = LE_to_PE(vg_name, lv_name, extent_score[i].offset);

        if(num%10==9)
            printf("%lu\n", ret->start_seg);
        else
            printf("%lu:", ret->start_seg);

        num++;
        free(ret->pv_name);
        free(ret);
    }
    printf("\n\n");

    qsort(extent_score, EXTENTS, sizeof(struct extent_score_t), extent_write_cmp);
    printf("%i most write extents (from most to least):\n", ext_to_print);
    for(int i=EXTENTS-1, num=0; num<ext_to_print; i--) {

        struct pv_info *ret;

        if(!extent_score[i].write_score)
            break;

        ret = LE_to_PE(vg_name, lv_name, extent_score[i].offset);

        if(num%10==9)
            printf("%lu\n", ret->start_seg);
        else
            printf("%lu:", ret->start_seg);

        num++;
        free(ret->pv_name);
        free(ret);
    }

    free(extent_score);
    le_to_pe_exit();
}
Exemplo n.º 2
0
Arquivo: lvmtscat.c Projeto: nlm/lvmts
int
main(int argc, char **argv)
{
    int ret = 0;
    int n;
    double mean_lifetime = 3 * 24 * 60 * 60;

    if (parse_arguments(argc, argv))
        return 1;

    struct activity_stats *as = NULL;

    if (file == NULL) {
        fprintf(stderr, "No file name provided\n");
        usage();
        return 1;
    }

    if (!print_le && (!lv_name || !vg_name)) {
        fprintf(stderr, "You must ask for logical extents or provide volume"
                " group and logical volume name.\n");
        usage();
        return 1;
    }

    struct program_params pp = { .lvm2_handle = NULL };

    if (!print_le) {
        init_le_to_pe(&pp);
    }

    n = read_activity_stats(&as, file);
    assert(!n);

    struct block_scores *bs = NULL;

    if(get_max)
        get_best_blocks_with_max_score(as, &bs, blocks, read_mult,
                                       write_mult, mean_lifetime, max_score);
    else
        get_best_blocks(as, &bs, blocks, read_mult, write_mult, mean_lifetime);

    if (pvmove_output) {
        if (print_le) {
            printf("%llu", bs[0].offset);
            for (int i=1; i< blocks; i++) {
                printf(":%llu", bs[i].offset);
            }
            printf("\n");
        } else {
            struct pv_info *pvi;
            struct pv_info *pvn;
            pvi = LE_to_PE(vg_name, lv_name, bs[0].offset);
            printf("%s:%llu", pvi->pv_name, pvi->start_seg);
            for (int i=1; i<blocks; i++) {
                pvn = LE_to_PE(vg_name, lv_name, bs[i].offset);
                if (!pvn)
                    continue;
                if (!strcmp(pvi->pv_name, pvn->pv_name)) {
                    printf(":%llu", pvn->start_seg);
                    pv_info_free(pvn);
                    continue;
                } else {
                    printf("\n%s:%llu", pvn->pv_name, pvn->start_seg);
                    pv_info_free(pvi);
                    pvi = pvn;
                    continue;
                }
            }
            printf("\n");
            pv_info_free(pvi);
        }
    } else {
        if (!print_le) {
            fprintf(stderr, "Unsupported combination of parameters"
                    " (add --pvmove or --LE)\n");
        } else
            print_block_scores(bs, blocks);
    }

    free(bs);
    bs = NULL;

    //dump_activity_stats(as);

    destroy_activity_stats(as);
    as = NULL;

    if (!print_le) {
        le_to_pe_exit(&pp);
    }

    return ret;
}
Exemplo n.º 3
0
int main(int argc, char **argv)
{
    struct program_params pp = { .lvm2_handle = NULL };

    init_le_to_pe(&pp);

    if (argc != 4) {
        printf("Usage: %s VolumeGroupName LogicalVolumeName"
            " LogicalVolumeExtent\n", argv[0]);
        le_to_pe_exit(&pp);
        return 1;
    }

    for(int i=0; i < pv_segments_num; i++)
        if(!strcmp(pv_segments[i].lv_name, argv[1]))
            printf("%s %li-%li (%li-%li)\n", pv_segments[i].pv_name,
                pv_segments[i].pv_start,
                pv_segments[i].pv_start+pv_segments[i].pv_length,
                pv_segments[i].lv_start,
                pv_segments[i].lv_start+pv_segments[i].pv_length);

    if (argc <= 2)
        return 0;
    struct pv_info *pv_info;
    pv_info = LE_to_PE(argv[1], argv[2], atoi(argv[3]));
    if (pv_info)
        printf("LE no %i of %s-%s is at: %s:%li\n", atoi(argv[3]), argv[1], argv[2],
            pv_info->pv_name, pv_info->start_seg);
    else
        printf("no LE found\n");

    printf("vg: %s, extent size: %lu bytes\n", argv[1], get_pe_size(argv[1]));

    long int free_extents = get_free_extent_number(argv[1], pv_info->pv_name);
    printf("vg: %s, pv: %s, free space: %lue (%luB)\n", argv[1],
        pv_info->pv_name,
        free_extents,
        free_extents * get_pe_size(argv[1]));

    long int used_extents = get_used_space_on_pv(argv[1], argv[2],
        pv_info->pv_name);
    printf("Space used by lv %s on pv %s: %lue (%luB)\n",
        argv[2],
        pv_info->pv_name,
        used_extents,
        used_extents * get_pe_size(argv[1]));

    struct le_info le_inf;

    le_inf = get_first_LE_info(argv[1], argv[2], pv_info->pv_name);

    printf("First LE on %s is %li at PE %li\n",
        le_inf.dev, le_inf.le, le_inf.pe);

    long int optimal_pe = le_inf.pe + atoi(argv[3]) - le_inf.le;

    printf("Optimal position for LE %i is at %s:%li\n", atoi(argv[3]),
        le_inf.dev, optimal_pe);

    printf("%s:%li is ", le_inf.dev, optimal_pe);

    if (optimal_pe == pv_info->start_seg) {
        printf("allocated correctly\n");
    } else {
        struct le_info optimal;
        optimal = get_PE_allocation(argv[1],  pv_info->pv_name, optimal_pe);

        if (optimal.dev == NULL)
            printf("after the end of the device\n");
        else if (!strcmp(optimal.lv_name, "free"))
            printf("free\n");
        else
            printf("allocated to %s, LE: %li\n", optimal.lv_name, optimal.le);

    }


    pv_info_free(pv_info);

    le_to_pe_exit(&pp);

    lvm2_exit(pp.lvm2_handle);

    return 0;
}