s3cmd (& xargs)で多重度を変えてS3にアップロードしてみる」の記事を書いたところ、
Facebookにて貴重なアドバイスを頂きました。

そこで今回、GNU parallelも試してみることにしました。

ダウンロード先は、GNU Project Archivesになります。

○インストール前の準備

# yum -y install make
...
# cd /usr/local/src/
# curl -OL http://ftp.gnu.org/gnu/parallel/parallel-20130122.tar.bz2
...
# bunzip2 parallel-20130122.tar.bz2
# tar xvf parallel-20130122.tar
...
# cd parallel-20130122

○./configureの実施

# ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
configure: creating ./config.status
config.status: creating Makefile
config.status: creating src/Makefile
config.status: creating config.h
config.status: config.h is unchanged

○makeの実施

# make
make all-recursive
make[1]: ディレクトリ `/usr/local/src/parallel-20130122' に入ります
Making all in src
make[2]: ディレクトリ `/usr/local/src/parallel-20130122/src' に入ります
pod2man --release='20130122' --center='parallel'
--section=1 ./parallel.pod > ./parallel.1
pod2man --release='20130122' --center='parallel'
--section=1 ./sem.pod > ./sem.1
pod2man --release='20130122' --center='parallel'
--section=1 ./sql > ./sql.1
pod2man --release='20130122' --center='parallel'
--section=1 ./niceload.pod > ./niceload.1
pod2html ./parallel.pod > ./parallel.html
rm -f ./pod2htm*
pod2html ./sem.pod > ./sem.html
rm -f ./pod2htm*
pod2html ./sql > ./sql.html
rm -f ./pod2htm*
pod2html ./niceload.pod > ./niceload.html
rm -f ./pod2htm*
make[2]: ディレクトリ `/usr/local/src/parallel-20130122/src' から出ます
make[2]: ディレクトリ `/usr/local/src/parallel-20130122' に入ります
make[2]: ディレクトリ `/usr/local/src/parallel-20130122' から出ます
make[1]: ディレクトリ `/usr/local/src/parallel-20130122' から出ます

○make installの実施

# make install
Making install in src
make[1]: ディレクトリ `/usr/local/src/parallel-20130122/src' に入ります
make[2]: ディレクトリ `/usr/local/src/parallel-20130122/src' に入ります
/bin/mkdir -p '/usr/local/bin'
/usr/bin/install -c parallel sem sql niceload '/usr/local/bin'
/bin/mkdir -p '/usr/local/share/doc/parallel'
/usr/bin/install -c -m 644 parallel.html sem.html sql.html niceload.html parallel.texi sem.texi sql.texi niceload.texi '/usr/local/share/doc/parallel'
/bin/mkdir -p '/usr/local/share/man/man1'
/usr/bin/install -c -m 644 parallel.1 sem.1 sql.1 niceload.1 '/usr/local/share/man/man1'
make[2]: ディレクトリ `/usr/local/src/parallel-20130122/src' から出ます
make[1]: ディレクトリ `/usr/local/src/parallel-20130122/src' から出ます
make[1]: ディレクトリ `/usr/local/src/parallel-20130122' に入ります
make[2]: ディレクトリ `/usr/local/src/parallel-20130122' に入ります
make[2]: `install-exec-am' に対して行うべき事はありません.
make[2]: `install-data-am' に対して行うべき事はありません.
make[2]: ディレクトリ `/usr/local/src/parallel-20130122' から出ます
make[1]: ディレクトリ `/usr/local/src/parallel-20130122' から出ます

○コマンドの確認

# parallel --version
GNU parallel 20130122
Copyright (C) 2007,2008,2009,2010,2011,2012 Ole Tange and Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
GNU parallel comes with no warranty.

Web site: http://www.gnu.org/software/parallel

When using GNU Parallel for a publication please cite:

O. Tange (2011): GNU Parallel - The Command-Line Power Tool,
;login: The USENIX Magazine, February 2011:42-47.

○s3cmdを用いてアップロード

# time find -name "test-*" | parallel -P 8 s3cmd --no-progress put {} s3://www.suz-lab.com/tmp/
File './test-000030' stored as 's3://www.suz-lab.com/tmp/test-000030' (10485760 bytes in 1.0 seconds, 10.06 MB/s) [1 of 1]
...
File './test-000007' stored as 's3://www.suz-lab.com/tmp/test-000007' (10485760 bytes in 5.5 seconds, 1854.66 kB/s) [1 of 1]

real 0m9.085s
user 0m5.421s
sys 0m2.848s

冒頭で紹介したブログ記事のものと同様の処理(多重度)をしています。
(同様にt1.microです)

time find -name "test-*" | xargs -L1 -P8 -i s3cmd --no-progress put {} s3://www.suz-lab.com/tmp/

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら