change queues, run exec speed optimizations

This commit is contained in:
2026-06-23 21:30:01 +03:00
parent 7a272788f8
commit 26e594cee6
22 changed files with 919 additions and 613 deletions

View File

@@ -4,13 +4,13 @@
#include <stdint.h>
#include "wsServer/include/ws.h"
#include "ptQueue/inc/ptQueue.h"
#include "ptQueue/inc/spsc.h"
typedef struct {
ws_cli_conn_t clientId;
uint8_t isAuthed;
ptQueue* incomeQ;
ptQueue* outcomeQ;
queue_spsc_t* incomeQ;
queue_spsc_t* outcomeQ;
uint64_t connectedAt;
uint32_t streamRegIterator;
} ClientContext;

View File

@@ -3,10 +3,10 @@
#include "pub/libhmmmm/config.h"
void freeMemSegConf(conf_mem_seg_t* memSegConf);
void freeMemConf(conf_mem_t* memConf);
// void freeMemSegConf(conf_mem_seg_t* memSegConf);
// void freeMemConf(conf_mem_t* memConf);
void freeConf(conf_dev_t* conf);
void freeComposeId(char** id);
uint8_t compareComposeId(char** idA, char** idB);
// uint8_t compareComposeId(char** idA, char** idB);
#endif

View File

@@ -2,10 +2,12 @@
#define __CONTEXT_H__
#include <pthread.h>
#include <stddef.h>
#include <stdint.h>
#include "ptQueue/inc/ptQueue.h"
#include "ptQueue/inc/spsc.h"
#include "wsServer/include/ws.h"
#include "ptQueue/inc/mpsc.h"
#include "linkedlist.h"
#include "sized_ptr.h"
@@ -16,8 +18,8 @@
typedef struct {
SizedPtr* bufs;
uint8_t buffersCount;
_Atomic (uint8_t) readRequestIdx;
_Atomic (uint8_t) currWritingIdx;
CACHE_ALIGN _Atomic (uint8_t) readRequestIdx;
CACHE_ALIGN _Atomic (uint8_t) currWritingIdx;
} OutgoingBuffers;
@@ -43,12 +45,15 @@ typedef struct {
// Cached DeviceIdMappingNotif broadcast message (sent to newly authed clients)
uint8_t* deviceIdMappingMsg;
size_t deviceIdMappingMsgLen;
queue_mpsc_t* inMsgQueue;
queue_spsc_t* outMsgQueue;
} EmulContext;
typedef struct {
pthread_mutex_t registerMutex;
ptQueue* regQueue;
queue_spsc_t* regQueue;
queue_mpsc_t* inMsgQueue;
uint8_t* accessToken;
EmulContext* emulContext;
} ServerContext;

View File

@@ -4,8 +4,9 @@
#include <stdint.h>
#include "context.h"
#include "ptQueue/inc/spsc.h"
void broadcastClients(EmulContext* emulContext, uint8_t* msg, size_t msgLen);
void dispatchOutgoingMessage(OutgoingBuffers* outBufs, ws_cli_conn_t clientIdx, uint8_t* msg, size_t msgLen);
void dispatchOutgoingMessage(queue_spsc_t* outMsgQueue, ws_cli_conn_t clientIdx, uint8_t* msg, size_t msgLen);
#endif

View File

@@ -7,7 +7,7 @@
#include "proto/dial.h"
#include "stream_reader.h"
void unregisterClientStream(EmulContext* emulContext, ClientContext* ctx, uint32_t regId);
// static void unregisterClientStream(EmulContext* emulContext, ClientContext* ctx, uint32_t regId);
void unregisterClientStreams(EmulContext* emulContext, ClientContext* ctx);
void handleIncomingStreamMessage(

View File

@@ -1,6 +1,7 @@
#ifndef __PROTO_MSG_H__
#define __PROTO_MSG_H__
#include "client.h"
#include "wsServer/include/ws.h"
#include <stdint.h>
#include <stdlib.h>
@@ -10,6 +11,7 @@
typedef struct {
uint8_t* data;
size_t size;
ClientContext* ctx;
} FbMessage;
typedef struct {

View File

@@ -32,11 +32,11 @@ typedef struct
char** memsegNames;
uint64_t* memsegShifts;
uint64_t* memsegSizes;
uint8_t* memsegCellSizes;
uint64_t* memreadCellAddrs;
uint8_t* memwriteWordLengths;
uint8_t* memwriteCellSegments;
uint64_t* memwriteCellAddrs;
void** memwriteValues;
uint64_t* memwriteValues;
uint8_t memreadLen;
uint8_t memwriteLen;
} device_mem_t;
@@ -87,10 +87,9 @@ typedef void (*ext_h_write_func)(uint64_t addr, void* rawCells, void* data, void
} \
__mem->memwriteCellAddrs[__mem->memwriteLen] = __addr; \
__mem->memwriteCellSegments[__mem->memwriteLen] = __segno; \
__mem->memwriteWordLengths[__mem->memwriteLen] = sizeof(__cell_t); \
*((__cell_t*)__mem->memwriteValues[__mem->memwriteLen]) = (__cell_t)(__val); \
/*__mem->memwriteWordLengths[__mem->memwriteLen] = sizeof(__cell_t);*/ \
(__mem->memwriteValues[__mem->memwriteLen]) = (__cell_t)(__val); \
__mem->memwriteLen += 1; \
}
#endif // ifndef __HMMMM_PUB_MEM_H__