1994 1995 1996 1997 1998 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 1997 1998 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: Problem with caget on 3.14.12.1? |
From: | "Jeff Hill" <[email protected]> |
To: | "'Mark Rivers'" <[email protected]>, <[email protected]> |
Date: | Wed, 8 Jun 2011 14:51:39 -0600 |
Hi Mark, I created a bug entry https://bugs.launchpad.net/epics-base/+bug/794749 Jeff ______________________________________________________ Message content: TSPA With sufficient thrust, pigs fly just fine. However, this is not necessarily a good idea. It is hard to be sure where they are going to land, and it could be dangerous sitting under them as they fly overhead. -- RFC 1925 From: [email protected] [mailto:[email protected]] On Behalf Of Mark Rivers Folsk, I am trying to read a large array from a VME IOC using caget. The array is 500000 elements, 32-bit integers. EPICS_CA_MAX_ARRAY_BYTES is set to 2000000 on the IOC, which is “just large enough” to read the entire array. EPICS_CA_MAX_ARRAY_BYTES is set to 20000000 (10 times larger than large enough) on the Linux client. The IOC is running 3.14.12.1. Here is the output of caget from a Linux client with EPICS 3.14.10, 3.14.11, and 3.14.12.1 when requesting 499000 elements, (1000 fewer than maximum) which should fit in EPICS_CA_MAX_ARRAY_BYTES. 3.14.10: corvette:mca/iocBoot/iocVxWorks>date ; /usr/local/epics/base-3.14.10/bin/linux-x86/caget -#499000 -w20 SIS:3820:mca1 > temp.out ; date Tue Jun 7 17:03:37 CDT 2011 Tue Jun 7 17:03:38 CDT 2011 3.14.11: corvette:mca/iocBoot/iocVxWorks>date ; /usr/local/epics/base-3.14.11/bin/linux-x86/caget -#499000 -w20 SIS:3820:mca1 > temp.out ; date Tue Jun 7 17:03:55 CDT 2011 Tue Jun 7 17:03:56 CDT 2011 3.14.12.1: corvette:mca/iocBoot/iocVxWorks>date ; /usr/local/epics/base-3.14.12.1/bin/linux-x86/caget -#499000 -w20 SIS:3820:mca1 > temp.out ; date Tue Jun 7 17:04:07 CDT 2011 CA.Client.Exception............................................... Warning: "The requested data transfer is greater than available memory or EPICS_CA_MAX_ARRAY_BYTES" Context: "op=0, channel=SIS:3820:mca1, type=DBR_TIME_LONG, count=500000, ctx="server unable to load read (or subscription update) response into protocol buffer PV="SIS:3820:mca1" max bytes=2000024"" Source File: ../getCopy.cpp line 92 Current Time: Tue Jun 07 2011 17:04:07.629564143 .................................................................. So on 3.14.10 and 3.14.11 it works as expected, caget is requesting fewer than the number of bytes that EPICS_CA_MAX_ARRAY_BYTES will allow, and it succeeds. But it fails on 3.14.12.1. The error message says count=500000. Is it trying to read all 500000 rather than the number requested? The same error happens on 3.14.12.1 even if I try to only read 100 elements: corvette:mca/iocBoot/iocVxWorks>/usr/local/epics/base-3.14.12.1/bin/linux-x86/caget -#100 -w20 SIS:3820:mca1 CA.Client.Exception............................................... Warning: "The requested data transfer is greater than available memory or EPICS_CA_MAX_ARRAY_BYTES" Context: "op=0, channel=SIS:3820:mca1, type=DBR_TIME_LONG, count=500000, ctx="server unable to load read (or subscription update) response into protocol buffer PV="SIS:3820:mca1" max bytes=2000024"" Source File: ../getCopy.cpp line 92 Current Time: Tue Jun 07 2011 17:24:56.617989921 .................................................................. I then increased EPICS_CA_MAX_ARRAY_BYTES on the IOC to 2000200, i.e. 200 more than the theoretical minimum number. I then did a caget of the entire array, and it worked fine on all 3 versions of EPICS base. corvette:mca/iocBoot/iocVxWorks>date ; /usr/local/epics/base-3.14.10/bin/linux-x86/caget -w20 SIS:3820:mca1 > temp.out ; date Tue Jun 7 17:16:25 CDT 2011 Tue Jun 7 17:16:26 CDT 2011 corvette:mca/iocBoot/iocVxWorks>date ; /usr/local/epics/base-3.14.11/bin/linux-x86/caget -w20 SIS:3820:mca1 > temp.out ; date Tue Jun 7 17:16:44 CDT 2011 Tue Jun 7 17:16:45 CDT 2011 corvette:mca/iocBoot/iocVxWorks>date ; /usr/local/epics/base-3.14.12.1/bin/linux-x86/caget -w20 SIS:3820:mca1 > temp.out ; date Tue Jun 7 17:16:55 CDT 2011 Tue Jun 7 17:16:56 CDT 2011 So it looks like there is something wrong with 3.14.12.1 when EPICS_CA_MAX_ARRAY_BYTES is not large enough for the entire array, even when many fewer elements are being requested. Mark |