This page describes experimentation with the newly developed MAC user scheduler in Agora
. While this feature is still being developed, at this point in time (July 2023), it provides the capability to attach multiple radios to the base station, while scheduling a smaller number of them (for downlink and uplink transmission) per frame. The scheduler implements a Round-Robin scheduling. The number of users to be scheduled per frame is specified in the input configuration JSON file with parameters “spatial_streams”
. Note that the number of total users in the system is specified by the number of serial numbers in the topology file. In this example, we have 2 users connected, while the number of spatial streams is set to 1. See the configuration JSON snippet below:
"frame_schedule": [
"BSCLGGPGGGDDDGGG"
],
"spatial_streams" : 1,
Above, we also see a new symbol type “S” in the schedule. The symbol S is for the control broadcast channel. The S symbol is similar to the beacon symbol (B), except it carries data. The information in the control broadcast symbol is encoded with MCS level 5 (QPSK, code rate 379/1024) for reliability. Currently, it is only sent from one of the antennas at the base station in the downlink direction. Currently, the data encoded in this symbol indicates the current frame number from the base station view. Given the static schedules that are shared between both the Agora and Users, the knowledge of the base station frame number allows users to engage in the transmission or reception of beamformed data in whichever frame they are scheduled. The scheduled TX/RX will not work if the S symbol is not activated.
Future releases of Agora will implement as channel-aware dynamic scheduler with the number of spatial streams being determined on a per-frame basis, based on the channel quality of users.
We recommend launching 2 Terminals to execute the following programs (order matters)
Run data_generator
./build/data_generator --conf_file files/config/examples/dl-powder-sched-2ue.json
Run agora
./build/agora --conf_file files/config/examples/dl-powder-sched-2ue.json
Run user
./build/user --conf_file files/config/examples/dl-powder-sched-2ue.json
[24:913554][I] Frame 999 Pilot Signal SNR (dB) Range at BS Antennas: User 0: [7.2,21.8] User 1: [2.1,18.0]
[24:913590][I] Main [frame 999 + 0.47 ms]: Completed ZF beamweight calc
[24:913600][I] Frame 999 Beamweight matrix inverse condition number range: [0.00,1.00], Mean: 0.12
[24:913692][I] Main [frame 999 + 0.57 ms]: Completed precoding
[24:913708][I] Main [frame 999 + 0.59 ms]: Completed IFFT
[24:913825][I] Main [frame 999 + 0.71 ms]: Completed TX of first symbol
[24:913883][I] Main [frame 999 + 0.76 ms]: Completed TX (1 DL Control & 3 DL Data symbols)
Frame 4999 summary: FFT (24 tasks): 0.004 ms (~0.0016 + 0.0017 + 0.0004 ms), CSI (16 tasks): 0.031 ms (~0.0010 + 0.0017 + 0.0235 ms), ZF (336 tasks): 0.192 ms (~0.0044 + 0.0174 + 0.1694 ms), Demul (1008 tasks): 0.043 ms (~0.0018 + 0.0264 + 0.0004 ms), Decode (6 tasks): 0.023 ms (~0.0000 + 0.0232 + 0.0000 ms), Encode (2 tasks): 0.001 ms (~0.0000 + 0.0000 + 0.0000 ms), iFFT (24 tasks): 0.007 ms (~0.0001 + 0.0071 + 0.0002 ms), Precode (1008 tasks): 0.006 ms (~0.0013 + 0.0034 + 0.0007 ms), Total: 0.31 ms
2:374987 INFOR: Agora: printing stats and saving to file
Stats: total processed frames 5000
Downlink totals (tasks, frames): CSI (80000, 5000.00), ZF (1680000, 5000.00), Encode (10000, 1666.67), Precode (5040000, 5000.00), IFFT (120000, 5000.00)
Uplink totals (tasks, frames): CSI (80000, 5000.00), ZF (1680000, 5000.00), FFT (120000, 5000.00), Demul (5040000, 5000.00), Decode (30000, 5000.00)
Thread 0 performed (tasks, fraction of tasks): FFT (6661, 5.55%), CSI (5697, 7.12%), ZF (143100, 8.52%), Demul (405888, 8.05%), Decode (1755, 5.85%), Encode (516, 5.16%), iFFT (9840, 8.20%), Precode (408960, 8.11%),
Thread 1 performed (tasks, fraction of tasks): FFT (6813, 5.68%), CSI (5802, 7.25%), ZF (143308, 8.53%), Demul (398928, 7.92%), Decode (1711, 5.70%), Encode (516, 5.16%), iFFT (9752, 8.13%), Precode (409392, 8.12%),
Thread 2 performed (tasks, fraction of tasks): FFT (7084, 5.90%), CSI (6270, 7.84%), ZF (142757, 8.50%), Demul (387072, 7.68%), Decode (1516, 5.05%), Encode (502, 5.02%), iFFT (9479, 7.90%), Precode (417984, 8.29%),
Thread 3 performed (tasks, fraction of tasks): FFT (6999, 5.83%), CSI (6197, 7.75%), ZF (139833, 8.32%), Demul (387792, 7.69%), Decode (1534, 5.11%), Encode (511, 5.11%), iFFT (9511, 7.93%), Precode (418176, 8.30%),
Thread 4 performed (tasks, fraction of tasks): FFT (6702, 5.58%), CSI (6364, 7.96%), ZF (142695, 8.49%), Demul (392928, 7.80%), Decode (1479, 4.93%), Encode (539, 5.39%), iFFT (9643, 8.04%), Precode (421536, 8.36%),
Thread 5 performed (tasks, fraction of tasks): FFT (5952, 4.96%), CSI (5402, 6.75%), ZF (141613, 8.43%), Demul (408288, 8.10%), Decode (1428, 4.76%), Encode (462, 4.62%), iFFT (9662, 8.05%), Precode (404928, 8.03%),
Thread 6 performed (tasks, fraction of tasks): FFT (6147, 5.12%), CSI (5480, 6.85%), ZF (141146, 8.40%), Demul (387312, 7.68%), Decode (1325, 4.42%), Encode (479, 4.79%), iFFT (9665, 8.05%), Precode (401616, 7.97%),
Thread 7 performed (tasks, fraction of tasks): FFT (7137, 5.95%), CSI (6221, 7.78%), ZF (143039, 8.51%), Demul (392784, 7.79%), Decode (1540, 5.13%), Encode (529, 5.29%), iFFT (9687, 8.07%), Precode (421392, 8.36%),
Thread 8 performed (tasks, fraction of tasks): FFT (5947, 4.96%), CSI (5589, 6.99%), ZF (139858, 8.32%), Demul (388272, 7.70%), Decode (1396, 4.65%), Encode (548, 5.48%), iFFT (9710, 8.09%), Precode (401184, 7.96%),
Thread 9 performed (tasks, fraction of tasks): FFT (6739, 5.62%), CSI (6417, 8.02%), ZF (142601, 8.49%), Demul (393264, 7.80%), Decode (1486, 4.95%), Encode (499, 4.99%), iFFT (9717, 8.10%), Precode (423984, 8.41%),
Thread 10 performed (tasks, fraction of tasks): FFT (5847, 4.87%), CSI (5097, 6.37%), ZF (140598, 8.37%), Demul (386160, 7.66%), Decode (1379, 4.60%), Encode (427, 4.27%), iFFT (9001, 7.50%), Precode (391680, 7.77%),
Thread 11 performed (tasks, fraction of tasks): FFT (47972, 39.98%), CSI (15464, 19.33%), ZF (119452, 7.11%), Demul (711312, 14.11%), Decode (13451, 44.84%), Encode (4472, 44.72%), iFFT (14333, 11.94%), Precode (519168, 10.30%),
Stats: Saving master timestamps to ./data/timeresult.txt
Stats: Printing detailed results to ./data/timeresult_detail.txt
2:436151 INFOR: Agora: terminating
=================================
CORE LIST SUMMARY
=================================
Total Number of Cores: 72 : 36
|| Core ID: 5 || Requested: 5 || ThreadType: Master || ThreadId: 140481406758272
|| Core ID: 5 || Requested: 5 || ThreadType: Master || ThreadId: 140481406758272
|| Core ID: 6 || Requested: 6 || ThreadType: TXRX || ThreadId: 140480482809600
|| Core ID: 7 || Requested: 7 || ThreadType: Worker || ThreadId: 140480583522048
|| Core ID: 8 || Requested: 8 || ThreadType: Worker || ThreadId: 140480575129344
|| Core ID: 9 || Requested: 9 || ThreadType: Worker || ThreadId: 140480566736640
|| Core ID: 10 || Requested: 10 || ThreadType: Worker || ThreadId: 140480558343936
|| Core ID: 11 || Requested: 11 || ThreadType: Worker || ThreadId: 140480549951232
|| Core ID: 12 || Requested: 12 || ThreadType: Worker || ThreadId: 140480541558528
|| Core ID: 13 || Requested: 13 || ThreadType: Worker || ThreadId: 140480533165824
|| Core ID: 14 || Requested: 14 || ThreadType: Worker || ThreadId: 140480524773120
|| Core ID: 15 || Requested: 15 || ThreadType: Worker || ThreadId: 140480516380416
|| Core ID: 16 || Requested: 16 || ThreadType: Worker || ThreadId: 140480507987712
|| Core ID: 17 || Requested: 17 || ThreadType: Worker || ThreadId: 140480499595008
|| Core ID: 18 || Requested: 18 || ThreadType: Worker || ThreadId: 140480491202304
=================================
[24:914005][I] PhyUe [frame 999 + 1.20 ms]: Pilot FFT finished
[24:914125][I] Frame: 999, Symbol: 11, User: 1, EVM: 5.220296, SNR: 12.823049
[24:914220][I] PhyUe [frame 999 + 1.42 ms]: Received all packets
[24:914239][I] Frame: 999, Symbol: 12, User: 1, EVM: 4.023363, SNR: 13.954107
[24:914253][I] PhyUe [frame 999 + 1.45 ms]: Data FFT finished
[24:914255][I] PhyUe [frame 999 + 1.45 ms]: Completed demodulation
[24:914281][I] PhyUe [frame 999 + 1.48 ms]: Completed decoding
[24:914287][I] UE 0: Downlink bit errors (BER) 372/351296 (0.001059), block errors (BLER) 3/998 (0.003006)
[24:914288][I] UE 1: Downlink bit errors (BER) 1238/351296 (0.003524), block errors (BLER) 10/998 (0.010020)
[24:914306][I] PhyUe: Stopping threads
17:860788 INFOR: PhyUe: Joining threads
17:860807 INFOR: PhyUe: Joining threads
17:860811 INFOR: PhyUe: Joining threads
17:860814 INFOR: PhyUe: Joining threads
17:860867 INFOR: PhyUe: Complete
=================================
CORE LIST SUMMARY
=================================
Total Number of Cores: 72 : 72
|| Core ID: 0 || Requested: 0 || ThreadType: Master (TX) || ThreadId: 140059075315136
|| Core ID: 1 || Requested: 1 || ThreadType: TX || ThreadId: 140058856904448
|| Core ID: 2 || Requested: 2 || ThreadType: TX || ThreadId: 140058848511744
|| Core ID: 3 || Requested: 3 || ThreadType: TX || ThreadId: 140058840119040
|| Core ID: 4 || Requested: 4 || ThreadType: TX || ThreadId: 140058831726336
=================================
Once all frames have been completed you will see the Downlink Ber / Bler output in the User
terminal.
You should see a near 0 BER for the experiments described on this page.