Copy speeds vary according to copy size

Joined
May 30, 2015
Messages
5
Hi

Noticed something strange. When I copy a single file (ex. around 1GB) the copy process to the truenas server goes flawless at max speed (+- 95% of 1Gbs)
truenas_single.fw.png


But, when I try to copy a bunch of large files at once (let's say 5, all around 1GB in size) this happens
truenas_large.fw.png

Constant dipping of the transfer speed, more times than there are files to copy, so it can't be some sort of delay between the files.

Truenas server:
- IBM M1015
- 4TB mirror WD drives
- 32GB ram

Any ideas what this could be?
 

amichelf

Dabbler
Joined
Apr 10, 2020
Messages
24
I am not sure if this has something to do with the way the Windows SMB client copies the data. If you are coping the data from aharddiskt it might be that your local disk might be the bottleneck. When you use robocopy with the /mt switch do you see different results?

Code:
robocopy src dest /mt:8

amichelf
 

c77dk

Patron
Joined
Nov 27, 2019
Messages
468
How far from eachother are the dips?

My guess is your disks might not be able to keep up and the dips are the TXGs being flushed to disk.
 
Joined
May 30, 2015
Messages
5
How far from eachother are the dips?

My guess is your disks might not be able to keep up and the dips are the TXGs being flushed to disk.

Hard to say, would need to time it :) I do have to say, I don't have a dedicated cache/zil/slog, as I think I don't really need this with my kind of data I think? (video files), so most files will be viewed once or twice, with a lot of time between.

Is there a way I can check these flushes in a log?
 

HoneyBadger

actually does care
Administrator
Moderator
iXsystems
Joined
Feb 6, 2014
Messages
5,112
Hard to say, would need to time it :) I do have to say, I don't have a dedicated cache/zil/slog, as I think I don't really need this with my kind of data I think? (video files), so most files will be viewed once or twice, with a lot of time between.

Is there a way I can check these flushes in a log?

Try creating and running Adam Leventhal's dtrace scripts for checking dirty data amount and txg duration.

Code:
txg-syncing
{
        this->dp = (dsl_pool_t *)arg0;
}

txg-syncing
/this->dp->dp_spa->spa_name == $$1/
{
        printf("%4dMB of %4dMB used", this->dp->dp_dirty_total / 1024 / 1024,
            `zfs_dirty_data_max / 1024 / 1024);
}

Code:
txg-syncing
/((dsl_pool_t *)arg0)->dp_spa->spa_name == $$1/
{
        start = timestamp;
}

txg-synced
/start && ((dsl_pool_t *)arg0)->dp_spa->spa_name == $$1/
{
        this->d = timestamp - start;
        printf("sync took %d.%02d seconds", this->d / 1000000000,
            this->d / 10000000 % 100);
}

Run them with dtrace -s scriptname.d and post some sample results during a copy showing the ramp from "fast" to "slow" to "stalling" - I bet your drives are having difficulty keeping up with a sustained 112MB/s.

How full is your pool, and what does a zpool list show for your free space fragmentation (FRAG%) column?
 
Top