2006-08-29 08:03:22

by Zoltan Boszormenyi

[permalink] [raw]
Subject: How to determine whether a file was opened O_DIRECT?

Hi,

I would like to run some diagnostics on a database
process and I would like to know what flags it used
for opening its files. Is there any way to get this info?

Thanks in advance,
Zolt?n B?sz?rm?nyi


2006-08-29 08:58:27

by Helge Hafting

[permalink] [raw]
Subject: Re: How to determine whether a file was opened O_DIRECT?

Böszörményi Zoltán wrote:
> Hi,
>
> I would like to run some diagnostics on a database
> process and I would like to know what flags it used
> for opening its files. Is there any way to get this info?
>
> Thanks in advance,
> Zoltán Böszörményi
>
1. Look at the source code for the database - if you have it.
2. Run your database under strace, then search the voluminous
output for "open" calls and look at the flags.
3. Patch your kernel to "printk" information whenever
someone opens with O_DIRECT.

Helge Hafting

2006-08-29 09:16:02

by Zoltan Boszormenyi

[permalink] [raw]
Subject: Re: How to determine whether a file was opened O_DIRECT?

> Böszörményi Zoltán wrote:
>> Hi,
>>
>> I would like to run some diagnostics on a database
>> process and I would like to know what flags it used
>> for opening its files. Is there any way to get this info?
>>
>> Thanks in advance,
>> Zoltán Böszörményi
>>
> 1. Look at the source code for the database - if you have it.

Unfortunately not.

> 2. Run your database under strace, then search the voluminous
> output for "open" calls and look at the flags.

I can't do that, it's a production machine. But ...

> 3. Patch your kernel to "printk" information whenever
> someone opens with O_DIRECT.

... this should have been obvious. :-) Thanks.

I just thought a command like fuser
may already exists to give me this info.
Or something under /proc/PID/fd.

>
> Helge Hafting
>

2006-10-09 08:25:46

by Eugene Teo

[permalink] [raw]
Subject: Re: How to determine whether a file was opened O_DIRECT?

Helge Hafting wrote:
> Böszörményi Zoltán wrote:
>> Hi,
>>
>> I would like to run some diagnostics on a database
>> process and I would like to know what flags it used
>> for opening its files. Is there any way to get this info?
>>
>> Thanks in advance,
>> Zoltán Böszörményi
>>
> 1. Look at the source code for the database - if you have it.
> 2. Run your database under strace, then search the voluminous
> output for "open" calls and look at the flags.
> 3. Patch your kernel to "printk" information whenever
> someone opens with O_DIRECT.

$ stap -x PID -e 'probe syscall.open { if (target() == pid()) log(argstr) }' \
| grep O_DIRECT
"/net", O_RDONLY|O_DIRECTORY|O_LARGEFILE|O_NONBLOCK
"/net", O_RDONLY|O_DIRECTORY|O_LARGEFILE|O_NONBLOCK
...

http://www.sourceware.org/systemtap

Eugene
--
eteo redhat.com ph: +65 6490 4142 http://www.kernel.org/~eugeneteo
gpg fingerprint: 47B9 90F6 AE4A 9C51 37E0 D6E1 EA84 C6A2 58DF 8823