綾小路龍之介の素人思考

[xz] 並列数の選定

xzの圧縮は時間がかかる。リソースの許す限り並列に実行して、実際にかかる時間を減らしたい。

x bytes(1GB)のダミーファイルを作成し、y並列数分(20個)のコピーを作成。xargsで並列圧縮。時間はtimeで測定。圧縮速度zは圧縮対象の総ファイルサイズ/消費時間(user+sys)。x,y,zの比較を行う。

$ dd if=/dev/urandom of=dummy.dat count=1024 bs=1M
$ for i in `seq 0 19`; do file=`printf dummy_%03d.dat ${i}`; cp -a dummy.dat ${file}; done
$ find ~/ -name '*_*.dat' -print0 | sort -z | time -p xargs -0 -r -n 1 -P 0 xz -v -e -z -9

$ find ~/ -name '*_*.dat' -print0 | sort -z | xargs -0 -r -n 1 -P 1 xz -v -e -z -9
$ find ~/ -name '*_*.dat.xz' -print0 | sort -z | xargs -0 -r -n 1 -P 1 xz -v -d

yを変えてスワップの様子を観察。並列数の勝手な基準として、実行中プロセスがスワップアウトされない程度の並列数を採用することにする。xz -9e は圧縮用メモリとして約674 MiB (674MiB * 1048576B/MiB ~= 707MB) を使う。以下は 8GB のメモリを積むシステムで 12 並列 (707MB * 12 ~= 8481MB) させる例。topコマンドでプロセスごとにスワップアウト量を表示すると、xzの実行プロセスでスワップアウトしている事がわかる。

