EPICS Controls Argonne National Laboratory

Experimental Physics and
Industrial Control System

1994  1995  1996  <19971998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024  Index 1994  1995  1996  <19971998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
<== Date ==> <== Thread ==>

Subject: Re: Buffer copying?
From: "Jeff Hill" <[email protected]>
To: "Peregrine McGehee" <[email protected]>, <[email protected]>
Date: Tue, 15 Apr 1997 11:52:04 -0600
Peregrine,

> I have an application in which I'm sending small images across the
> network via channel access and I'm curious as to how many times and
> where the image buffer gets copied on its way up from the database to 
> the ethernet interface. 

o Device support copies the waveform data out of the device into
the record's buffer (the buffer that field bptr points to). This
make prevents the record's waveform from changing while a client is
in the middle of reading it.

o The routine dbGetField() copies from the record's buffer into 
the CA server's outgoing message buffer. This copy also
converts to the clients requested data type.

o If the IOC is a little endian machine the buffer is converted
to network byte order (the new server will combine the data conversion
and the endian conversion steps).

o The socket routine "send()" copies the outgoing waveform
into an Mbuf

o In certain situations parts of the data will be copied again
if CA is unable to "hand off" all of the data to the IP kernel
in one call to "send()".

o Other copies may occur inside of the IP kernel/ network
device drivers before the data is transmitted as frames on your
LAN.

> 
> Sending 15 512x31 sub-images every few seconds increases my Sparc 5
> IOC loading by up to 20%.
> 

The new ca server library has the socket routines well isolated so it
should
be possible to use the WRS proprietary zero copy TCP API if
we decide that this will result in a significant improvement. 

One way to get a inaccurate guess at what part of the code is using
CPU under vxWorks is to run "tt()" on an active task several times
(I would run the tt() from a console port and not a telnet port so that
the IP kernel is not influencing the result).

Jeff

Navigate by Date:
Prev: gnu cross-compiler problem Peregrine McGehee
Next: Re: gnu cross-compiler problem Andrew Johnson
Index: 1994  1995  1996  <19971998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
Navigate by Thread:
Prev: Buffer copying? Peregrine McGehee
Next: gnu cross-compiler problem Rolf Keitel
Index: 1994  1995  1996  <19971998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
ANJ, 10 Aug 2010 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·