Project

General

Profile

Bug #59224

Updated by Christopher Hoffman about 1 year ago

Run into lockdep issue investigating the added affects of latency. 

 <pre> 
    -4> 2023-03-29T18:00:00.418+0000 7f8087168640    0 btw, i am holding these locks: 
     -3> 2023-03-29T18:00:00.418+0000 7f8087168640    0     librbd::ManagedLock<I>::m_lock (0x5621acea8258) (115) 
     -2> 2023-03-29T18:00:00.418+0000 7f8087168640    0 
  
     -1> 2023-03-29T18:00:00.446+0000 7f8087168640 -1 /ceph/src/common/lockdep.cc: In function 'int lockdep_will_lock(const char*, int, bool, bool)' thread 7f8087168640 time 2023-03-29T18:00:00.418549+0000 
 /ceph/src/common/lockdep.cc: 337: ceph_abort_msg("abort() called") 
  
  ceph version 18.0.0-3158-gf5598a8c9e9 (f5598a8c9e9841e359960dfad1d323e47b40ede0) reef (dev) 
  1: (ceph::__ceph_abort(char const*, int, char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)+0xc8) [0x7f80993a9620] 
  2: (lockdep_will_lock(char const*, int, bool, bool)+0x726) [0x7f80994340b8] 
  3: (ceph::mutex_debug_detail::mutex_debugging_base::_will_lock(bool)+0x17) [0x7f8099437209] 
  4: (ceph::shared_mutex_debug::lock_shared()+0x25) [0x7f8099437ce7] 
  5: (librbd::image::RefreshRequest<librbd::ImageCtx>::send_v2_get_mutable_metadata()+0x46) [0x5621a5bcfb70] 
  6: (librbd::image::RefreshRequest<librbd::ImageCtx>::send()+0x1f) [0x5621a5bcfe1f] 
  7: (librbd::ImageState<librbd::ImageCtx>::send_refresh_unlock()+0x9a) [0x5621a5adb68e] 
  8: (librbd::ImageState<librbd::ImageCtx>::execute_next_action_unlock()+0x82) [0x5621a5adbbe0] 
  9: (librbd::ImageState<librbd::ImageCtx>::complete_action_unlock(librbd::ImageState<librbd::ImageCtx>::State, int)+0x186) [0x5621a5adbf38] 
  10: (librbd::ImageState<librbd::ImageCtx>::handle_prepare_lock_complete()+0x115) [0x5621a5adc9dd] 
  11: (librbd::ExclusiveLock<librbd::ImageCtx>::post_acquire_lock_handler(int, Context*)+0x171) [0x5621a5abda45] 
  12: (librbd::ManagedLock<librbd::ImageCtx>::handle_acquire_lock(int)::{lambda(int)#5}::operator()(int) const+0x26) [0x5621a5b0a9aa] 
  13: (LambdaContext<librbd::ManagedLock<librbd::ImageCtx>::handle_acquire_lock(int)::{lambda(int)#5}>::finish(int)+0xd) [0x5621a5b0a9bd] 
  14: (Context::complete(int)+0x9) [0x5621a59aa02f] 
  15: (librbd::asio::ContextWQ::queue(Context*, int)::{lambda()#1}::operator()() const+0x11) [0x5621a59aa54b] 
  16: (boost::asio::detail::completion_handler<boost::asio::detail::binder0<librbd::asio::ContextWQ::queue(Context*, int)::{lambda()#1}>, boost::asio::io_context::basic_executor_type<std::allocator<void>, 0ul> >::do_complete(void*, boost::asio::detail::scheduler_operation*, boost::system::error_code const&, unsigned long)+0x5d) [0x5621a59aecd9] 
  17: (boost::asio::detail::strand_service::do_complete(void*, boost::asio::detail::scheduler_operation*, boost::system::error_code const&, unsigned long)+0x66) [0x5621a5ab840e] 
  18: /ceph/build/lib/librados.so.2(+0xa2705) [0x7f809a074705] 
  19: /ceph/build/lib/librados.so.2(+0xa2de1) [0x7f809a074de1] 
  20: /ceph/build/lib/librados.so.2(+0xa50ec) [0x7f809a0770ec] 
  21: /ceph/build/lib/librados.so.2(+0xa513e) [0x7f809a07713e] 
  22: /ceph/build/lib/librados.so.2(+0xa5157) [0x7f809a077157] 
  23: /lib64/libstdc++.so.6(+0xdbad3) [0x7f80982dbad3] 
  24: /lib64/libc.so.6(+0x8cded) [0x7f8097e8cded] 
  25: /lib64/libc.so.6(+0x112370) [0x7f8097f12370] 
 </pre> 


 Was able to hit by: 
 1. Configured East/West sites with Open vSwitch (Example 2): 
 https://www.redhat.com/sysadmin/net-namespaces. The key part was different network namespaces. 
 >>> step 1 can be done by running provided netns.sh 

 2. Started mstart on site-a on East and a separate mstart on site-b on west. 
 3. On east, created a single image with mirror based snapshotting 
 4. Setup 1m interval for image 
 >>> steps 2-4 can be done using "m-namespace.sh start" 

 5. On east, mapped rbd image to block device, formatted with xfs and mounted. 
 >>> ./bin/rbd --cluster site-a device map pool1/test-demote-sb 
 >>> mkfs.xfs /dev/rbd0 <--- block device that was mapped above 
 >>> mount /dev/rbd0 /mnt/latency1 

 6. On east, ran continuous continous workload using fio for random read/writes R:40 IOPS, W:10 IOPS, 4K block size 
 >>> echo """ 
 [global] 
 refill_buffers 
 time_based=1 
 size=5g 
 direct=1 
 group_reporting 
 ioengine=libaio 

 [workload] 
 rw=randrw 
 rate_iops=40,10 
 blocksize=4KB 
 #norandommap 
 iodepth=4 
 numjobs=1 
 runtime=2d 
 """ >> /mnt/latency1/smallIO_test1 
 cd /mnt/latency1 
 fio smallIO_test1 

 7. "injected" latency on the east(primary) network namespace using 
 >>> tc <pre>tc qdisc add dev east root netem delay 30ms 

 10ms</pre> 
 8. Observe after one or two intervals the above stack trace. 
 This should be in a file in: 
 >>> cat run/site-b/out/client.admin.<Pid of site-b rbd mirror>.log 



Back