mirror of
https://github.com/pgbackrest/pgbackrest.git
synced 2024-12-14 10:13:05 +02:00
be90028100
* repo-* options are now indexed although only one is allowed. * List deprecated option names in documentation and command-line help.
128 lines
4.7 KiB
Perl
128 lines
4.7 KiB
Perl
####################################################################################################################################
|
|
# I/O Performance Tests
|
|
####################################################################################################################################
|
|
package pgBackRestTest::Module::Performance::PerformanceIoTest;
|
|
use parent 'pgBackRestTest::Env::ConfigEnvTest';
|
|
|
|
####################################################################################################################################
|
|
# Perl includes
|
|
####################################################################################################################################
|
|
use strict;
|
|
use warnings FATAL => qw(all);
|
|
use Carp qw(confess);
|
|
use English '-no_match_vars';
|
|
|
|
use Storable qw(dclone);
|
|
use Time::HiRes qw(gettimeofday);
|
|
|
|
use pgBackRest::Common::Log;
|
|
use pgBackRest::Config::Config;
|
|
use pgBackRest::Protocol::Helper;
|
|
use pgBackRest::Protocol::Storage::Helper;
|
|
use pgBackRest::Storage::Filter::Gzip;
|
|
use pgBackRest::Storage::Filter::Sha;
|
|
use pgBackRest::Storage::Helper;
|
|
|
|
use pgBackRestTest::Common::ExecuteTest;
|
|
use pgBackRestTest::Common::RunTest;
|
|
|
|
####################################################################################################################################
|
|
# initModule
|
|
####################################################################################################################################
|
|
sub initModule
|
|
{
|
|
my $self = shift;
|
|
|
|
# Load reference page data
|
|
my $tPageBin = ${storageTest()->get($self->dataPath() . '/filecopy.table.bin')};
|
|
|
|
# Create large test file
|
|
$self->{iTableLargeSize} = 32;
|
|
$self->{strTableLargeFile} = 'table-large.bin';
|
|
|
|
my $oFileWrite = storageTest()->openWrite($self->{strTableLargeFile});
|
|
|
|
for (my $iIndex = 0; $iIndex < $self->{iTableLargeSize}; $iIndex++)
|
|
{
|
|
$oFileWrite->write(\$tPageBin);
|
|
}
|
|
|
|
$oFileWrite->close();
|
|
}
|
|
|
|
####################################################################################################################################
|
|
# run
|
|
####################################################################################################################################
|
|
sub run
|
|
{
|
|
my $self = shift;
|
|
|
|
################################################################################################################################
|
|
if ($self->begin("copy"))
|
|
{
|
|
# Setup the remote for testing remote storage
|
|
$self->optionTestSet(CFGOPT_STANZA, $self->stanza());
|
|
$self->optionTestSet(CFGOPT_PG_PATH, $self->testPath());
|
|
$self->optionTestSet(CFGOPT_REPO_PATH, $self->testPath());
|
|
$self->optionTestSet(CFGOPT_LOG_PATH, $self->testPath());
|
|
$self->optionTestSet(CFGOPT_REPO_HOST, 'localhost');
|
|
$self->optionTestSet(CFGOPT_REPO_HOST_USER, $self->backrestUser());
|
|
$self->configTestLoad(CFGCMD_ARCHIVE_PUSH);
|
|
|
|
protocolGet(CFGOPTVAL_REMOTE_TYPE_BACKUP, undef, {strBackRestBin => $self->backrestExe()});
|
|
storageRepo();
|
|
|
|
# Setup file info
|
|
my $strFile = $self->{strTableLargeFile};
|
|
my $strFileCopy = "${strFile}.copy";
|
|
|
|
my $iRunTotal = 1;
|
|
&log(INFO, "time is average of ${iRunTotal} run(s)");
|
|
|
|
foreach my $bGzip (false, true)
|
|
{
|
|
foreach my $bRemote (false, true)
|
|
{
|
|
my $rhyFilter;
|
|
|
|
push(@{$rhyFilter}, {strClass => STORAGE_FILTER_SHA});
|
|
push(@{$rhyFilter}, {strClass => STORAGE_FILTER_GZIP, rxyParam => [{iLevel => 6}]}) if ($bGzip);
|
|
|
|
my $lTimeTotal = 0;
|
|
my $lTimeBegin;
|
|
|
|
for (my $iIndex = 0; $iIndex < $iRunTotal; $iIndex++)
|
|
{
|
|
# Get the remote or local for writing
|
|
my $oStorageWrite = $bRemote ? storageRepo() : storageTest();
|
|
|
|
# Start the timer
|
|
$lTimeBegin = gettimeofday();
|
|
|
|
# Copy the file
|
|
storageTest()->copy(
|
|
storageTest()->openRead($strFile, {rhyFilter => $rhyFilter}),
|
|
$oStorageWrite->openWrite($strFileCopy));
|
|
|
|
# Record time
|
|
$lTimeTotal += gettimeofday() - $lTimeBegin;
|
|
|
|
# Remove file so it can be copied again
|
|
executeTest("sudo rm " . $oStorageWrite->pathGet($strFileCopy));
|
|
}
|
|
|
|
# Calculate out output metrics
|
|
my $fExecutionTime = int($lTimeTotal * 1000 / $iRunTotal) / 1000;
|
|
my $fGbPerHour = int((60 * 60) * 1000 / ((1024 / $self->{iTableLargeSize}) * $fExecutionTime)) / 1000;
|
|
|
|
&log(INFO, "sha1 1, gz ${bGzip}, rmt ${bRemote}: ${fExecutionTime}s, ${fGbPerHour} GB/hr");
|
|
}
|
|
}
|
|
|
|
# Destroy protocol object
|
|
protocolDestroy();
|
|
}
|
|
}
|
|
|
|
1;
|