Experimental Physics and Industrial Control System
|
Hello Kay,
note that vxStats has been superseded (I would consider it replaced) by
the iocStats package, which provides the traditional vxStats and a bunch
of additional features - on a variety of OS, including vxWorks (5 and
6), RTEMS, Linux, Solaris, and Windows (for a still limited subset).
iocStats is available and accessible as part of the EPICS Applications
project on SourceForge.
The CLUSTSIZES issue (that appears on vxWorks 6) has been fixed in
iocStats a long time ago. (BTW: Your fix breaks on vxWorks 5.)
Please consider switching to iocStats as a possibly worthwhile
alternative to finding all remaining vxWorks 6 issues the hard way...
Hope this helps,
Ralph
And, yes: We could really use the support from a programmer with good
in-depth Windows knowledge to add the missing implementations for CPU
usage, memory usage, and such to iocStats. Pretty please.....
On Fri 09 Jul 2010 8:47:01 Kasemir, Kay wrote:
Hi:
At the SNS we're using a version of vxStats where devVxStats.c looks similar
to this synapps release:
https://subversion.xor.aps.anl.gov/trac/synApps/browser/vxStats/trunk/vxStat
sApp/src/devVxStats.c
The cluster info support in there seems to cause memory corruption.
clustinfo is defined like this for 10 elements
974 #define CLUSTSIZES 10
975
976 static int clustinfo[2][CLUSTSIZES][4];
... but later filled for CL_TBL_SIZE elements:
997 void getClusts(int dataPool)
998 {
999 NET_POOL_ID pNetPool;
1000 int i;
1001 int test;
1002
1003 if (dataPool)
1004 {
1005 dataPool = 1;
1006 pNetPool = _pNetSysPool;
1007 }
1008 else
1009 {
1010 pNetPool = _pNetDpool;
1011 }
1012
1013 test = pNetPool->clTbl[0]->clSize;
1014 for (i = 0; i < CL_TBL_SIZE; i++)
1015 {
1016 /* first two are constant under current conditions and could
be
1017 * done just once per pool.
1018 */
1019 if (i > 0)
1020 if (pNetPool->clTbl[i]->clSize != (2 * test)) break;
1021 test = pNetPool->clTbl[i]->clSize;
1022 clustinfo[dataPool][i][0] = test;
1023 clustinfo[dataPool][i][1] = pNetPool->clTbl[i]->clNum;
1024 clustinfo[dataPool][i][2] = pNetPool->clTbl[i]->clNumFree;
1025 clustinfo[dataPool][i][3] = pNetPool->clTbl[i]->clUsage;
1026 }
1027 }
On our MV2100 CPUs, CL_TBL_SIZE evaluates to 11, which might be close
enough. With our new MV5500 setups, CL_TBL_SIZE is 16, which in one case
happened to cause getClusts() to clobber a save_restore structure.
Replacing all use of CLUSTSIZES with CL_TBL_SIZE fixes the issue.
We also changed
980 void minMBuf(int dataPool, int *ret)
981 {
982 int i;
983 double lowest = 1.0, comp;
984
985 i = 0;
986 dataPool = dataPool?1:0;
987 while (clustinfo[dataPool][i][0] != 0)
into
987 while (i < CL_TBL_SIZE && clustinfo[dataPool][i][0] != 0)
Thanks,
Kay
- Replies:
- Re: iocStats Ralph Lange
- References:
- vxStats memory corruption Kasemir, Kay
- Navigate by Date:
- Prev:
Re: linking to shared objects user libraries J. Lewis Muir
- Next:
Re: linking to shared objects user libraries J. Lewis Muir
- 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
- Navigate by Thread:
- Prev:
vxStats memory corruption Kasemir, Kay
- Next:
Re: iocStats Ralph Lange
- 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
|
ANJ, 02 Sep 2010 |
·
Home
·
News
·
About
·
Base
·
Modules
·
Extensions
·
Distributions
·
Download
·
·
Search
·
EPICS V4
·
IRMIS
·
Talk
·
Bugs
·
Documents
·
Links
·
Licensing
·
|