$ top -s -b -n 10
(snip)
top - 21:47:42 up  4:01,  4 users,  load average: 12.00, 12.01, 11.55
Tasks: 117 total,  14 running, 103 sleeping,   0 stopped,   0 zombie
%Cpu0  : 99.7 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.3 st
%Cpu1  : 99.7 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.3 st
%Cpu2  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  : 99.7 us,  0.3 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu4  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu5  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   8198040 total,  8061196 used,   136844 free,     1712 buffers
KiB Swap: 16774140 total,   574560 used, 16199580 free,   236604 cached

  PID USER      PR  NI  VIRT  RES  SHR SWAP S  %CPU %MEM    TIME+  COMMAND
 4325 hoge      20   0  682m 645m  944  29m R  50.5  8.1  14:07.55 xz -v -e -z -9 /home/hoge/*******************.pdf
 4319 hoge      20   0  682m 615m  944  58m R  50.2  7.7  14:15.19 xz -v -e -z -9 /home/hoge/*******************.pdf
 4320 hoge      20   0  682m 615m  944  58m R  50.2  7.7  14:05.30 xz -v -e -z -9 /home/hoge/*******************.pdf
 4321 hoge      20   0  682m 615m  944  58m R  50.2  7.7  14:14.00 xz -v -e -z -9 /home/hoge/*******************.pdf
 4322 hoge      20   0  682m 615m  944  58m R  50.2  7.7  14:05.38 xz -v -e -z -9 /home/hoge/*******************.pdf
 4326 hoge      20   0  682m 634m  944  39m R  50.2  7.9  13:53.26 xz -v -e -z -9 /home/hoge/*******************.pdf
 4316 hoge      20   0  682m 615m  944  58m R  49.9  7.7  14:11.34 xz -v -e -z -9 /home/hoge/*******************.pdf
 4317 hoge      20   0  682m 615m  944  58m R  49.9  7.7  14:10.44 xz -v -e -z -9 /home/hoge/*******************.pdf
 4318 hoge      20   0  682m 615m  944  58m R  49.9  7.7  14:11.12 xz -v -e -z -9 /home/hoge/*******************.pdf
 4323 hoge      20   0  682m 624m  944  50m R  49.9  7.8  14:01.32 xz -v -e -z -9 /home/hoge/*******************.pdf
 4324 hoge      20   0  682m 657m  932  16m R  49.9  8.2  13:53.88 xz -v -e -z -9 /home/hoge/*******************.pdf
 4327 hoge      20   0  682m 674m  932    0 R  49.9  8.4  14:03.33 xz -v -e -z -9 /home/hoge/*******************.pdf
(snip)

この時のvmstatの結果。si/soが時々出る感じ。

# vmstat 60
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
12  0 574284 132132   1912 236204    0    0  1790    25 1606  571 100  0  0  0
12  0 574272 141688   1976 228584    3    0  1728    31 1613  569 100  0  0  0
12  0 574232 121972   1992 248604    1    0  1763    28 1614  581 100  0  0  0
12  0 574192 129908   1988 241188    0    0  1713    29 1636  591 100  0  0  0
12  0 574148 138340   1988 232288    4    0  1719    28 1610  570 100  0  0  0
12  0 574112 120112   1996 250572    4    0  1707    26 1605  564 100  0  0  0
12  0 574096 127552   1960 243460    2    0  1730    31 1604  564 100  0  0  0
12  0 574084 131892   1952 238500    2    0  1789    26 1608  566 100  0  0  0
12  0 574028 132760   2896 236112    8    0  1834    29 1628  594 100  0  0  0
12  0 574028 142556   2904 226144    0    0  1719    27 1609  563 100  0  0  0
12  0 574028 123460   2392 246544    0    0  1741    28 1614  572 100  0  0  0
12  0 574028 133628   2032 236744    0    0  1749    29 1619  565 100  0  0  0
12  0 574028 140696   2024 229532    0    0  1728    25 1604  564 100  0  0  0
12  0 574028 122468   2040 248076    0    0  1724    26 1611  564 100  0  0  0
12  0 574024 130652   2032 239856    0    0  1711    26 1607  564 100  0  0  0
12  0 574024 142432   2016 227680    0    0  1711    24 1625  593 100  0  0  0
12  0 574012 125196   2032 245244    2    0  1717    31 1620  593 100  0  0  0
12  0 573984 134992   2032 234464    2    0  1734    25 1626  596 100  0  0  0
12  0 573964 141068   2024 228820    1    0  1746    28 1627  591 100  0  0  0
12  0 573940 123832   2048 246736    1    0  1708    28 1608  563 100  0  0  0
12  0 573908 133132   2032 236832    2    0  1721    28 1601  564 100  0  0  0
12  0 573856 139952   2040 229664    1    0  1742    29 1607  564 100  0  0  0
12  0 573832 144044   2016 225568    1    0  1818    26 1592  560 100  0  0  0
12  0 573800 127056   2040 243100    4    0  1719    34 1609  566 100  0  0  0
12  0 573660 132388   2056 236784   19    0  1777    23 1621  566 100  0  0  0
12  0 573588 139084   2056 229396    8    0  1750    33 1629  577 100  0  0  0
12  0 573560 118996   2068 250088    4    0  1757    26 1633  592 100  0  0  0
12  0 573548 130652   2056 238300    2    0  1742    29 1632  595 100  0  0  0
12  0 573532 135480   2048 232668    0    0  1741    29 1624  587 100  0  0  0
12  0 573508 145160   2040 223180    0    0  1749    23 1625  584 100  0  0  0
12  0 573484 144292   2032 223160    0    0  1841    33 1620  578 100  0  0  0
12  0 573456 127552   2064 240976    1    0  1775    25 1605  565 100  0  0  0
12  0 573432 131768   2072 236804    0    0  1766    29 1636  595 100  0  0  0
12  0 573428 138836   2080 229348    0    0  1749    25 1624  595 100  0  0  0

xzの出力には圧縮速度が表示される。およそ140KiB/sで12並列なので全体では1680KiB/s。これを一つの基準とする。

  100 %     9,578.7 KiB / 760.8 MiB = 0.012   143 KiB/s    1:30:52
  100 %     9,607.3 KiB / 762.5 MiB = 0.012   142 KiB/s    1:31:26
  100 %     9,480.0 KiB / 765.8 MiB = 0.012   142 KiB/s    1:31:45
  100 %     9,718.0 KiB / 761.6 MiB = 0.012   141 KiB/s    1:31:53
  100 %     9,666.3 KiB / 764.1 MiB = 0.012   142 KiB/s    1:32:05
  100 %     9,687.8 KiB / 763.3 MiB = 0.012   142 KiB/s    1:32:01
  100 %     9,528.0 KiB / 765.0 MiB = 0.012   142 KiB/s    1:32:05
  100 %     9,430.3 KiB / 767.3 MiB = 0.012   142 KiB/s    1:32:23
  100 %     9,400.5 KiB / 769.0 MiB = 0.012   141 KiB/s    1:32:45
  100 %     9,385.8 KiB / 767.5 MiB = 0.012   141 KiB/s    1:32:42
  100 %     9,482.4 KiB / 768.3 MiB = 0.012   140 KiB/s    1:33:51
  100 %     9,536.6 KiB / 768.2 MiB = 0.012   138 KiB/s    1:34:39
$ top -s -b -n 10
(snip)
top - 00:15:04 up  6:29,  4 users,  load average: 11.09, 11.09, 11.16
Tasks: 115 total,  13 running, 102 sleeping,   0 stopped,   0 zombie
%Cpu0  : 99.7 us,  0.3 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  : 99.7 us,  0.3 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  : 99.3 us,  0.7 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu4  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu5  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   8198040 total,  8054476 used,   143564 free,     2856 buffers
KiB Swap: 16774140 total,   357556 used, 16416584 free,   707528 cached

  PID USER      PR  NI  VIRT  RES  SHR SWAP S  %CPU %MEM    TIME+  COMMAND
 4456 hoge      20   0  682m 635m  944  38m R  81.7  7.9  39:22.33 xz -v -e -z -9 /home/hoge/*******************.pdf
 4459 hoge      20   0  682m 635m  944  38m R  57.5  7.9  39:51.85 xz -v -e -z -9 /home/hoge/*******************.pdf
 4454 hoge      20   0  682m 637m  944  36m R  53.9  8.0  39:04.71 xz -v -e -z -9 /home/hoge/*******************.pdf
 4452 hoge      20   0  682m 640m  944  33m R  52.9  8.0  39:01.11 xz -v -e -z -9 /home/hoge/*******************.pdf
 4455 hoge      20   0  682m 648m  932  25m R  52.9  8.1  39:50.16 xz -v -e -z -9 /home/hoge/*******************.pdf
 4458 hoge      20   0  682m 634m  944  39m R  50.6  7.9  39:25.82 xz -v -e -z -9 /home/hoge/*******************.pdf
 4453 hoge      20   0  682m 639m  944  34m R  50.3  8.0  39:40.34 xz -v -e -z -9 /home/hoge/*******************.pdf
 4451 hoge      20   0  682m 646m  944  27m R  49.9  8.1  39:47.57 xz -v -e -z -9 /home/hoge/*******************.pdf
 4457 hoge      20   0  682m 647m  932  26m R  49.9  8.1  39:28.45 xz -v -e -z -9 /home/hoge/*******************.pdf
 4450 hoge      20   0  682m 651m  944  22m R  49.6  8.1  39:58.86 xz -v -e -z -9 /home/hoge/*******************.pdf
 4460 hoge      20   0  682m 662m  932  11m R  49.6  8.3  39:31.50 xz -v -e -z -9 /home/hoge/*******************.pdf
(snip)
# vmstat 60
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
11  0 357568 145060   2776 705292    1    0  1831    33 1623  491 100  0  0  0
11  0 357556 119268   2848 732116    1    0  1831    32 1610  478 100  0  0  0
11  0 328940 835368   2888 674572    4    0  1822    32 1612  484 100  0  0  0

11並列の場合、およそ156KiB/sなので全体では1716KiB/s。12並列よりも高速。

  100 %     9,468.7 KiB / 685.5 MiB = 0.013   157 KiB/s    1:14:17
  100 %     9,525.2 KiB / 683.9 MiB = 0.014   157 KiB/s    1:14:20
  100 %     9,521.9 KiB / 686.3 MiB = 0.014   157 KiB/s    1:14:24
  100 %     9,577.3 KiB / 692.3 MiB = 0.014   158 KiB/s    1:14:40
  100 %     9,454.4 KiB / 687.2 MiB = 0.013   156 KiB/s    1:14:57
  100 %     9,626.2 KiB / 688.9 MiB = 0.014   156 KiB/s    1:15:10
  100 %     9,528.9 KiB / 690.6 MiB = 0.013   157 KiB/s    1:15:10
  100 %     9,498.4 KiB / 688.1 MiB = 0.013   156 KiB/s    1:15:24
  100 %     9,556.5 KiB / 684.6 MiB = 0.014   154 KiB/s    1:15:44
  100 %     9,538.8 KiB / 689.8 MiB = 0.014   155 KiB/s    1:15:54
  100 %     9,559.8 KiB / 691.5 MiB = 0.014   155 KiB/s    1:16:08

10並列の場合

top - 00:37:13 up  6:51,  4 users,  load average: 10.99, 10.86, 10.87
Tasks: 113 total,  12 running, 101 sleeping,   0 stopped,   0 zombie
%Cpu0  : 99.3 us,  0.7 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  : 99.7 us,  0.3 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu4  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu5  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   8198040 total,  8036348 used,   161692 free,     2808 buffers
KiB Swap: 16774140 total,    14064 used, 16760076 free,  1046056 cached

  PID USER      PR  NI  VIRT  RES  SHR SWAP S  %CPU %MEM    TIME+  COMMAND
 4567 hoge      20   0  682m 674m  928    0 R  84.8  8.4   7:20.44 xz -v -e -z -9 /home/hoge/*********************.pdf
 4568 hoge      20   0  682m 674m  928    0 R  63.8  8.4   7:06.72 xz -v -e -z -9 /home/hoge/*********************.pdf
 4575 hoge      20   0  682m 674m  928    0 R  63.8  8.4   7:04.75 xz -v -e -z -9 /home/hoge/*********************.pdf
 4570 hoge      20   0  682m 674m  928    0 R  63.5  8.4   7:13.51 xz -v -e -z -9 /home/hoge/*********************.pdf
 4566 hoge      20   0  682m 674m  928    0 R  61.2  8.4   7:15.41 xz -v -e -z -9 /home/hoge/*********************.pdf
 4573 hoge      20   0  682m 674m  928    0 R  58.8  8.4   7:10.29 xz -v -e -z -9 /home/hoge/*********************.pdf
 4572 hoge      20   0  682m 674m  928    0 R  57.2  8.4   7:12.47 xz -v -e -z -9 /home/hoge/*********************.pdf
 4569 hoge      20   0  682m 674m  928    0 R  50.2  8.4   7:17.02 xz -v -e -z -9 /home/hoge/*********************.pdf
 4571 hoge      20   0  682m 674m  928    0 R  49.5  8.4   7:07.88 xz -v -e -z -9 /home/hoge/*********************.pdf
 4574 hoge      20   0  682m 674m  928    0 R  45.9  8.4   7:02.30 xz -v -e -z -9 /home/hoge/*********************.pdf

10並列の場合、およそ260KiB/sなので全体では2600KiB/s。12,11並列よりも高速。

  100 %        10.4 MiB / 362.1 MiB = 0.029   267 KiB/s      23:06
  100 %        10.4 MiB / 356.4 MiB = 0.029   263 KiB/s      23:07
  100 %        10.4 MiB / 358.3 MiB = 0.029   261 KiB/s      23:27
  100 %        10.4 MiB / 359.3 MiB = 0.029   260 KiB/s      23:36
  100 %        10.4 MiB / 357.4 MiB = 0.029   256 KiB/s      23:47
  100 %        10.4 MiB / 361.2 MiB = 0.029   258 KiB/s      23:55
  100 %        10.4 MiB / 360.2 MiB = 0.029   256 KiB/s      24:02
  100 %        10.3 MiB / 364.9 MiB = 0.028   259 KiB/s      24:05
  100 %        10.4 MiB / 363.0 MiB = 0.029   255 KiB/s      24:15
  100 %        10.3 MiB / 364.0 MiB = 0.028   252 KiB/s      24:40

リファレンス

  1. Man page of FIND
  2. Man page of bzip2
  3. Ubuntu Manpage: xz, unxz, xzcat, lzma, unlzma, lzcat - tightly compress or expand files
  4. Cannot allocate memory xz - Google 検索
  5. Man page of XARGS
  6. Man page of BASH
  7. 複数のファイルのファイル名(拡張子)を一括で変更する。UNIX ( Linux FreeBSD )コマンドメモ|プログラムメモ
  8. Man page of SORT

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2010-07-27T15:13:44+09:00
  2. Modified: 2010-07-27T15:13:44+09:00
  3. Generated: 2017-05-06T23:09:19+09:00