corrupted strace output
Jiri Horky
jiri.horky at gmail.com
Wed May 19 15:35:11 UTC 2010
Dear developers,
I've recently started to heavily use strace in order to investigate some
physicist applications. The application's execution is quite
complicated, resulting in a chain of ~12 processes ( a lot of wrapper
scripts around, pipes, etc).
I have noticed several strange things with resulting output. In all
examples below I didn't strip any lines, so they are always consecutive
lines from output file.
Strace is run with following parameters:
/usr/bin/strace -q -a1 -s0 -f -tttT -o//tmp/strace.file.2010-05-19.19339
-e
trace=open,creat,close,read,write,unlink,lseek,_llseek,dup,dup2,pipe,clone,fork,mkdir,clone,access,socket,stat,fstat
<application>
The strace version is strace-4.5.16-1.el5.1, on Scientific Linux SL
release 5.2 (Boron), kernel version is 2.6.18-164.15.1.el5, 64bit.
Please let me know if you need more information. I am also able to
provide the output file (500MB).
Best regards
Jiri Horky
1. Sometimes, (quite rarely, but still), interrupted system call from
process A is not followed (not counting calls for other processes) by
same resumed call in this process, but by another (sometimes even
interrupted) system call in the same process. This seems quite strange
to me, as I lived in impression, this is simply not possible. See example:
5299 1274263536.157783 _llseek(10, 0, <unfinished ...>
5301 1274263536.157805 write(1, ""..., 4096) = 4096 <0.000021>
5299 1274263536.157871 read(10, ""..., 4096) = 4096 <0.000006>
5301 1274263536.157903 write(1, ""..., 4096 <unfinished ...>
5299 1274263536.157916 read(10, ""..., 4096) = 4096 <0.000014>
2. Sometimes output for reads is corrupted, see example (missing
parameters).
1436 1274263414.645307 open("/proc/meminfo", O_RDONLY) = 7 <0.000063>
1436 1274263414.645534 read(7, ) = 777 <0.000030>
1436 1274263414.645620 close(7) = 0 <0.000010>
3. _llseeks output is not consistent if it ends up with ESPIPE. Notice
0xffce0520 instead of number in square brackets as usual. This is not a
big problem, but makes processing of strace output more difficult.
5299 1274263536.129730 _llseek(10, 0, 0xffce0520, SEEK_CUR) = -1 ESPIPE
(Illegal seek) <0.000005>
4. resumed _llseek is not marked as resumed, when ending with error.
5299 1274263536.157783 _llseek(10, 0, <unfinished ...>
5301 1274263536.157805 write(1, ""..., 4096) = 4096 <0.000021>
5299 1274263536.157871 read(10, ""..., 4096) = 4096 <0.000006>
5301 1274263536.157903 write(1, ""..., 4096 <unfinished ...>
5299 1274263536.157916 read(10, ""..., 4096) = 4096 <0.000014>
5299 1274263536.157960 _llseek(10, 0, 0xffce0520, SEEK_CUR) = -1 ESPIPE
(Illegal seek) <0.000003>
or:
5424 1274263555.912261 _llseek(39, 0, <unfinished ...>
5425 1274263555.912390
open("/storage/atlas/software/local/lib64/libglobus_gssapi_gsi_gcc32dbgpthr.so",
O_RDONLY <unfinished ...>
5424 1274263555.912418 _llseek(41, 0, 0xfff3e21c, SEEK_CUR) = -1 ESPIPE
(Illegal seek) <0.000004>
5. Comletely strange lines + parameters for writes:
5430 1274263558.275721 write(42, ""..., 131072) = 131072 <0.000268>
5430 1274263558.276869 write(42, ""..., 131072) = 131072 <0.000251>
5430 1274263558.278807 write(42, ""..., 131072) = 131072 <0.000306>
) = 0x12dc8 <0.000677>
5430 1274263558.279525 write(42, ""...,
131072{st_mode=S_IFIFO|S_ISUID|S_ISGID|S_ISVTX|013066600562,
st_size=8787907233347735880, ...}) = 131072 <0.000261>
5430 1274263558.281039 write(42, ""..., 131072) = 131072 <0.000251>
5430 1274263558.282405 write(42, ""..., 131072) = 131072 <0.000263>
5430 1274263558.283511 write(42, ""..., 131072) = 131072 <0.000248>
5430 1274263558.284693 write(42, ""..., 131072) = 131072 <0.000260>
5430 1274263558.285756 write(42, ""..., 131072) = 131072 <0.000269>
5430 1274263558.286859 write(42, ""..., 131072) = 131072 <0.000234>
5430 1274263558.287985 write(42, ""..., 131072) = 131072 <0.000275>
) = 0xb510 <0.000366>
) = 0x43e0 <0.000513>
5430 1274263558.289094 write(42, ""..., 131072) = 131072 <0.000252>
5430 1274263558.290229 write(42, ""..., 131072) = 131072 <0.000278>
5430 1274263558.291322 write(42, ""..., 131072) = 131072 <0.000237>
More information about the Strace-devel
mailing list