Test Programs Associated with Samplers and Interfaces

Location of Test Code

Files are located on:
/raid1/bjoshi/testsamp
 

ADLINK Card Drivers

To see if drivers are loaded, typ /sbin/lsmod
Module  Size Used by
p7300b 35633  0 (unused)
adl_mem_mgr 2632 2  [p7300b]

If drivers aren't loaded, you need to change to superuser, and run  dask_inst_SMP.pl (in /raid1/bjoshi/testsamp)

Test Mode Program

The following routine will test the interface board when it is in test-mode.
Syntax: ./tnudaqmdrate32lw <No. of buffers> <Sample period>
Example: ./tnudaqmdrate32lw 1000 0.0000002
Function: Initialsie the acquisition board, and node, then acquire data for set number of buffers, test expected pattern generated in test mode.
Test mode on the interface board produces two 16-bit words, a fast one incrementing at the sample rate, and a slow one which is clocked on the 13th bit of the fast counter.
The program mimics these count words and compares the actual received count with the expected count. 
Any discrepancy is flagged on the screen as a data slip.

MPI Commands

The MPI commands are found in this directory.
/raid1/bjoshi/testsamp/mpi/bin

The following command starts a background process required before data can be sent between nodes.
Syntax: ./cobra_acquisition 10 <log file> &
Example: ./cobra_acquisition 10 cobra_acq.log &
Function: Starts a background process which initialises the acquisition board, and starts data transfer to the PCI bus. 
It must be started in the acquisition node, 
and it requires root permission.
The & gives the terminal back as soon as the process is started.
Note: To stop this process one needs to command thus:
touch stop_acq
...and then remove a stop file using this command:
rm stop_acq

The following command will transfer a block of data over the high-speed interconnect from the acquisition node to a store node.
Syntax: mpimon acq_rec_data_mpi <No. of buffers> <filename> <s logfile> <c logfile> -- node<sending node ref.> node<receiving node ref.> 1
Example: mpimon acq_rec_data_mpi 1000 /scratch/COBRA/test.dat s.log c.log -- node1-4 node2-1 1
Function: Transfers a block of data from acquisition node to a storage node.
Note: It is best to use the local scratch area on the receiving node to store this data. The latencies involved in sending over ethernet are too great for the high speed of acquisition.

Other handy commands

Syntax: od -xv --address-radix=d filename |grep 'ffff ffff'
Function: This output dump allows us to examine occurance of the eight marker bytes which occur every 1PPS

EDT card Oct 2003

The EDT driver should be loaded on every node with an EDT card (currently the EDT card is on node1-3). The drivers are in /opt/EDTpcd and should be loaded as root with the command ./edt_load
(You can check whether the driver is loaded usinglsmod which should show that module edt is loaded)
For some strange reason you will need to set the environment variable LD_LIBRARY_PATH to include the EDTpcd directory to run the test programs. eg. setenv LD_LIBRARY_PATH /opt/EDTpcd

Board test programs
can be found in /raid1/tsi/cprogs and should be run on the node with the EDT card.

Syntax: test_edt_maxdatarate <nbuf> <tsamp (sec)>
Example: ./test_edt_maxdatarate 10 1
Function: This program sets up, initialises an EDT card and starts continuous data acquisition from a PCI EDT card. The data is written to a ring buffer using DMA. The data is then compared with an expected count to check if the acquisition is taking place correctly. If a byte is missed, it is signalled by the program. If 1 in 10000 byte is missed, the program exits. This program can be used to test the efficacy of EDT card and is used with a counter test rig connected to EDT. 

Board and data transfer programs
can be found in /raid1/online/test/testsamp_edt and should be run on the node with the EDT card.

Syntax: ./cobra_acquisition_edt
./cobra_server <sample rate (MHz)>
or ./cobra_server2disk <sample rate (MHz)>

./cleanup
Example: ./cobra_acquisition_edt (on node1-3) 
mpimon ./cobra_server 20 -- node1-3 1 node1-2 2 node1-3 2
mpimon ./cobra_server2disk 20 -- node1-3 node1-2
./cleanup
Function: cobra_acquisition_edt, (source code cobra_acquisition_both.c): This program sets up, initialises an EDT or ADLINK card (depending on whether ADLINK or EDT is defined on compilation and triggers continuous data acquisition from this PCI card. The data is written to a ring buffer using DMA. The data is then transfered to a shared memory which also acts like an intermediate ring buffer. Another segment of shared memory holds the ring buffer status flags and current buffer numbers. A third piece of memory is used for start/stop messages and acquisition programs status. User programs can attach these shared memory segments to read the data. 

cobra_server: this program communicates with the COBRA_ACQUISITION program, sends the go, reads in the shared memory buffers, checks them and sends them to receiver processes .

cobra_server2disk: this program communicates with the COBRA_ACQUISITION program, sends the go, reads in the shared memory buffers, checks them and sends them to a receiver process which stash in a disk file on /scratch/COBRA With a single receiver this will run at .2usec sampling, for no more than 30 secs!

cleanup: this utility removes all shared memory areas and semaphores created under the current login name on the current node. 

The same directory ( /raid1/online/test/testsamp_edt ) contains an equivalent program for the ADLINk board (note the acquisition program needs to be run as su, and you'll probably need to make sure the LD_LIBRARY_PATH is correctly set by typing tcsh, then setenv LD_LIBRARY_PATH `cat ldpath`.)

Syntax: ./cobra_acquisition_adlink
./cobra_server <sample rate (MHz)> or
./cobra_server2disk <sample rate (MHz)>

./cleanup
Example: ./cobra_acquisition_adlink (on node1-5)  (as su) 
mpimon ./cobra_server 20 -- node1-5 1 node1-2 2 node1-3 2
mpimon ./cobra_server2disk 20 -- node1-5 1 node1-2
./cleanup
Function: cobra_acquisition_adl, (source code cobra_acquisition_both.c): This program sets up, initialises an EDT or ADLINK card (depending on whether ADLINK or EDT is defined on compilation and triggers continuous data acquisition from this PCI card. The data is written to a ring buffer using DMA. The data is then transfered to a shared memory which also acts like an intermediate ring buffer. Another segment of shared memory holds the ring buffer status flags and current buffer numbers. A third piece of memory is used for start/stop messages and acquisition programs status. User programs can attach these shared memory segments to read the data. 

cobra_server: this program communicates with the COBRA_ACQUISITION program, sends the go, reads in the shared memory buffers, checks them and sends them to receiver processes .

cobra_server2disk: this program communicates with the COBRA_ACQUISITION program, sends the go, reads in the shared memory buffers, checks them and sends them to a receiver process which stashes the data in a disk file on /scratch/COBRA With a single receiver this will run at .2usec sampling, for no more than 30 secs!

cleanup: this utility removes all shared memory areas and semaphores created under the current login name on the current node.