SUMMARY: fifo-do-adaptive setting

From: Cohen, Andy (Andy.Cohen@cognex.com)
Date: Thu Nov 20 2003 - 12:03:04 EST


Thanks to all who weighed in on this. The consensus was that there is no
harm in setting it to 0. It's highly recommended to have it set to 0 if the
primary purpose of the server is to run a database (which our's is). The
default value is 1 and there may be some situations that warrant this
setting.

Here are the responses:

+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_

The system tuning guide (there is a whole book, should have been updated
for V5.1 or V5.1A, I have the V5.1B version in front of me) is explicit
that if you are running a database server, setting fifo_do_adaptive=0
is strongly recommended. See also the sys_attrs_vfs reference page. In
any case, if the primary use of the system is to run Oracle stuff, then
go with the recommendation; if the primary use is general timesharing,
you may get better performance with the default, at the cost of some
degradation in Oracle performance.

Tom

+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_

The recommendation to set it to 0 is based on a history of issues with the
new wire method we attempted to introduce back in the 4.0 stream..

Setting it to 0 is the safest.
...
Anyways, fifi-do-adaptive is a performance setting. When it's turned on
the kernel will attempt to make fifo operations more efficient by waiting
for the data to reach a certain threshold. The Oracle BEQ protocol uses
FIFOs extensively but expect the data to be passed immediately. As a
result, the fifo-do-adaptive setting will actually achieve the opposite of
our intent in some Oracle environments and turning off adaptive fifos will
remedy this situation.

In environments where you don't use the BEQ protocol this setting has no
effect what so ever, so it's safe to turn it of here too - thus the
recommendation.
 // Thomas

+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_

fifo-do-adaptive is an optimization for high throughput at the expense of
response time.
If you are putting multi-megabytes of small messages through a fifo it will
be a big win.
However, Oracle uses fifo's for chatting between processes, and the
fifo-do-adaptive=1 wil cause significent delays.

Setting fifo-do-adaptive=0 will not cause any loss of function, at worst you
may see some loss of performance.

Here is a description from "man sys_attrs_vfs":
================================================

fifo_do_adaptive

      A value that enables (1) or disables (0) the pipe code that attempts
to
      do batch writes to a pipe and deliver the data in a single call to a
      reader.

      Default value: 1 (enabled)

Here is a description of the new_wire_method:
==============================================
The "new-wire-method" is also known as "light-weight wiring". It is
just that -- a faster way of indicating to the Virtual Memory subsystem
that a page of physical memory is locked, i.e., "wired", into an
address space.

Light-weight wiring comes into effect when a memory wiring request
happens to find that *all* the pages in the requested address range
are already memory resident. The "lightness" comes in the fact that
wiring can be quickly reflected in the page table entries (PTEs) of
the affected pages rather than in the higher level address maps.

Map-based, "heavy-weight" wiring is necessary when the pages to be
wired are nonresident, that is, when they must be faulted in from
backing store before wiring can occur.

Note that light-weight wiring only occurs for requests from within
the kernel, such as for DMA i/o. Light-weight wiring is never used
as the result of a user wiring request made via mlock, mlockall,
or plock.

*************
+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_

Thanks to Dr. Tom Blinn, Thomas L. Sjolshagen, Blair Phillips, and John
Lanier.

Andy Cohen
Database Systems Administrator
Cognex Corporation
1 Vision Drive
Natick, MA 01760
508-650-3079

ORIGINAL QUESTION
===============
I've just run sys_check on a DS20E machine running 5.1A PK3. We run Oracle
8174 on this machine and one of the recommendations from sys_check is to set
fifo-do-adaptive=0. Oracle's metaLink site has a general recommendation to
make this setting as well. I don't believe we are experiencing the
difficulty that this setting is designed to correct but I was wondering what
the implications could be if we set it to 0 (it defaults to 1) anyway; i.e.
any risk or downside to setting it to 0?



This archive was generated by hypermail 2.1.7 : Sat Apr 12 2008 - 10:49:44 EDT