[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