Skip to content
This repository was archived by the owner on Sep 1, 2024. It is now read-only.

Commit 348d047

Browse files
committed
Spacecraft model fix
Performance result computed
1 parent 2a1146f commit 348d047

4 files changed

Lines changed: 48 additions & 27 deletions

File tree

README.md

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -131,20 +131,23 @@ TM/TC setup:
131131
- TM packets: with packet CRC.
132132

133133
Scenario 1 results:
134-
- Processing start-up time (as per logs - first run, no cache):
135-
- Processing start-up time (as per logs - with cache):
136-
- Max TM rate without backpressure:
137-
- Nb. of TM frames per second:
138-
- Nb. of TM packets per second:
139-
- Nb. of TM parameter samples decoded per second:
140-
- Nb. of processed items generated per second:
141-
- Memory usage (Windows Task Monitor):
142-
- CPU load:
134+
- Processing start-up time (as per logs - first run, no cache): 26 seconds
135+
- Processing start-up time (as per logs - with cache): 10 seconds
136+
- Max TM rate: 23.1 Mbit/sec (SLE TML level - RAF complete mode - processing backpressure propagated to the data generator)
137+
- Nb. of TM frames per second: ca 2.300/sec
138+
- Nb. of TM packets per second: ca 8.000/sec
139+
- Nb. of TM parameter samples decoded per second: ca 435.000/sec
140+
- Nb. of processed items generated per second: ca 530.000/sec
141+
- Memory usage (heap size): between 2 and 4 GB, Windows reports 5 GB
142+
- CPU load: between 35% and 45% (equivalent of almost 6 cores fully utilised)
143+
144+
![Connector Performance](docs/images/reatmetric-test-all-in-a-box-01.PNG "Connector Performance")
145+
![System Performance](docs/images/reatmetric-test-all-in-a-box-02.PNG "System Performance")
143146

144147
Scenario 2 results:
145148
- Processing start-up time (as per logs - first run, no cache):
146149
- Processing start-up time (as per logs - with cache):
147-
- Max TM rate without backpressure:
150+
- Max TM rate:
148151
- Nb. of TM frames per second:
149152
- Nb. of TM packets per second:
150153
- Nb. of TM parameter samples decoded per second:
17.9 KB
Loading
14.1 KB
Loading

eu.dariolucia.reatmetric.driver.spacecraft.test/src/main/java/eu/dariolucia/reatmetric/driver/spacecraft/test/SpacecraftModel.java

Lines changed: 35 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ public class SpacecraftModel implements IVirtualChannelReceiverOutput, IServiceI
104104
public static final String PUS_SUBTYPE_FIELD_NAME = "I-PUS-SUBTYPE";
105105
public static final int TM_FRAME_LENGTH = 1115;
106106
public static final int PACKET_GENERATION_PERIOD_MS = 1;
107-
public static final int CYCLE_MODULE_SLEEP = 1; // 10
107+
public static final int CYCLE_MODULE_SLEEP = 10000; // 10
108108
public static final int SETTER_APID = 10;
109109
public static final int SETTER_PUS = 69;
110110

@@ -125,7 +125,7 @@ public class SpacecraftModel implements IVirtualChannelReceiverOutput, IServiceI
125125
private final FarmEngine farm;
126126

127127
// TM processing part
128-
private final BlockingQueue<SpacePacket> packetsToSend = new ArrayBlockingQueue<>(1000);
128+
private final BlockingQueue<SpacePacket> packetsToSend = new ArrayBlockingQueue<>(2000);
129129
private final TmMasterChannelMuxer tmMux;
130130
private final Map<Integer, TmSenderVirtualChannel> id2tmvc = new TreeMap<>();
131131
private IPacketEncoder encoder;
@@ -134,7 +134,6 @@ public class SpacecraftModel implements IVirtualChannelReceiverOutput, IServiceI
134134
private List<TmPacketTemplate> pus1Packets = new LinkedList<>();
135135
private Map<Integer, AtomicInteger> apid2counter = new HashMap<>();
136136
private final ProcessingModelBasedResolver resolver;
137-
private final ExecutorService frameSender = Executors.newFixedThreadPool(1); // OK, test tool
138137

