You're right! It worked fine:

wansecur...@s2-replay02:~$ time tail -n 1 
/data/storage/ReplayDataVolume001/biggest_yet_file
hey there, second appendage of one line

real    0m0.003s
user    0m0.000s
sys     0m0.000s
wansecur...@s2-replay02:~$

-Robert


On Jan 4, 2010, at 11:36 AM, Tao Ma wrote:

> Hi Robert,
> Robert Smith wrote:
>> #
>> # strace tail -n 2
>> #
>> r...@s2-replay02:~# time strace -ttt tail -n 2 
>> /data/storage/ReplayDataVolume001/biggest_yet_file 2> 
>> strace_tail_biggest_yet_file.out
>> ^C                real    9m22.950s
>> user    0m44.300s
>> sys     1m24.470s
>> r...@s2-replay02:~# ls -aFl strace_tail_biggest_yet_file.out -rw-r--r-- 1 
>> root root 187251511 2010-01-03 19:07 strace_tail_biggest_yet_file.out
>> r...@s2-replay02:~# tail -f strace_tail_biggest_yet_file.out 
>> 1262567242.186934 lseek(3, 20962998501376, SEEK_SET) = 20962998501376
>> 1262567242.187022 read(3, 
>> "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 8192) 
>> = 8192
>> 1262567242.187433 lseek(3, 20962998493184, SEEK_SET) = 20962998493184
>> 1262567242.187524 read(3, 
>> "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 8192) 
>> = 8192
>> 1262567242.187928 lseek(3, 20962998484992, SEEK_SET) = 20962998484992
>> 1262567242.188017 read(3, 
>> "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 8192) 
>> = 8192
>> 1262567242.188424 lseek(3, 20962998476800, SEEK_SET) = 20962998476800
>> 1262567242.188513 read(3, 
>> "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 8192) 
>> = 8192
>> 1262567242.188946 lseek(3, 20962998468608, SEEK_SET) = 20962998468608
>> 1262567242.189034 read(3,  <unfinished ...>
>> ^C
>> r...@s2-replay02:~# tail -f strace_tail_biggest_yet_file.out
>       Thanks for the test.
>       I just tested it in my env and found the root cause. Joel's guess is 
> right. The problem is part of tail, and also part of the way the file is 
> created. ;)
> 
> IIRC, you created the test file by dd if=/dev/zero, so the content is filled 
> with '0' at the beginning.
> When you appended a line in the end, and "tail" wanted to find a line feed 
> before the last line I guess, but it can't find it, so it read 8192 again and 
> again from the end to head(you can see it from the log of strace). And it 
> will last for a long time.
> 
> Now, you can test what I have said easily in this way:
> Since you have appended 2 lines in this file, just do:
> 
> tail -n 1 /data/storage/ReplayDataVolume001/biggest_yet_file
> I think it will return as fast as you expect.
> 
> Regards,
> Tao
> 
>> That was 10 minutes of seek time. I can let it run longer if you want.
>> -Robert
>> On Jan 2, 2010, at 4:33 PM, Tao Ma wrote:
>>> Hi Robert,
>>>     Great thanks for your test. I haven't met with such a big volume ever 
>>> before. ;)
>>> 
>>> Robert Smith wrote:
>>>> Just thought I would let you guys know that creating a 20TB file was 
>>>> successful. I even appended data to the end of it. Any operations on the 
>>>> file are completely useless because they take way to long. A appended 
>>>> "hello" to the end of the file no problem, but tail -n 1 {filename} 
>>>> yielded nothing except a lot of disk read after 159minutes of waiting.
>>> I don't think 159 minutes is a good number.
>>> So could you please use "strace -tttt tail -n 1 biggest_yet_file"? Just 
>>> want to find out which system call last such a long time.
>>> And also could you please run such command to find the disk layout of that 
>>> file.
>>> echo 'stat biggest_yet_file'|debugfs.ocfs2 /dev/sdx
>>> sdx is your device of course.
>>> 
>>> btw, you said appending has no problem, so how long does it take?
>>> And also please run "strace -ttt" to it.
>>> 
>>> Regards,
>>> Tao
>>> 
>>>> I don't really even know if this is good information or common knowledge.
>>>> dd bs=1000M count=20000 if=/dev/zero 
>>>> of=/data/storage/ReplayDataVolume001/biggest_yet_file
>>>> r...@s2-replay02:/data/storage/ReplayDataVolume001# ls -aFl
>>>> total 1266312192
>>>> drwxr-xr-x 3 root root           3896 2009-12-31 23:31 ./
>>>> drwxr-xr-x 3 root root             88 2010-01-01 11:02 ../
>>>> -rw-r--r-- 1 root root     1048576000 2009-12-31 23:23 big_file
>>>> -rw-r--r-- 1 root root    10485760000 2009-12-31 23:24 bigger_file
>>>> -rw-r--r-- 1 root root   104857600000 2009-12-31 23:28 biggest_file
>>>> -rw-r--r-- 1 root root 20971520000006 2010-01-01 11:03 biggest_yet_file
>>>> drwxr-xr-x 2 root root           3896 2009-12-31 11:53 lost+found/
>>>> r...@s2-replay02:/data/storage/ReplayDataVolume001#
>>>> -Robert
>>>> On Jan 1, 2010, at 5:08 AM, Joel Becker wrote:
>>>>> On Fri, Jan 01, 2010 at 04:36:02AM +0900, Robert Smith wrote:
>>>>>> Oh, I found it at line #2163 of fs/ocfs2/super.c.
>>>>>> 
>>>>>> I imagine that something as simple as the following would work, but 
>>>>>> perhaps I'll wait for your feedback.
>>>>>> 
>>>>>> 
>>>>>> /*
>>>>>>      if (ocfs2_clusters_to_blocks(osb->sb, le32_to_cpu(di->i_clusters) - 
>>>>>> 1)
>>>>>>> (u32)~0UL) {
>>>>>>              mlog(ML_ERROR, "Volume might try to write to blocks beyond "
>>>>>>                   "what jbd can address in 32 bits.\n");
>>>>>>              status = -EINVAL;
>>>>>>              goto bail;
>>>>>>      }
>>>>>> */
>>>>>   That should work.  The real solution will check based on the
>>>>> journal flags.  Be warned, there be tygers in here.
>>>>> 
>>>>> Joel
>>>>> 
>>>>> -- 
>>>>> 
>>>>> "But all my words come back to me
>>>>> In shades of mediocrity.
>>>>> Like emptiness in harmony
>>>>> I need someone to comfort me."
>>>>> 
>>>>> Joel Becker
>>>>> Principal Software Developer
>>>>> Oracle
>>>>> E-mail: joel.bec...@oracle.com
>>>>> Phone: (650) 506-8127
>>>> _______________________________________________
>>>> Ocfs2-devel mailing list
>>>> Ocfs2-devel@oss.oracle.com
>>>> http://oss.oracle.com/mailman/listinfo/ocfs2-devel


_______________________________________________
Ocfs2-devel mailing list
Ocfs2-devel@oss.oracle.com
http://oss.oracle.com/mailman/listinfo/ocfs2-devel

Reply via email to