Package: tar
Version: 1.34+dfsg-1.2+deb12u1
Severity: normal
X-Debbugs-Cc: hpal...@seznam.cz

Dear Maintainer,

While extracting big .tar.zst archive (23GB with lot of small files, created
with same GNU tar) with tar xpf archive.tar.zst the tar starts gradually
using 100% user% CPU, while disk and decompressor is idle. This slow
down increases with time - making practically impossible to extract such
archive in reasonable time

   * What exactly did you do (or not do) that was effective (or
     ineffective)?

There was easy workaround - using bsdtar - it utilized both disk and zstd 
decompressor
- unpacking .tar.zst in expected time.

It was not possible to use cpio -H ustar -iVdm, because it does not
understand BigLing extension of GNU tar.

   * What was the outcome of this action?

GNU tar extracting archive slowed down eating 100% user CPU (disk idle) making 
impossible
to extract archive in reasonable time. There was nearly no I/O activity,
meaning that tar was busy with some housekeeping but not extracting
files.

   * What outcome did you expect instead?

I expect that tar will extract files utilizing all resources - bsdtar utilizes 
both
disk I/O and zstd decompress process - finishing extraction in finite time.

Debug information:

- here is typical top output - only user% CPU used (zstd somewhere at
  bottom of list):

top - 16:21:47 up  1:09,  7 users,  load average: 1.19, 1.12, 1.22
Tasks: 223 total,   2 running, 221 sleeping,   0 stopped,   0 zombie
%Cpu(s):100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st 
MiB Mem :   7939.9 total,    176.2 free,    573.7 used,   7499.9 buff/cache     
MiB Swap:   8192.0 total,   8191.5 free,      0.5 used.   7366.2 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
   3341 root      20   0   20700  19188   2144 R 100.0   0.2  45:52.56 tar
   5745 root      20   0    8608   4960   2916 R  12.5   0.1   0:00.02 top
      1 root      20   0  104444  14188   8812 S   0.0   0.2   0:46.04 systemd

- lsof - and /proc/PID/fd - most of time there is no file open for writing - 
another
  proof that GNU tar is not spending time extracting content.

- output from perf record -g and perf report -g

Samples: 334K of event 'cycles', Event count (approx.): 167377283731
  Children      Self  Command  Shared Object      Symbol
-   48.18%     0.00%  tar      [unknown]          [.] 0x742f646c6975622f
   - 0x742f646c6975622f
        43.37% find_delayed_link_source
-   48.00%    47.68%  tar      tar                [.] extract_link
     extract_link
-   43.37%    43.07%  tar      tar                [.] find_delayed_link_source
     43.07% 0x742f646c6975622f
        find_delayed_link_source
-    4.10%     4.09%  tar      libc.so.6          [.] __strcmp_sse2
     4.08% 0x742f646c6975622f
+    3.52%     0.01%  tar      [kernel.kallsyms]  [k] 
entry_SYSCALL_64_after_hwframe
+    3.51%     0.01%  tar      [kernel.kallsyms]  [k] do_syscall_64
+    1.67%     0.01%  tar      libc.so.6          [.] linkat
+    1.62%     0.00%  tar      [kernel.kallsyms]  [k] __x64_sys_linkat          
                                     

>From perf report I suspect that one or both these functions in GNU TAR cause 
>this problem:

a) extract_link
b) find_delayed_link_source

Unfrotunately I'm unable to upload such archive for testing - it is too
big. In my case I basically packed complete Yocto Linux source and build
files to .tar.zst

-- System Information:
Debian Release: 12.6
  APT prefers stable-updates
  APT policy: (500, 'stable-updates'), (500, 'stable-security'), (500, 
'stable-debug'), (500, 'stable')
Architecture: amd64 (x86_64)

Kernel: Linux 6.1.0-23-amd64 (SMP w/2 CPU threads; PREEMPT)
Locale: LANG=C, LC_CTYPE=C.UTF-8 (charmap=UTF-8), LANGUAGE not set
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages tar depends on:
ii  libacl1      2.3.1-3
ii  libc6        2.36-9+deb12u7
ii  libselinux1  3.4-1+b6

tar recommends no packages.

Versions of packages tar suggests:
ii  bzip2        1.0.8-5+b1
pn  ncompress    <none>
pn  tar-doc      <none>
pn  tar-scripts  <none>
ii  xz-utils     5.4.1-0.2

-- no debconf information

Reply via email to