[erlang-questions] Linux O_DIRECT flag

Valentin Micic valentin@REDACTED
Sat Mar 15 16:59:48 CET 2008


Well, part of my problem is that I did not do investigation myself, but was 
relaying on other people to do it for me. I have to admit, this is the best 
way to jump to conclusion. However,  I've been looking at tuning the cache 
during "first iteration" about few months ago (this was limited to kernel 
investigation, hence never consider bugging erlang list about that). I have 
found quite a few parameters (I cannot remember their names from the top of 
my head) that directs how often, and under which circumstances should data 
be committed to disk, however, none of them explicitly limit the amount of 
memory that may be used for caching. Committing data to disk does not imply 
de-allocating the memory.

The nature of a problem (if I may call it that, since the system has been in 
production with very good results for last six months without problems), is 
that I need a large amount of RAM to be always in RAM ;-) -- the system in 
question is a pre-paid voucher server that holds basic voucher data in RAM, 
and the rest on disk; business rules are such that any unused voucher has to 
be kept on a system (and hence in RAM) for a year before it may be 
discarded.

Now, even if I turn swappiness to 0, this would not guarantee that kernel is 
not going to swap the application out if "distress" value is high enough, 
which, in turn, mean that our application will end-up in un-interruptible 
sleep, causing whole bunch of timeouts and unpredictable behavior. So, in 
order to ensure that application is not swapped out, I need to keep 
"distress" values low enough, and, as I cannot keep my RAM out of RAM ;-), 
the best next thing was to get RAM back from the cache (or rather, to bypass 
it), hence O_DIRECT approach. Meanwhile, in my previous e-mail, responding 
to Frej, I've conceded that O_DIRECT is not needed if posix_fadvice does the 
trick of hinting to kernel that it may free particular cache timeously. But 
then, one may argue that kernel would do just that anyway, without me having 
to do a thing. But... can I trust it?

V.


----- Original Message ----- 
From: "Toby Thain" <toby@REDACTED>
To: "Per Hedeland" <per@REDACTED>
Cc: <valentin@REDACTED>; <erlang-questions@REDACTED>
Sent: Saturday, March 15, 2008 5:10 PM
Subject: Re: [erlang-questions] Linux O_DIRECT flag


>
> On 14-Mar-08, at 9:23 PM, Per Hedeland wrote:
>
>> ...
>> is why "some other" OSes implement some "push-back" mechanisms for the
>> cache, or in older times simply had a hard limit as percentage of RAM.
>>
>> I don't know off-hand whether there is a way to make Linux do  something
>> like that, but I would think so (at least the hard limit method, maybe
>> with a number calculated by the user) - but the default is AFAIK "give
>> the cache all it wants".
>
> Valentin, have you investigated tuning/limiting the cache. OTOH I  don't 
> know whether it's possible but it seems strange that the  capability would 
> have been entirely omitted.
>
> --Toby
>
> 




More information about the erlang-questions mailing list