139138
private final Timer performanceSampler = new Timer("Spacecraft Sampler", true);
140139
private Instant lastSampleGenerationTime;
@@ -317,7 +316,7 @@ private void generatePackets() {
317316
try {
318317
SpacePacket sp = pkt.generate();
319318
if(sp != null) {
320-
packetsToSend.put(sp);
319+
addPacketToQueue(sp, false);
321320
synchronized (performanceSampler) {
322321
++packetsPerSecond;
323322
}
@@ -332,7 +331,7 @@ private void generatePackets() {
332331
try {
333332
SpacePacket spev = evpkt.generate();
334333
if(spev != null) {
335-
packetsToSend.put(spev);
334+
addPacketToQueue(spev, false);
336335
synchronized (performanceSampler) {
337336
++packetsPerSecond;
338337
}
@@ -344,10 +343,27 @@ private void generatePackets() {
344343
}
345344
}
346345

346+
private void addPacketToQueue(SpacePacket sp, boolean withPriority) throws InterruptedException {
347+
synchronized (packetsToSend) {
348+
while (!withPriority && packetsToSend.size() >= 1000) {
349+
packetsToSend.wait();
350+
}
351+
packetsToSend.put(sp);
352+
packetsToSend.notifyAll();
353+
}
354+
}
355+
347356
private void sendPackets() {
348357
while (running) {
349358
try {
350-
SpacePacket sp = this.packetsToSend.take();
359+
SpacePacket sp = null;
360+
synchronized (packetsToSend) {
361+
while (packetsToSend.isEmpty()) {
362+
packetsToSend.wait();
363+
}
364+
sp = packetsToSend.take();
365+
packetsToSend.notifyAll();
366+
}
351367
// Get the TM VC to use: 0 if configured, otherwise the first
352368
TmSenderVirtualChannel vcToUse = this.id2tmvc.get(0);
353369
if (vcToUse == null) {
@@ -395,19 +411,21 @@ private void processCltu(long cltuId, byte[] cltu) {
395411
}
396412

397413
private void sendTmFrame(TmTransferFrame tmTransferFrame) {
398-
this.frameSender.execute(() -> {
399-
// Send the transfer frame
400-
// if vcId == 0 and vcc == 0, generate time packet: generation rate is 256
401-
if (tmTransferFrame.getVirtualChannelId() == 0 && tmTransferFrame.getVirtualChannelFrameCount() == 0) {
402-
generateTimePacket(Instant.now());
403-
}
404-
if (rafProvider.getCurrentBindingState() == ServiceInstanceBindingStateEnum.ACTIVE) {
414+
// Send the transfer frame
415+
// if vcId == 0 and vcc == 0, generate time packet: generation rate is 256
416+
if (tmTransferFrame.getVirtualChannelId() == 0 && tmTransferFrame.getVirtualChannelFrameCount() == 0) {
417+
generateTimePacket(Instant.now());
418+
}
419+
if (rafProvider.getCurrentBindingState() == ServiceInstanceBindingStateEnum.ACTIVE) {
420+
try {
405421
boolean result = rafProvider.transferData(tmTransferFrame.getFrame(), 0, 1, Instant.now(), false, StringUtil.toHexDump("ANTENNA-TEST".getBytes(StandardCharsets.ISO_8859_1)), false, new byte[0]);
406422
if (!result) {
407423
System.out.println("Error transferring TF");
408424
}
425+
} catch (Exception e) {
426+
e.printStackTrace();
409427
}
410-
});
428+
}
411429
}
412430

413431
private void generateTimePacket(Instant now) {
@@ -422,7 +440,7 @@ private void generateTimePacket(Instant now) {
422440
builder.addData(obt);
423441
SpacePacket sp = builder.build();
424442
try {
425-
this.packetsToSend.put(sp);
443+
addPacketToQueue(sp, true);
426444
synchronized (performanceSampler) {
427445
++packetsPerSecond;
428446
}
@@ -548,7 +566,7 @@ private void queuePus1(SpacePacket packet, int subtype) {
548566
SpacePacket sp = pt.generate(Arrays.copyOfRange(packet.getPacket(), 0, 4));
549567
System.out.println("Queueing PUS 1 packet: " + StringUtil.toHexDump(sp.getPacket()));
550568
try {
551-
this.packetsToSend.put(sp);
569+
addPacketToQueue(sp, false);
552570
synchronized (performanceSampler) {
553571
++packetsPerSecond;
554572
}
@@ -565,7 +583,7 @@ private void queuePus1(SpacePacket packet, int subtype) {
565583
SpacePacket sp = pt.generate(Arrays.copyOfRange(packet.getPacket(), 0, 4));
566584
System.out.println("Queueing PUS 1 packet (def): " + StringUtil.toHexDump(sp.getPacket()));
567585
try {
568-
this.packetsToSend.put(sp);
586+
addPacketToQueue(sp, false);
569587
synchronized (performanceSampler) {
570588
++packetsPerSecond;
571589
}

0 commit comments

Comments
 (0)