--- title: 'L2 simulator' disqus: hackmd --- <center><font size=7>L2 simulator</font></center> === [TOC] # A. Install from sourcecode ###### tags: `Eurecom` `Testing` ![](https://i.imgur.com/ZsHLGtq.png) ## Environment - PC1-Ubuntu16.04 EPC mosaic5g oai-cn (32) - PC2-Ubuntu16.04 eNB openairinterface5g (branch fixes-mac-sched-tun) UE openairinterface5g (branch fixes-mac-sched-tun) ## Build EPC Follow the [tutorial from Tony](https://hackmd.io/4g2MoitESMSXPkksopoMuw?view) ## Build eNB - build source code ```shell $ git clone https://gitlab.eurecom.fr/schmidtr/openairinterface5g.git $ cd openairinterface5g $ git checkout fixes-mac-sched-tun $ cd openairinterface5g/cmake_targets $ sudo ./build_oai --UE --eNB -c -C ``` - edit [l2-simulator.conf](https://gitlab.eurecom.fr/mosaic5g/mosaic5g/-/wikis/tutorials/sample-conf/l2-simulator.conf) ```conf ////////// MME parameters: mme_ip_address = ( { ipv4 = "192.168.12.242"; // <-- HERE ipv6 = "192:168:30::17"; active = "yes"; preference = "ipv4"; } ); NETWORK_INTERFACES : { ENB_INTERFACE_NAME_FOR_S1_MME = "enp0s31f6"; // <-- HERE ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.124/24"; // <-- HERE ENB_INTERFACE_NAME_FOR_S1U = "enp0s31f6"; // <-- HERE ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.124/24"; // <-- HERE ENB_PORT_FOR_S1U = 2152; # Spec 2152 ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.124/24"; // <-- HERE ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; MACRLCs = ({ num_cc = 1; local_s_if_name = "lo:"; // <-- HERE remote_s_address = "127.0.0.1"; // <-- HERE local_s_address = "127.0.0.2"; // <-- HERE local_s_portc = 50001; remote_s_portc = 50000; local_s_portd = 50011; remote_s_portd = 50010; tr_s_preference = "nfapi"; // <-- HERE tr_n_preference = "local_RRC"; }); ``` - start the eNB (default) ```shell $ sudo ifconfig lo: 127.0.0.2 netmask 255.0.0.0 up $ cd ran_build/build $ sudo ./lte-softmodem -O <l2-simulator-conf> ``` ![](https://i.imgur.com/RL9V28z.png) - [start the eNB in diff algo](https://hackmd.io/RSdDXikYR9iw13UIVlMNAQ?view#Algorithm) - oai-cn ![](https://i.imgur.com/CJBMsIh.png) ## Build UE - [ue.l2.conf](https://gitlab.eurecom.fr/mosaic5g/mosaic5g/-/wikis/tutorials/sample-conf/ue.l2.conf) ```conf L1s = ( { num_cc = 1; tr_n_preference = "nfapi"; local_n_if_name = "lo:"; // <-- HERE remote_n_address = "127.0.0.2"; // <-- HERE local_n_address = "127.0.0.1"; // <-- HERE local_n_portc = 50000; remote_n_portc = 50001; local_n_portd = 50010; remote_n_portd = 50011; } ); ``` ### Single UE - [usim.conf](https://gitlab.eurecom.fr/mosaic5g/mosaic5g/-/wikis/tutorials/sample-conf/oai-cn-208950000000007.conf) ```conf # List of known PLMNS PLMN: { PLMN0: { FULLNAME="Test network"; SHORTNAME="OAI4G"; MNC="95"; // <-- HERE MCC="208"; // <-- HERE }; }; UE0: { USER: { IMEI="35609204079507"; MANUFACTURER="EURECOM"; MODEL="LTE Android PC"; PIN="0000"; }; SIM: { MSIN="0000000007"; // <-- HERE USIM_API_K="8baf473f2f8fd09487cccbd7097c6862"; // <-- HERE OPC="8e27b6af0e692e750f32667a3b14605d"; // <-- HERE MSISDN="33638050007"; }; # Home PLMN Selector with Access Technology HPLMN= "20895"; # User controlled PLMN Selector with Access Technology UCPLMN_LIST = (); # Operator PLMN List OPLMN_LIST = ("20895"); # Operator controlled PLMN Selector with Access Technology OCPLMN_LIST = ("20895"); # Forbidden plmns FPLMN_LIST = (); # List of Equivalent HPLMNs #TODO: UE does not connect if set, to be fixed in the UE # EHPLMN_LIST= ("20811", "20813"); EHPLMN_LIST= (); }; ``` - saved in binary form ```shell $ cd ran_build/build/ $ ../../nas_sim_tools/build/conf2uedata -c <usim.conf> -o . ``` ![](https://i.imgur.com/3y1DzFI.png) - start the UE ```shell sudo ./lte-uesoftmodem -O <ue.l2.conf> --L2-emul 3 --num-ues 1 ``` ![](https://i.imgur.com/bkAaROJ.png) - Attach accept ![](https://i.imgur.com/TKwc2ah.png) - oai-cn status ![](https://i.imgur.com/dBZnqRo.png) ### Multiple UE (e.g. 2 UE) - check the usim info from oai-cn and copy the info to the usim.conf ```shell $ mysql -u root -p oai_db > select imsi, msisdn, imei, hex(users.key), sqn, hex(rand), hex(OPc) from users where imsi regexp "^20893"; ``` - usim.conf ```conf # List of known PLMNS PLMN: { PLMN0: { FULLNAME="Test network"; SHORTNAME="OAI4G"; MNC="95"; MCC="208"; }; }; UE0: { USER: { IMEI="35609204079507"; MANUFACTURER="EURECOM"; MODEL="LTE Android PC"; PIN="0000"; }; SIM: { MSIN="0000000007"; USIM_API_K="8baf473f2f8fd09487cccbd7097c6862"; OPC="8e27b6af0e692e750f32667a3b14605d"; MSISDN="33638050007"; }; # Home PLMN Selector with Access Technology HPLMN= "20895"; # User controlled PLMN Selector with Access Technology UCPLMN_LIST = (); # Operator PLMN List OPLMN_LIST = ("20895"); # Operator controlled PLMN Selector with Access Technology OCPLMN_LIST = ("20895"); # Forbidden plmns FPLMN_LIST = (); # List of Equivalent HPLMNs #TODO: UE does not connect if set, to be fixed in the UE # EHPLMN_LIST= ("20811", "20813"); EHPLMN_LIST= (); }; UE1: { USER: { IMEI="35609204079502"; MANUFACTURER="EURECOM"; MODEL="LTE Android PC"; PIN="0000"; }; SIM: { MSIN="0000000002"; USIM_API_K="8baf473f2f8fd09487cccbd7097c6862"; OPC="8e27b6af0e692e750f32667a3b14605d"; MSISDN="33638050002"; }; # Home PLMN Selector with Access Technology HPLMN= "20895"; # User controlled PLMN Selector with Access Technology UCPLMN_LIST = (); # Operator PLMN List OPLMN_LIST = ("20895"); # Operator controlled PLMN Selector with Access Technology OCPLMN_LIST = ("20895"); # Forbidden plmns FPLMN_LIST = (); # List of Equivalent HPLMNs #TODO: UE does not connect if set, to be fixed in the UE # EHPLMN_LIST= ("20811", "20813"); EHPLMN_LIST= (); }; ``` - saved in binary form ```shell $ cd ran_build/build/ $ ../../nas_sim_tools/build/conf2uedata -c <usim.conf> -o . ``` - start the UE and change the number of `--num-ues` based on the UE number in usim.conf ```shell sudo ./lte-uesoftmodem -O <ue.l2.conf> --L2-emul 3 --num-ues <UE number> ``` - Attach accept ![](https://i.imgur.com/8Name2T.png) - oai-cn ![](https://i.imgur.com/XXCWXUB.png) # B. Install from Snap https://gitlab.eurecom.fr/mosaic5g/mosaic5g/-/wikis/tutorials/l2-sim ```bash $ git clone https://gitlab.eurecom.fr/mosaic5g/mosaic5g.git $ cd mosaic5g/ $ ./build_m5g -S $ sudo oai-sim.init ``` ```bash $ oai-sim.info Snap Name: oai-sim Snap Instance Name: oai-sim Sanp Version: 2.0 Sanp Revision: 5 Snap Data: /var/snap/oai-sim/5 Snap Conf: { "apiaddr": "0.0.0.0", "apiport": 5550, "enbsim": "/var/snap/oai-sim/5/enb.l2sim.conf", "mgraddr": "0.0.0.0", "mgrport": 6660, "openapi": "http://0.0.0.0:5550", "uesim": "/var/snap/oai-sim/5/ue.l2sim.conf", "uesimcmd": "/var/snap/oai-sim/5/ue.l2sim.cmd", "usim": "/var/snap/oai-sim/5/usim_multi.conf" } Snap Permissions to be granted: - log-observe - network-control - process-control - netlink-connector ``` ```bash $ sudo snap connect oai-sim:log-observe $ sudo snap connect oai-sim:network-control $ sudo snap connect oai-sim:process-control $ sudo snap connect oai-sim:netlink-connector ``` ```bash $ oai-sim.usim-gen ``` # Algorithm ## Round-Robin ```shell $ sudo ./lte-softmodem -O <l2-simulator.conf> --MACRLCs.[0].default_sched_dl_algo "round_robin_dl" ``` - edit MACRLCs section in l2-simulator.conf ```conf MACRLCs = ({ ... tr_s_preference = "nfapi"; tr_n_preference = "local_RRC"; scheduler_mode = "default"; default_sched_dl_algo = "round_robin_dl"; }); ``` ## Propotional-Fair ```shell $ sudo ./lte-softmodem -O <l2-simulator.conf> --MACRLCs.[0].default_sched_dl_algo "proportional_fair_wbcqi_dl" ``` - edit l2-simulator.conf ```conf MACRLCs = ({ ... tr_s_preference = "nfapi"; tr_n_preference = "local_RRC"; scheduler_mode = "default"; default_sched_dl_algo = "proportional_fair_wbcqi_dl"; }); ``` ## Maximun-Throughput ```shell $ sudo ./lte-softmodem -O <l2-simulator.conf> --MACRLCs.[0].default_sched_dl_algo "maximum_throughput_wbcqi_dl" ``` - edit l2-simulator.conf ```conf MACRLCs = ({ ... tr_s_preference = "nfapi"; tr_n_preference = "local_RRC"; scheduler_mode = "default"; default_sched_dl_algo = "maximum_throughput_wbcqi_dl"; }); ``` ```bash oai-sim.enb-conf-get sudo cp /var/snap/oai-sim/5/enb.l2sim.conf /var/snap/oai-sim/5/enb.l2sim.conf.bak sudo vim /var/snap/oai-sim/5/enb.l2sim.conf sudo ifconfig lo:2 127.0.0.2 netmask 255.255.255.0 up oai-sim.ue-conf-get sudo cp /var/snap/oai-sim/5/ue.l2sim.conf /var/snap/oai-sim/5/ue.l2sim.conf.bak sudo vim /var/snap/oai-sim/5/ue.l2sim.conf oai-sim.ue-cmd-get sudo cp /var/snap/oai-sim/5/ue.l2sim.cmd /var/snap/oai-sim/5/ue.l2sim.cmd.bak sudo vim /var/snap/oai-sim/5/ue.l2sim.cmd sudo vim $(oai-sim.usim-get) sudo oai-sim.usim-gen ``` # Note ## Script to log MAC throughput/TBS ### FlexRAN - build flexRAN ```shell $ git clone https://gitlab.eurecom.fr/flexran/flexran-rtc.git $ cd flexran-rtc $ ./build_flexran_rtc.sh $ cd build/ $ cmake .. $ make -j$(nproc) ``` ![](https://i.imgur.com/l8rq7GO.png) - edit the l2-simulator.conf ```conf NETWORK_CONTROLLER : { FLEXRAN_ENABLED = "yes"; // <-- HERE FLEXRAN_INTERFACE_NAME = "lo"; // <-- HERE FLEXRAN_IPV4_ADDRESS = "127.0.0.1"; // <-- HERE FLEXRAN_PORT = 2210; FLEXRAN_CACHE = "/tmp"; FLEXRAN_AWAIT_RECONF = "no"; }; ``` - run FlexRAN and connect the L2 simulator - start the flexran ```shell $ cd ~/flexran-rtc/ $ sudo ./run_flexran_rtc.sh or $ sudo ./build/rt_controller -c log_config/basic_log ``` - run the l2 simulator(same as above) ### Mosaic5G Store - clone the Mosaic5G store ```shell $ git clone https://gitlab.eurecom.fr/mosaic5g/store.git $ cd store/ $ git checkout data_rate_app $ cd sdk ``` - start the app after run the flexran, and run the l2 simulator ```shell $ python mac_rate_app.py --op-mode=sdk ``` ![](https://i.imgur.com/LJMLhal.png) ### iperf - UE side (iperf server) ``` $ bash ./wait_ifs.sh 4 ``` :::success - wait_ifs.sh ```shell #!/bin/bash if [[ $# -ne 1 ]]; then echo "need one param" exit fi if [[ ! $1 =~ ^[0-9]+$ ]]; then echo "param needs to be a number" exit fi while [ $(ifconfig | grep "oaitun_ue[0-9]\+" | wc -l) -ne $1 ]; do sleep 0.1; done let devs=$1+1 for ((ip=2; ip <= $devs; ip++)); do echo "bind on 172.16.0.$ip" iperf -su --bind 172.16.0.$ip -i1 & done ``` ::: - EPC side (iperf client) ``` $ bash ./iperf_c.sh 4 ``` :::success - iperf_c.sh ``` #!/bin/bash let devs=$1+1 for ((ip=2; ip <= $devs; ip++)); do iperf -c 172.16.0.$ip -u -i1 & done ``` ::: ![](https://i.imgur.com/fkFEtng.png) ## How to log MAC allocation - Make LOG_D to LOG_I ```shell $ vi openair2/LAYER2/MAC/pre_processor.c ``` ```C dlsch_scheduler_pre_processor(){ ... if (print) LOG_D(MAC, "%4d.%d DL scheduler allocation list: %s\n", frameP, subframeP, t); } /// change log level /// if (print) LOG_I(MAC, "%4d.%d DL scheduler allocation list: %s\n", frameP, subframeP, t); } ``` ![](https://i.imgur.com/hbjazhl.png) - Compile lte-softmodem ```shell $ make lte-softmodem ``` - RR (CQI=15) - resource allocation: each ue get the resource in the order ![](https://i.imgur.com/1M4koLU.png) - throughput: each ue has similar data rate, since the CQI is the same ![](https://i.imgur.com/kBpdtgQ.png) - iperf ![](https://i.imgur.com/7KNIcuB.png) - PF (CQI=15) - each ue get the resource based on the diff coeff and the max coeff will get the resource first. the scheduler will allocate the resource that ue required and trun to the next ue. ![](https://i.imgur.com/vQEH9rM.png) - throughput: each ue has similar data rate, since the CQI is the same ![](https://i.imgur.com/TRGUIzy.png) - ipref ![](https://i.imgur.com/SI1NzYj.png) - MT (CQI=15) - the scheduler will allocate the resource that ue required and trun to the next ue. ![](https://i.imgur.com/YNpdxtq.png) - throughput: each ue has similar data rate, since the CQI is the same ![](https://i.imgur.com/6RsGsFJ.png) - iperf ![](https://i.imgur.com/H3xY1fT.png) Now, the allocation should be shown. There should be differences between how RR and PF allocate. Please explain what happens, and why. ## Change the CQI per UE PATH = `openairinterface5g/openair2/PHY_INTERFACE/phy_stub_UE.c` ```C fill_ulsch_cqi_indication_UE_MAC(){ ... const int cqi = 15; } /// change the cqi /// fill_ulsch_cqi_indication_UE_MAC(){ ... const int cqi = 6 + rand() % 10;` } ``` - complie the lte-softmodem and lte-uesoftmodem ``` make lte-softmodem lte-uesoftmodem ``` ### Throughput in mac_rate_app.py :::success Depending on the used scheduler, you should be able to see differences in throughput (both for iperf, and with the app above). Why? ::: - RR: the data rate of each ue is similar, and the total data rate is lower than PF and MT. Regardless of the CQI of each UE, they will get the resource fairly. - PF: the data rate of each ue and the toal data rate is higher than RR. since the algo choose the ue who has best CQI or lower data rate to get reousrce first. - The ue have a best CQI and get the resource first means the data rate will increased - The ue have a lower throuput means it will get the resouce even it have poor CQI. - So the total data rate will increased. - MT: the total data rate is maintained at the fixed value since the algo will choose the ue who has the best CQI and will ignore the ue who has poor CQI | Algo | Bandwidth = 8M | | -------- | -------- | | RR | ![](https://i.imgur.com/yUJTLEH.png) | | PF | ![](https://i.imgur.com/cKIyLXP.png) | | MT | ![](https://i.imgur.com/AwOSRfY.png) | ### Diff Algo > You will see the "best" effect when operating at full buffer, i.e. high load, e.g. 5M or higher. - RR (Diff CQI) - Resource allocation :::spoiler 2M ![](https://i.imgur.com/QoSv3qe.png) ::: :::spoiler 5M ![](https://i.imgur.com/cE0NqTk.png) ::: - throughput :::spoiler 2M ![](https://i.imgur.com/SDTubKo.png) ::: :::spoiler 5M ![](https://i.imgur.com/skjHr2g.png) ::: - iperf :::spoiler 2M ![](https://i.imgur.com/60X9nho.png) ::: :::spoiler 5M ![](https://i.imgur.com/0sX2aJz.png) ::: - PF (Diff CQI) - Resource allocation :::spoiler 2M ![](https://i.imgur.com/KxxtWPY.png) ::: :::spoiler 5M ![](https://i.imgur.com/rnO8AEZ.png) ::: - throughput :::spoiler 2M ![](https://i.imgur.com/fgLydhK.png) ::: :::spoiler 5M ![](https://i.imgur.com/ee8DnU5.png) ::: - iperf :::spoiler 2M ![](https://i.imgur.com/7jW8Wrz.png) ::: :::spoiler 5M ![](https://i.imgur.com/fjOX69K.png) ::: - MT (Diff CQI) - Resource allocation :::spoiler 2M ![](https://i.imgur.com/kxRZfWq.png) ::: - throughput :::spoiler 2M ![](https://i.imgur.com/61yJnCc.png) ::: - iperf :::spoiler 2M ![](https://i.imgur.com/4xy1smB.png) ::: ## Change the scheduler dynamically ```shell $ cd flexran-rtc/tests/delegation_control ``` - Inside scheduler.json, use proportional_fair_wbcqi_dl for PF and round_robin_dl for RR. ``` $ vi scheduler.json ``` ![](https://i.imgur.com/EQXmq5Q.png). - Change the scheduler ```shell $ curl -XPOST localhost:9999/slice/enb -d @scheduler.json ``` ![](https://i.imgur.com/LSyL9e2.png) ![](https://i.imgur.com/4UY6Giq.png) ## Many UEs - Use the attached patch multi-ue.patch to enable more UEs (up to 32) ```shell $ patch -p1 < multi-ue.patch ``` ```patch commit e201106cde1aa9692e3734ea4ac4159a067bcd43 Author: Robert Schmidt <robert.schmidt@eurecom.fr> Date: Mon Aug 10 08:53:38 2020 +0200 Number of UE 32 diff --git a/openair2/COMMON/platform_constants.h b/openair2/COMMON/platform_constants.h index 49cb2247b..6b8037a49 100644 --- a/openair2/COMMON/platform_constants.h +++ b/openair2/COMMON/platform_constants.h @@ -72,7 +72,7 @@ #define MAX_eNB 2 #define MAX_gNB 2 #else - #define MAX_MOBILES_PER_ENB 4 + #define MAX_MOBILES_PER_ENB 32 #define MAX_MOBILES_PER_ENB_NB_IoT 4 #define MAX_MOBILES_PER_GNB 2//16 #define MAX_eNB 2 diff --git a/targets/COMMON/openairinterface5g_limits.h b/targets/COMMON/openairinterface5g_limits.h index a678197fd..fa92120d5 100644 --- a/targets/COMMON/openairinterface5g_limits.h +++ b/targets/COMMON/openairinterface5g_limits.h @@ -8,7 +8,7 @@ # define NUMBER_OF_NR_RU_MAX 2 # ifndef PHYSIM # ifndef UE_EXPANSION -# define NUMBER_OF_UE_MAX 4 +# define NUMBER_OF_UE_MAX 32 # define NUMBER_OF_NR_UE_MAX 4 # define NUMBER_OF_UCI_VARS_MAX 14 # define NUMBER_OF_CONNECTED_eNB_MAX 1 ``` - rebuild lte-softmodem and lte-ussoftmodem ```shell $ make lte-softmodem lte-uesoftmodem ``` ### 8 UE - RR - Resource Allocation ![](https://i.imgur.com/QRP4Ykw.png) :::success ## why the max_num_ue is 4, **since the CCE is limited, if all the CCE are assigned to DL, the control signal and UL data will not get CCE** the ue will be into groups of 4 and get the resource, for example in RR: ``` MAX_MOBILES_PER_ENB = 6 N_RBG = 13 UE_sched.head = 0 UE_sched.next[0] = 1 UE_sched.next[1] = 2 UE_sched.next[2] = 3 UE_sched.next[3] = -1 UE_sched.next[4] = 5 UE_sched.next[5] = -1 allocation list: 0123012301230 UE_sched.head = 1 UE_sched.next[0] = -1 UE_sched.next[1] = 2 UE_sched.next[2] = 3 UE_sched.next[3] = 4 UE_sched.next[4] = -1 UE_sched.next[5] = 0 allocation list: 1234123412341 UE_sched.head = 2 UE_sched.next[0] = 1 UE_sched.next[1] = -1 UE_sched.next[2] = 3 UE_sched.next[3] = 4 UE_sched.next[4] = 5 UE_sched.next[5] = -1 allocation list: 2345234523452 ``` ::: :::success ### why the resource allocate to each ue in order, for eaxmple: | ms | RBG0 | RBG1 | RBG2 | RBG3 | | - | - | - |- |- | | 1 | ==0== | 1 | 2 | 3 | | 2 | ==1== | 2 | 3 | 4 | | 3 | ==2== | 3 | 4 | 5 | | ... | . | . | . | . | **Reason 1:** if allocate like below | ms | RBG0 | RBG1 | RBG2 | RBG3 | | - | - | - |- |- | | 1 | 0 | 1 | 2 | 3 | | 2 | 4 | 5 | 6 | 7 | | 3 | 0 | 1 | 2 | 3 | | ... | . | . | . | . | **-> UE3&7 will get half resources than other UE** **Reason 2:** - if UE2 not tranmit the data at 1ms, and will tranmit data at 2ms. Using the same allocation method as above: | ms | RBG0 | RBG1 | RBG2 | RBG3 | | - | - | - |- |- | | 1 | 0 | 1 | 3 | 4 | | 2 | 5 | 6 | 7 | 0 | | 3 | 1 | 2 | 3 | 4 | | ... | . | . | . | . | **-> at 2ms, the UE2 will not be accessed** - if allocate the resource in order | ms | RBG0 | RBG1 | RBG2 | RBG3 | | - | - | - |- |- | | 1 | 0 | 1 | 3 | 4 | | 2 | 1 | 2 | 3 | 4 | | 3 | 2 | 3 | 4 | 5 | | ... | . | . | . | . | **-> UE2 will be accessed at 2ms** ::: - Throughput - 8M ![](https://i.imgur.com/D5cZzHa.png) - PF - Resource Allocation :::success CQI: UE3 > UE1=5 > UE7 > UE0 > UE2 > UE4=UE6 ::: ![](https://i.imgur.com/muAzwiE.png) ![](https://i.imgur.com/l5ZkaBm.png) ![](https://i.imgur.com/hRND2Bc.png) :::success ### How the PF deinfe the high priority UE? ```C coeff_ue[UE_id] = (float) tbs / thr_ue[UE_id] ``` **If the UE have ==higher CQI== means the larger tbs than the other, it will have a high coeffieient and get the resource first.** **But if the ue have lower CQI menas it will have ==lower throughput== than the other. It will also have a high coeffieient and get the resource.** ::: - Throughput - 8M ![](https://i.imgur.com/0dxAvW1.png) ## Preprocessor for static slicing The preprocessor for static slicing (DL) is in function static_dl() in openair2/LAYER2/MAC/slicing/slicing.c. Please read it and explain the differences to the default preprocessor. Why is this enough for slicing? You don't need to run it. ![](https://i.imgur.com/126ujZ2.png) ## Presentation Attached again the presentation on the architecture. Please comment and propose necessary changes if you think we should include them. Slide: https://drive.google.com/open?id=1Tw-6KXRnc3rNWYGuBquB7hT5sGwwoYu2 ## The inital value of coeff_ue - after attach procedure, and start to do iperf ![](https://i.imgur.com/fs5ILr9.jpg) - when the ue send the attach request, the coeff is inf(x/0). But the thr_ue will change in every subframe, so the coeff will change to a big value after attach procedure. ## The maximum CCE - max_num_ue=5, --num-ues 5 ![](https://i.imgur.com/84lWfk0.png) - max_num_ue=6, --num-ues 6 ![](https://i.imgur.com/Fvo9owx.png) - max_num_ue=6, --num-ues6, number of CCE / max CCE ![](https://i.imgur.com/Cfnxhs2.png) - max_num_ue=7, --num-ues 7 - throughput(2M) ![](https://i.imgur.com/1KzH2lk.png) - UE side ![](https://i.imgur.com/TY7uG6Y.png) - eNB side ![](https://i.imgur.com/xrfcJxk.png) - max_num_ue=8, --num-ues 8 - case1 dropping allocation - throughput(2M) ![](https://i.imgur.com/j7rEmqt.png) - eNB side ![](https://i.imgur.com/cgQWh3X.png) - UE side ![](https://i.imgur.com/SytvLxn.png) - case2 UE interrupt - throughput(2M)(for only only three 3s, and the UE interrupt) ![](https://i.imgur.com/wvakXL2.png) - UE side ![](https://i.imgur.com/8ddyskX.png) - eNB side ![](https://i.imgur.com/xMinvZY.png) ![](https://i.imgur.com/VbCSxP8.png) ![](https://i.imgur.com/Ezd5C5n.png)