Zilstat not working (FreeNAS-9.3-STABLE-201501162230)

Status
Not open for further replies.

depasseg

FreeNAS Replicant
Joined
Sep 16, 2014
Messages
2,874
It sounded like this update resolved the zilstat issue. And while I no longer get the quick dtrace error, it still doesn't work. I get the following error:

Code:
[root@freenas1] ~# zilstat -p tank
dtrace: invalid probe specifier
#pragma D option quiet
inline int OPT_time = 0;
inline int OPT_txg = 0;
inline int OPT_pool = 1;
inline int OPT_mega = 0;
inline int INTERVAL = 1;
inline int LINES = -1;
inline int COUNTER = -1;
inline int FILTER = 1;
inline string POOL = "tank";
dtrace:::BEGIN
{
    /* starting values */
    MEGA = 1000000;
    counts = COUNTER;
    secs = INTERVAL;
    interval = INTERVAL;
    interval == 0 ? interval++ : 1;
    line = 0;
    last_event[""] = 0;
    nused=0;
    nused_max_per_sec=0;
    nused_per_sec=0;
    size=0;
    size_max_per_sec=0;
    size_per_sec=0;
    syncops=0;
    size_4k=0;
    size_4k_32k=0;
    size_32k=0;
    OPT_txg ? printf("waiting for txg commit...\n") : 1;
}

/*
  * collect info when zil_lwb_write_start fires
  */
fbt::zil_lwb_write_start:entry
/OPT_pool == 0 || POOL == args[0]->zl_dmu_pool->dp_spa->spa_name/
{
     nused += args[1]->lwb_nused;
     nused_per_sec += args[1]->lwb_nused;
     size += args[1]->lwb_sz;
     size_per_sec += args[1]->lwb_sz;
     syncops++;
     args[1]->lwb_sz <= 4096 ? size_4k++ : 1;
     args[1]->lwb_sz > 4096 && args[1]->lwb_sz < 32768 ? size_4k_32k++ : 1;
     args[1]->lwb_sz >= 32768 ? size_32k++ : 1;
}

/*
* Timer
*/
profile:::tick-1sec
{
        OPT_txg ? secs++ : secs--;
        nused_per_sec > nused_max_per_sec ? nused_max_per_sec = nused_per_sec : 1;
        nused_per_sec = 0;
        size_per_sec > size_max_per_sec ? size_max_per_sec = size_per_sec : 1;
        size_per_sec = 0;
}

/*
* Print header
*/
profile:::tick-1sec
/OPT_txg == 0 && line == 0/
{
        /* print optional headers */
        OPT_time   ? printf("%-20s ", "TIME")  : 1;

        /* print header */
        OPT_mega  ? printf("%10s %10s %10s %10s %10s %10s",
                "N-MB", "N-MB/s", "N-Max-Rate",
                "B-MB", "B-MB/s", "B-Max-Rate") :
            printf("%10s %10s %10s %10s %10s %10s",
                "N-Bytes", "N-Bytes/s", "N-Max-Rate",
                "B-Bytes", "B-Bytes/s", "B-Max-Rate");
        printf(" %6s %6s %6s %6s\n",
                "ops", "<=4kB", "4-32kB", ">=32kB");
        line = LINES;
}

fbt::txg_quiesce:entry
/OPT_txg == 1 && POOL == args[0]->dp_spa->spa_name && line == 0/
{
        OPT_time  ? printf("%-20s ", "TIME")  : 1;

        OPT_mega  ? printf("%10s %10s %10s %10s %10s %10s %10s",
                "txg", "N-MB", "N-MB/s", "N-Max-Rate",
                "B-MB", "B-MB/s", "B-Max-Rate") :
            printf("%10s %10s %10s %10s %10s %10s %10s",
                "txg", "N-Bytes", "N-Bytes/s", "N-Max-Rate",
                "B-Bytes", "B-Bytes/s", "B-Max-Rate");
        printf(" %6s %6s %6s %6s\n",
                "ops", "<=4kB", "4-32kB", ">=32kB");
        line = LINES;
}

/*
  * Print Output
  */
profile:::tick-1sec
/OPT_txg == 0 && secs == 0/
{
        OPT_time  ? printf("%-20Y ", walltimestamp) : 1;
        OPT_mega  ?
            printf("%10d %10d %10d %10d %10d %10d",
                nused/MEGA, nused/(interval*MEGA), nused_max_per_sec/MEGA,
                size/MEGA, size/(interval*MEGA), size_max_per_sec/MEGA) :
            printf("%10d %10d %10d %10d %10d %10d",
                nused, nused/interval, nused_max_per_sec,
                size, size/interval, size_max_per_sec);
        printf(" %6d %6d %6d %6d\n",
                syncops, size_4k, size_4k_32k, size_32k);
        nused = 0;
        nused_per_sec = 0;
        nused_max_per_sec = 0;
        size=0;
        size_max_per_sec=0;
        size_per_sec=0;
        syncops=0;
        size_4k=0;
        size_4k_32k=0;
        size_32k=0;
        secs = INTERVAL;
        counts--;
        line--;
}

fbt::txg_quiesce:entry
/OPT_txg == 1 && POOL == args[0]->dp_spa->spa_name/
{
        secs <= 0 ? secs=1 : 1;
        OPT_time ? printf("%-20Y ", walltimestamp) : 1;
        OPT_mega ?
            printf("%10d %10d %10d %10d %10d %10d %10d", args[1],
                nused/MEGA, nused/(secs*MEGA), nused_max_per_sec/MEGA,
                size/MEGA, size/(secs*MEGA), size_max_per_sec/MEGA) :
            printf("%10d %10d %10d %10d %10d %10d %10d", args[1],
                nused, nused/secs, nused_max_per_sec,
                size, size/secs, size_max_per_sec);
        printf(" %6d %6d %6d %6d\n",
                syncops, size_4k, size_4k_32k, size_32k);
        nused = 0;
        nused_per_sec = 0;
        nused_max_per_sec = 0;
        size=0;
        size_max_per_sec=0;
        size_per_sec=0;
        syncops=0;
        size_4k=0;
        size_4k_32k=0;
        size_32k=0;
        secs = 0;
        counts--;
        line--;
}

/*
  * End of program
  */
profile:::tick-1sec
/OPT_txg == 0 && counts == 0/
{
        exit(0);
}
fbt::txg_quiesce:entry
/OPT_txg == 1 && counts == 0/
{
    exit(0);
}
: in action list: index 1 is out of range for fbt::zil_lwb_write_start:entry args[ ]
[root@freenas1] ~# 
 
D

dlavigne

Guest
It's my understanding that the fix fixed the traceback but there is still an outstanding issue that needs to be researched and resolved.
 

depasseg

FreeNAS Replicant
Joined
Sep 16, 2014
Messages
2,874
D

dlavigne

Guest
After some discussion with the devs, it seems that the latest fix to https://bugs.freenas.org/issues/7438 was supposed to fix this on existing systems (it is already fixed for new installs), but did not. Sean made the following suggestions:

If you need zilstat immediately, run this and reboot:

for disk in $(sysctl -n kern.disks); do
gpart show ${disk} | grep -q bios-boot && /usr/local/sbin/grub-install --modules="zfs part_gpt" /dev/${disk}
done

Alternately, wait for the next -STABLE update or install the latest -Nightlies train, and then switch back to the -STABLE.
 
Status
Not open for further replies.
Top