Commit be04a05f authored by Alejandro Homs Puron's avatar Alejandro Homs Puron Committed by operator for beamline

Eiger: performance improvements

parent 7cd6fdad
Lima @ ee43531b
Subproject commit 9ef4d10f754c8a3b81e66109bd6846e2615e48a3
Subproject commit ee43531b906b141685cfa9d968bc45b9de8c2db8
def test_macro '{
while(1) {
local napi, cbp, cbe, bf, fr, mfr, lt, pd, mnbi[], nbi, et;
local lcd, lsd, ln, i, nbh, nbp, hmem, hnbp;
napi = 1;
ln = _lima_getccdname(CCD_U)
lcd = list_getpar(LIMA_DEV, ln, "control");
lsd = list_getpar(LIMA_DEV, ln, "config");
nbh = _limapar_get(ln, "hostname_list", -1)
nbp = nbh * 2
hmem = 4 * pow(1024, 3)
hnbp = (256 * 256 * 4)
for (i = 0; i < 4; i++) {
pd = pow(2, i + 2)
mnbi[pd] = 1.5 * hmem / (hnbp * pd / 8)
}
pd = _limapar_get(ln, "pixel_depth")
mfr = _limapar_get(ln, "max_frame_rate") * 1e3
lt = _limapar_get(ln, "latency_time")
fr = ($# > 0) ? $1 : mfr
nbi = ($# > 1) ? $2 : mnbi[pd]
et = 1 / fr - lt
bench ccdtake et nbi;
if (napi) {
tango_io(lsd, "getStats", "-1:cb_period", \
eiger_cb_period_stats);
tango_io(lsd, "getStats", "-1:cb_exec", \
eiger_cb_exec_stats);
bf = tango_io(lsd, "getNbBadFrames", -1)
} else {
tango_get(lsd, "stats_cb_period", \
eiger_cb_period_stats);
tango_get(lsd, "stats_cb_exec", \
eiger_cb_exec_stats);
bf = tango_get(lsd, "nb_bad_frames")
};
local cbp, cbe, bf, fr, mfr, lt, pd, mnbi[], nbi, et;
local lcd, lsd, ln, i, nbh, nbs, hmem, hnbp, nbc, ci;
ln = _lima_getccdname(CCD_U)
lcd = list_getpar(LIMA_DEV, ln, "control");
lsd = list_getpar(LIMA_DEV, ln, "config");
nbh = _limapar_get(ln, "hostname_list", -1)
nbs = nbh
hmem = 4 * pow(1024, 3)
hnbp = (256 * 256 * 4)
for (i = 0; i < 4; i++) {
pd = pow(2, i + 2)
mnbi[pd] = 1.5 * hmem / (hnbp * pd / 8)
}
pd = _limapar_get(ln, "pixel_depth")
mfr = _limapar_get(ln, "max_frame_rate") * 1e3
lt = _limapar_get(ln, "latency_time")
fr = ($# > 0) ? $1 : mfr
nbi = ($# > 1) ? $2 : mnbi[pd]
nbc = ($# > 2) ? $3 : 0
et = 1 / fr - lt
for (ci = 0; (nbc == 0) || (ci < nbc); ci++) {
bench ccdtake et nbi;
tango_io(lsd, "getStats", "-1:cb_period", \
eiger_cb_period_stats);
tango_io(lsd, "getStats", "-1:cb_exec", \
eiger_cb_exec_stats);
bf = tango_io(lsd, "getNbBadFrames", -1)
printf("\n%6d %6d %8.2f %8.2f\n", \
tango_get(lcd, "last_image_acquired") + 1, bf, \
eiger_cb_period_stats[2], eiger_cb_exec_stats[2]);
double array port_stats[nbp][5];
if (napi) {
for (i = 0; i < nbp; i++)
tango_io(lsd, "getStats", \
sprintf("%d:cb_period", i), \
port_stats[i]);
p port_stats[:][2];
for (i = 0; i < nbp; i++)
tango_io(lsd, "getStats", \
sprintf("%d:cb_exec", i), \
port_stats[i]);
p port_stats[:][2];
};
sleep(1)
}
eiger_cb_period_stats[2], eiger_cb_exec_stats[2]);
double array eiger_stats[nbs][5];
for (i = 0; i < nbs; i++)
tango_io(lsd, "getStats", sprintf("%d:cb_period", i), \
eiger_stats[i]);
p eiger_stats[:][2];
for (i = 0; i < nbs; i++)
tango_io(lsd, "getStats", sprintf("%d:cb_exec", i), \
eiger_stats[i]);
p eiger_stats[:][2];
sleep(1)
}
}'
......@@ -512,7 +512,182 @@ lisgeiger1:~ # /users/blissadm/admin/etc/S70daemons start
# as opid00
cp camera/slsdetector/tango/SlsDetector.py applications/tango/python/camera && \
./install.sh \
--find-root-path=${CONDA_SYSROOT} --install-prefix=${LIMA_DIR}/install \
--install-prefix=${LIMA_DIR}/install \
--install-python-prefix=${LIMA_DIR}/install/python \
slsdetector sps-image edfgz python pytango-server tests
slsdetector numa hdf5 hdf5-bs edfgz edflz4 python pytango-server tests
v1.8.0:
netdev_groups:
eth0,eth1,eth2,eth4,eth6,eth7,eth8,eth9
eth3
eth5
pixel_depth_cpu_affinity_map:
4,0x0006c0,0x6c0000,0x03f03e,0x000001,0x000001,0x100100,0x800800
8,0x0006c0,0x6c0000,0x03f03e,0x000001,0x000001,0x100100,0x800800
16,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff
32,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff
4,0x780780,0x800800,0x00e00e,0x001001,0x001001,0x040040,0x800800
8,0x780780,0x800800,0x00e00e,0x001001,0x001001,0x040040,0x800800
16,0x780780,0x800800,0x00e00e,0x001001,0x001001,0x040040,0x800800
32,0x780780,0x800800,0x00e00e,0x001001,0x001001,0x040040,0x800800
NbPortThreads = 4
{ 4: ((((CPU( 6), CPU(18), (CPU(8), CPU(20), CPU(0), CPU(1))),
(CPU( 7), CPU(19), (CPU(2), CPU(3), CPU(4), CPU(5)))),
((CPU( 9), CPU(21), (CPU(11), CPU(23), CPU(12), CPU(13))),
(CPU(10), CPU(22), (CPU(14), CPU(15), CPU(16), CPU(17))))),
CPU(*(range(1, 6) + range(12, 18))),
CPU(0),
(('eth0,eth1,eth2,eth4,eth6,eth7,eth8,eth9', {-1: (CPU(0), CPU(0))}),
('eth3', {-1: (CPU( 8, 20), CPU( 8, 20))}),
('eth5', {-1: (CPU(11, 23), CPU(11, 23))}))),
8: '@4',
16: '@4',
32: '@4'}
NbPortThreads = 2
{ 4: ((((CPU( 6), CPU(18), (CPU(2), CPU(3))),
(CPU( 7), CPU(19), (CPU(4), CPU(5)))),
((CPU( 9), CPU(21), (CPU(14), CPU(15))),
(CPU(10), CPU(22), (CPU(16), CPU(17))))),
CPU(*(range(1, 6) + range(12, 18))),
CPU(0),
(('eth0,eth1,eth2,eth4,eth6,eth7,eth8,eth9', {-1: (CPU(0), CPU(0))}),
('eth3', {-1: (CPU( 8, 20), CPU( 8, 20))}),
('eth5', {-1: (CPU(11, 23), CPU(11, 23))}))),
8: '@4',
16: '@4',
32: '@4'}
NbRecvThreads = 2
{ 4: (((((CPU( 6), CPU(18)), (CPU( 7), CPU(19))), (CPU( 2), CPU( 3))),
(((CPU( 9), CPU(21)), (CPU(10), CPU(22))), (CPU(14), CPU(16)))),
CPU(*(range(1, 6) + range(12, 18))),
CPU(0),
(('eth0,eth1,eth2,eth4,eth6,eth7,eth8,eth9', {-1: (CPU(0), CPU(0))}),
('eth3', {-1: (CPU( 8, 20), CPU( 8, 20))}),
('eth5', {-1: (CPU(11, 23), CPU(11, 23))}))),
8: '@4',
16: '@4',
32: '@4'}
NbRecvThreads = 4
{ 4: (((((CPU( 6), CPU(18)), (CPU( 7), CPU(19))), (CPU( 8), CPU(18), CPU(19), CPU(20))),
(((CPU( 9), CPU(21)), (CPU(10), CPU(22))), (CPU(11), CPU(21), CPU(22), CPU(23)))),
CPU(*(range(1, 6) + range(12, 18))),
CPU(0),
(('eth0,eth1,eth2,eth4,eth6,eth7,eth8,eth9', {-1: (CPU(0), CPU(0))}),
('eth3', {-1: (CPU( 8, 20), CPU( 8, 20))}),
('eth5', {-1: (CPU(11, 23), CPU(11, 23))}))),
8: '@4',
16: '@4',
32: '@4'}
NbRecvThreads = 4 (L/W same thread)
{ 4: (((((CPU( 6), CPU( 6)), (CPU( 7), CPU( 7))), (CPU( 8), CPU(18), CPU(19), CPU(20))),
(((CPU( 9), CPU( 9)), (CPU(10), CPU(10))), (CPU(11), CPU(21), CPU(22), CPU(23)))),
CPU(*(range(1, 6) + range(12, 18))),
CPU(0),
(('eth0,eth1,eth2,eth4,eth6,eth7,eth8,eth9', {-1: (CPU(0), CPU(0))}),
('eth3', {-1: (CPU( 8, 20), CPU( 8, 20))}),
('eth5', {-1: (CPU(11, 23), CPU(11, 23))}))),
8: '@4',
16: '@4',
32: '@4'}
NbRecvThreads = 3, two sockets
{ 4: (((((CPU( 6), CPU(18)), (CPU( 7), CPU(19))), (CPU(12), CPU(13), CPU(14))),
(((CPU( 9), CPU(21)), (CPU(10), CPU(22))), (CPU(15), CPU(16), CPU(17)))),
CPU(*(range(1, 6) + range(12, 18))),
CPU(0),
(('eth0,eth1,eth2,eth4,eth6,eth7,eth8,eth9', {-1: (CPU(0), CPU(0))}),
('eth3', {-1: (CPU( 8), CPU(20))}),
('eth5', {-1: (CPU(11), CPU(23))}))),
8: '@4',
16: '@4',
32: '@4'}
NbRecvThreads = 3, two sockets (4 bits), one socket (8/16/32 bits)
{ 4: (((((CPU( 6), CPU(18)), (CPU( 7), CPU(19))), (CPU(12), CPU(13), CPU(14))),
(((CPU( 9), CPU(21)), (CPU(10), CPU(22))), (CPU(15), CPU(16), CPU(17)))),
CPU(*(range(1, 6) + range(12, 18))),
CPU(0),
(('eth0,eth1,eth2,eth4,eth6,eth7,eth8,eth9', {-1: (CPU(0), CPU(0))}),
('eth3', {-1: (CPU( 8), CPU(20))}),
('eth5', {-1: (CPU(11), CPU(23))}))),
8: (((((CPU( 6), CPU(18)), (CPU( 7), CPU(19))), (CPU(18), CPU(19), CPU(20))),
(((CPU( 9), CPU(21)), (CPU(10), CPU(22))), (CPU(21), CPU(22), CPU(23)))),
CPU(*(range(1, 6) + range(12, 18))),
CPU(0),
(('eth0,eth1,eth2,eth4,eth6,eth7,eth8,eth9', {-1: (CPU(0), CPU(0))}),
('eth3', {-1: (CPU( 8), CPU(20))}),
('eth5', {-1: (CPU(11), CPU(23))}))),
16: '@8',
32: '@8'}
Py37/NbRecvThreads = 2, one socket
{ 4: (((((CPU( 6), CPU(18)), (CPU( 7), CPU(19))), (CPU(18), CPU(19))),
(((CPU( 9), CPU(21)), (CPU(10), CPU(22))), (CPU(21), CPU(22)))),
CPU(*chain(range(1, 6), range(12, 18))),
CPU(0),
(('eth0,eth1,eth2,eth4,eth6,eth7,eth8,eth9', {-1: (CPU(0), CPU(0))}),
('eth3', {-1: (CPU( 8), CPU(20))}),
('eth5', {-1: (CPU(11), CPU(23))}))),
8: '@4',
16: '@4',
32: '@4'}
Py37/NbRecvThreads = 3, one socket
{ 4: (((((CPU( 6), CPU(18)), (CPU( 7), CPU(19))), (CPU(18), CPU(19), CPU(20))),
(((CPU( 9), CPU(21)), (CPU(10), CPU(22))), (CPU(21), CPU(22), CPU(23)))),
CPU(*chain(range(1, 6), range(12, 18))),
CPU(0),
(('eth0,eth1,eth2,eth4,eth6,eth7,eth8,eth9', {-1: (CPU(0), CPU(0))}),
('eth3', {-1: (CPU( 8), CPU(20))}),
('eth5', {-1: (CPU(11), CPU(23))}))),
8: '@4',
16: '@4',
32: '@4'}
Py37/NbRecvThreads = 3, two sockets (4 bits), one socket (8/16/32 bits)
{ 4: (((((CPU( 6), CPU(18)), (CPU( 7), CPU(19))), (CPU(12), CPU(13), CPU(14))),
(((CPU( 9), CPU(21)), (CPU(10), CPU(22))), (CPU(15), CPU(16), CPU(17)))),
CPU(*chain(range(1, 6), range(12, 18))),
CPU(0),
(('eth0,eth1,eth2,eth4,eth6,eth7,eth8,eth9', {-1: (CPU(0), CPU(0))}),
('eth3', {-1: (CPU( 8), CPU(20))}),
('eth5', {-1: (CPU(11), CPU(23))}))),
8: (((((CPU( 6), CPU(18)), (CPU( 7), CPU(19))), (CPU(18), CPU(19), CPU(20))),
(((CPU( 9), CPU(21)), (CPU(10), CPU(22))), (CPU(21), CPU(22), CPU(23)))),
CPU(*chain(range(1, 6), range(12, 18))),
CPU(0),
(('eth0,eth1,eth2,eth4,eth6,eth7,eth8,eth9', {-1: (CPU(0), CPU(0))}),
('eth3', {-1: (CPU( 8), CPU(20))}),
('eth5', {-1: (CPU(11), CPU(23))}))),
16: '@8',
32: '@8'}
-----------------
{ 4: ((((CPU(6), CPU(18), (CPU(2), )), (CPU(7), CPU(19), (CPU(3), ))), ((CPU(9), CPU(21), (CPU(14), )), (CPU(10), CPU(22), (CPU(16), )))), CPU(1, 2, 3, 4, 5, 12, 13, 14, 15, 16, 17), CPU(0), ("eth0,eth1,eth2,eth4,eth6,eth7,eth8,eth9": {-1: (CPU(0), CPU(0)))}, "eth3": {-1: (CPU(8, 20), CPU(8, 20)))}, "eth5": {-1: (CPU(11, 23), CPU(11, 23)))})),
{ 4: (((((CPU( 6), CPU(18)), (CPU( 7), CPU(19))), (CPU( 2), CPU( 3))),
(((CPU( 9), CPU(21)), (CPU(10), CPU(22))), (CPU(14), CPU(16)))),
CPU(*(range(1, 6) + range(12, 18))),
CPU(0),
(('eth0,eth1,eth2,eth4,eth6,eth7,eth8,eth9', {-1: (CPU(0), CPU(0))}),
('eth3', {-1: (CPU( 8, 20), CPU( 8, 20))}),
('eth5', {-1: (CPU(11, 23), CPU(11, 23))}))),
8: '@4',
16: '@4',
32: '@4'}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment