[srslte-users] ue crash on multiple simultaneous connections.

J Giovatto jgiovatto at adjacentlink.com
Mon Sep 27 17:28:37 UTC 2021


Hi

Seems like this is a corner case,as a work around, I might propose this 
as a possible solution to the queue resize failure which seems to bring 
down the house.


diff --git a/lib/src/upper/rlc_am_lte.cc b/lib/src/upper/rlc_am_lte.cc
index 23a182957..457e7b921 100644
--- a/lib/src/upper/rlc_am_lte.cc
+++ b/lib/src/upper/rlc_am_lte.cc
@@ -319,6 +319,8 @@ bool rlc_am_lte::rlc_am_lte_tx::configure(const 
rlc_config_t& cfg_)
poll_retx_timer.set(static_cast<uint32_t>(cfg.t_poll_retx), 
[this](uint32_t timerid) { timer_expired(timerid); });
    }

+  empty_queue();
+
    tx_sdu_queue.resize(cfg_.tx_queue_length);

    tx_enabled = true;


Let me know what you think, when you get a chance.

Joe

On 9/25/21 02:19, Andrea Valori wrote:
> Joe,
> from my (inexperienced) empirical evidence, seems that the software is 
> EXTREMELY demanding and when the hardware is suffering, there are 
> errors but not a clear "resources too low" message that anyone can 
> understand.
> If you don't have better suggestions, I suggest you try to use a more 
> powerful machine and in case work your way down from there.
> If you have the GUI, I suggest you disable it since it will leave much 
> more resources to the srs stack (I was amazed seeing the difference 
> between performances with and without UI).
>  Cheers
>
> On Fri, 24 Sept 2021 at 00:58, J Giovatto <jgiovatto at adjacentlink.com> 
> wrote:
>
>     Hi folks,
>
>     Here is the crash dump for a ue.
>
>     This is repeatable when 5 or more ues, try to connect simultaneously,
>     (start 5 UE's then start the enb)
>
>
>     Found Cell:  Mode=FDD, PCI=1, PRB=50, Ports=1, CFO=0.0 KHz
>     Found PLMN:  Id=00101, TAC=7
>     Random Access Transmission: seq=14, tti=7541, ra-rnti=0x2
>     Random Access Transmission: seq=41, tti=7561, ra-rnti=0x2
>     Random Access Transmission: seq=17, tti=7581, ra-rnti=0x2
>     Random Access Transmission: seq=8, tti=7601, ra-rnti=0x2
>     Random Access Transmission: seq=13, tti=7621, ra-rnti=0x2
>     Random Access Transmission: seq=27, tti=7711, ra-rnti=0x2
>     Random Access Complete.     c-rnti=0x58, ta=0
>     RRC Connected
>     RRC Connected
>     /home/jgiovatto/Devel/LTE/srs/srsRAN-emane/lib/include/srsran/adt/circular_buffer.h:547:
>     Dynamic resizes not supported when circular buffer is not empty
>     Stack trace (most recent call last) in thread 826286:
>     #20   Object "", at 0xffffffffffffffff, in
>     #19   Source "../sysdeps/unix/sysv/linux/x86_64/clone.S", line 95, in
>     __clone [0x7fdf59f294c2]
>     #18   Source
>     "/usr/src/debug/glibc-2.32-10.fc33.x86_64/nptl/pthread_create.c", line
>     463, in start_thread [0x7fdf5add93f8]
>             460:       ret = (void*) (uintptr_t) start (pd->arg);
>             461:     }
>             462:       else
>           > 463:     ret = pd->start_routine (pd->arg);
>             464:       THREAD_SETMEM (pd, result, ret);
>             465:     }
>     #17   Source
>     "/home/jgiovatto/Devel/LTE/srs/srsRAN-emane/lib/include/srsran/common/threads.h",
>     line 111, in thread_function_entry [0xc59291]
>             108:   static void* thread_function_entry(void* _this)
>             109:   {
>             110:     pthread_setname_np(pthread_self(),
>     ((thread*)_this)->name.c_str());
>           > 111:     ((thread*)_this)->run_thread();
>             112:     return NULL;
>             113:   }
>     #16   Source
>     "/home/jgiovatto/Devel/LTE/srs/srsRAN-emane/srsue/src/stack/ue_stack_lte.cc",
>     line 332, in run_thread [0xd0f67f]
>             329: void ue_stack_lte::run_thread()
>             330: {
>             331:   while (running) {
>           > 332:     task_sched.run_next_task();
>             333:   }
>             334: }
>     #15   Source
>     "/home/jgiovatto/Devel/LTE/srs/srsRAN-emane/lib/include/srsran/common/task_scheduler.h",
>     line 81, in run_next_task [0xd12754]
>              78:     srsran::move_task_t task{};
>              79:     if (external_tasks.wait_pop(&task) >= 0) {
>              80:       task();
>           >  81:       run_all_internal_tasks();
>              82:       return true;
>              83:     }
>              84:     run_all_internal_tasks();
>     #14   Source
>     "/home/jgiovatto/Devel/LTE/srs/srsRAN-emane/lib/include/srsran/common/task_scheduler.h",
>     line 108, in run_all_internal_tasks [0xd127f0]
>             105:     // Note: Using a deque because tasks can enqueue new
>     tasks, which would lead to
>             106:     // reference invalidation in case of vector
>             107:     while (not internal_tasks.empty()) {
>           > 108:       internal_tasks.front()();
>             109:       internal_tasks.pop_front();
>             110:     }
>             111:   }
>     #13   Source
>     "/home/jgiovatto/Devel/LTE/srs/srsRAN-emane/lib/include/srsran/adt/move_callback.h",
>     line 178, in operator() [0xd1448d]
>             175:     return *this;
>             176:   }
>             177:
>           > 178:   R operator()(Args... args) const noexcept { return
>     oper_ptr->call(&buffer, std::forward<Args>(args)...); }
>             179:
>             180:   bool is_empty() const { return oper_ptr ==
>     &empty_table; }
>             181:   bool is_in_small_buffer() const { return
>     oper_ptr->is_in_small_buffer(); }
>     #12   Source
>     "/home/jgiovatto/Devel/LTE/srs/srsRAN-emane/lib/include/srsran/adt/move_callback.h",
>     line 101, in call [0xd8efdc]
>              98: {
>              99: public:
>             100:   constexpr heap_table_t() = default;
>           > 101:   R    call(void* src, Args... args) const final { return
>     (**static_cast<FunT**>(src))(std::forward<Args>(args)...); }
>             102:   void move(void* src, void* dest) const final
>             103:   {
>             104:     *static_cast<FunT**>(dest) =
>     *static_cast<FunT**>(src);
>     #11   Source
>     "/home/jgiovatto/Devel/LTE/srs/srsRAN-emane/srsue/src/stack/rrc/rrc.cc",
>     line 1675, in operator() [0xd885a1]
>            1672:     case
>     dl_ccch_msg_type_c::c1_c_::types::rrc_conn_setup: {
>            1673:       transaction_id                   =
>     c1->rrc_conn_setup().rrc_transaction_id;
>            1674:       rrc_conn_setup_s conn_setup_copy =
>     c1->rrc_conn_setup();
>           >1675:       task_sched.defer_task([this, conn_setup_copy]() {
>     handle_con_setup(conn_setup_copy); });
>            1676:       break;
>            1677:     }
>            1678:     case
>     dl_ccch_msg_type_c::c1_c_::types::rrc_conn_reest: {
>     #10   Source
>     "/home/jgiovatto/Devel/LTE/srs/srsRAN-emane/srsue/src/stack/rrc/rrc.cc",
>     line 2543, in handle_con_setup [0xd8c559]
>            2540:   srsran::console("RRC Connected\n");
>            2541:
>            2542:   // Apply the Radio Resource configuration
>           >2543:
>     apply_rr_config_dedicated(&setup.crit_exts.c1().rrc_conn_setup_r8().rr_cfg_ded);
>            2544:
>            2545:   nas->set_barring(srsran::barring_t::none);
>     #9    Source
>     "/home/jgiovatto/Devel/LTE/srs/srsRAN-emane/srsue/src/stack/rrc/rrc.cc",
>     line 2422, in apply_rr_config_dedicated [0xd8bff0]
>            2419:   }
>            2420:   for (uint32_t i = 0; i <
>     cnfg->srb_to_add_mod_list.size(); i++) {
>            2421:     // TODO: handle SRB modification
>           >2422: add_srb(cnfg->srb_to_add_mod_list[i]);
>            2423:   }
>            2424:   for (uint32_t i = 0; i <
>     cnfg->drb_to_release_list.size(); i++) {
>            2425: release_drb(cnfg->drb_to_release_list[i]);
>     #8    Source
>     "/home/jgiovatto/Devel/LTE/srs/srsRAN-emane/srsue/src/stack/rrc/rrc.cc",
>     line 2572, in add_srb [0xd8c85a]
>            2570:   // Setup RLC
>            2571:   if (srb_cnfg.rlc_cfg_present) {
>           >2572:     rlc->add_bearer(srb_cnfg.srb_id,
>     make_rlc_config_t(srb_cnfg));
>            2573:   }
>            2574:
>            2575:   // Setup MAC
>     #7    Source
>     "/home/jgiovatto/Devel/LTE/srs/srsRAN-emane/lib/src/upper/rlc.cc",
>     line
>     480, in add_bearer [0x106d1c4]
>             478:   // configure and add to array
>             479:   if (cnfg.rlc_mode != rlc_mode_t::tm and
>     rlc_array.find(lcid) != rlc_array.end()) {
>           > 480:     if (not rlc_array.at
>     <http://rlc_array.at>(lcid)->configure(cnfg)) {
>             481:       logger.error("Error configuring RLC entity.");
>             482:       goto delete_and_exit;
>             483:     }
>     #6    Source
>     "/home/jgiovatto/Devel/LTE/srs/srsRAN-emane/lib/src/upper/rlc_am_lte.cc",
>     line 159, in configure [0x1086329]
>             156:     return false;
>             157:   }
>             158:
>           > 159:   if (not tx.configure(cfg)) {
>             160:     logger.error("Error configuring bearer (TX)");
>             161:     return false;
>             162:   }
>     #5    Source
>     "/home/jgiovatto/Devel/LTE/srs/srsRAN-emane/lib/src/upper/rlc_am_lte.cc",
>     line 322, in configure [0x1086eaa]
>             319:
>     poll_retx_timer.set(static_cast<uint32_t>(cfg.t_poll_retx),
>     [this](uint32_t timerid) { timer_expired(timerid); });
>             320:   }
>             321:
>           > 322:   tx_sdu_queue.resize(cfg_.tx_queue_length);
>             323:
>             324:   tx_enabled = true;
>     #4    Source
>     "/home/jgiovatto/Devel/LTE/srs/srsRAN-emane/lib/include/srsran/upper/byte_buffer_queue.h",
>     line 60, in resize [0x107be12]
>              58:   bool try_read(unique_byte_buffer_t* msg) { return
>     queue.try_pop(*msg); }
>              59:
>           >  60:   void     resize(uint32_t capacity) {
>     queue.set_size(capacity); }
>              61:   uint32_t size() { return (uint32_t)queue.size(); }
>              62:   uint32_t get_n_sdus() { return n_sdus; }
>     #3    Source
>     "/home/jgiovatto/Devel/LTE/srs/srsRAN-emane/lib/include/srsran/adt/circular_buffer.h",
>     line 601, in set_size [0x107bfb8]
>             598:   explicit dyn_blocking_queue(size_t size,
>     PushingCallback
>     push_callback = {}, PoppingCallback pop_callback = {}) :
>             599:     base_t(push_callback, pop_callback, size)
>             600:   {}
>           > 601:   void set_size(size_t size) {
>     base_t::circ_buffer.set_size(size); }
>             602:
>             603:   template <typename F>
>             604:   bool apply_first(const F& func)
>     #2    Source
>     "/home/jgiovatto/Devel/LTE/srs/srsRAN-emane/lib/include/srsran/adt/circular_buffer.h",
>     line 547, in set_size [0x107f732]
>             545:   void set_size(size_t sz)
>             546:   {
>           > 547:     srsran_assert(base_t::empty() or sz ==
>     base_t::size(),
>             548:                   "Dynamic resizes not supported when
>     circular buffer is not empty");
>             549:     base_t::buffer.resize(sz);
>             550:   }
>     #1    Source
>     "/usr/src/debug/glibc-2.32-10.fc33.x86_64/stdlib/abort.c",
>     line 79, in abort [0x7fdf59e4e8a3]
>              76:       stage = 0;
>              77:       __libc_lock_unlock_recursive (lock);
>              78:
>           >  79:       raise (SIGABRT);
>              80:
>              81:       __libc_lock_lock_recursive (lock);
>              82:       stage = save_stage + 1;
>     #0    Source "../sysdeps/unix/sysv/linux/raise.c", line 50, in raise
>     [0x7fdf59e659e5]
>     Aborted (Signal sent by tkill() 826270 0)
>     Aborted (core dumped)
>
>     Best
>
>     Joe
>
>     _______________________________________________
>     srslte-users mailing list
>     srslte-users at lists.softwareradiosystems.com
>     https://lists.softwareradiosystems.com/mailman/listinfo/srslte-users
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.srsran.com/pipermail/srsran-users/attachments/20210927/ddd84992/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 840 bytes
Desc: OpenPGP digital signature
URL: <https://lists.srsran.com/pipermail/srsran-users/attachments/20210927/ddd84992/attachment.sig>


More information about the srsran-users mailing list