Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Tipc roadmap 2018

158 views

Published on

Status and roadmap for TIPC during 2018. Performance improvements, Security, TLS, DTLS, Java...

Published in: Internet
  • Hey guys! Who wants to chat with me? More photos with me here 👉 http://www.bit.ly/katekoxx
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Tipc roadmap 2018

  1. 1. TIPC Status and Roadmap 2018 by Jon Maloy
  2. 2. STATUS APRIL 2018
  3. 3. FUNCTIONALITY Container/Name Space support  From Linux 4.0 Autoadaptive Hierarchical Neighbor Node monitoring  Scales up to 1000 nodes with 1 second failure discovery time  From Linux 4.7 Group Messaging  User instantiated brokerless message bus  Allows for lossless, flow controlled, broadcast/multicast/anycast/unicast within a group  From Linux 4.14 128-bit self-assigned node identity  Can optionally be assigned by user: integer number, UUID, host name…  From Linux 4.16 Moved away from <Zone, Cluster,Node> network and addressing hierarchy  A node now only has an identity with no assumed internal structure  All node using the same cluster identity will detect each other and form a cluster  From Linux 4.16
  4. 4. API Low-level socket API  Needs some effort to learn and use Higher-level socket C API exists  As static libtipc library  Still only available by downloading tipcutils tar file API for Python, Perl, Ruby, D, Go  But not for Java yet Support for TIPC in ZeroMQ  Not yet with full features
  5. 5. AVAILABILITY Management tool now in package iproute2  “tipc” replaces previously used “tipc-config”  Available in all new distros after May 2015 Kernel module available in all major distros except RHEL and Atomic  We are working on that
  6. 6. ARCHITECTURE tipc_link list_head owner bearer list_head waiting ports tipc_link list_head owner bearer list_head waiting ports tipc_link list_head owner bearer list_head waiting ports tipc_link list_head owner bearer list_head waiting ports ref_table (heap array) hlist_head hlist_headhlist_head hlist_head hlist_head hlist_head tipc_node links[ ] active_ links[ ] 0 list_head hlist_node tipc_node links[ ] active_ links[ ] list_head hlist_node tipc_node links[ ] active_ links[ ] 0 list_head hlist_node tipc_node 0 links[ ] active_ links[ ] 0 0 0 list_head hlist_node tipc_bearer list_head list_head links cong- links tipc_bearer list_head list_head links cong- links tipc_bearer list_head list_head links cong- links bearers[ ] (global array) *media_list[ ] (global array) eth_bearer eth_bearer tipc_media (Ethernet) xxxx_bearer tipc_media (xxxx) list_head tipc_node_list (global) media media media referencereferencereferencereferencereferencereferencereferencereference node_htable (global array) tipc_port list_head lock usr_ hndl tipc_port list_head lock usr_ hndl net_lock user_port ref usr_ hndl tipc_sock port sock call- backs reftbl_rw_lock node_htable (heap array) list_head_rcu list_head_rculist_head_rcu list_head_rcu list_head_rcu list_head_rcu tipc_link tipc_link tipc_link tipc_link tipc_node * links[ ] active_ links[ ] 0 * * hlist_node tipc_node * links[ ] active_ links[ ] * * * hlist_node tipc_node * links[ ] active_ links[ ] 0 * * hlist_node tipc_node 0 links[ ] active_ links[ ] 0 0 0 hlist_node tipc_bearer * tipc_bearer * tipc_bearer * bearers[ ] (heap array) *media_list[ ] (heap array)* * eth_bearer * eth_bearer * tipc_media (Ethernet) xxxx_bearer * tipc_media (xxxx) owner media media bearer_array_lock Enabled EnabledEnabled list_head waiting ports list_head waiting ports list_head waiting ports list_head waiting ports owner owner owner ref_table (heap array)referencereferencereferencereferencereferencereferencereferencereference tipc_socket tipc_port port sock sock tipc_socket tipc_port port sock sock reftbl_lock Linux 3.12 Linux 4.4 tipc_sock tipc_port tipc_node tipc_link tipc_bearer tipc_media
  7. 7. IMPLEMENTATION Significant effort to improve quality and maintainability over the last years  Reduced code bloat  Reduced structure interdependencies  Improved locking policies  Fewer locks, RCU locks instead of RW locks…  Eliminated all known risks of deadlock  Buffer handling  Much more use of sk_buff lists and other linux features  Improved and simplified fragmentation/reassembly  Redesigned and simplified broadcast link resulting in a significant performance improvement  Simplified and de-generalized topology server Linuxification of code and coding style  Adapting to kernel naming conventions  Using RB tree instead of expanding arrays in service binding table
  8. 8. FLOW CONTROL New connection level flow control  Now based on roundup(1k) size block instead of messages  Reduces need for socket receive buffer with factor 30 Link level flow control still uses a small fix window by default  Not optimal from performance viewpoint  Configurable Datagram flow control  Resolved as part of the Group Communication feature
  9. 9. SCALABILITY Introduced the “Overlapping Ring Supervision” algorithm in Linux 4.7  A combination of Gossip and Ring Supervision  Largest cluster we have tested had 800 fully-meshed nodes  But more is possible  Works flawlessly Limited address space  We need something better than the current <1.1.N> scheme
  10. 10. PERFORMANCE Latency times better than on TCP  ~33 % faster inter-node  2 to 7 times faster intra-node messaging (depends on message size)  We don’t use the loopback interface Throughput still somewhat lower than TCP  ~65-90% of max TCP throughput inter-node  Seems to be environment dependent  But 25-30% better than TCP intra-node
  11. 11. MANAGEMENT New netlink based API introduced  Replaces old ascii-based commands (also via netlink)  Uses more standard features such as socket buffers, attribute nesting, sanity checks etc.  Scales much better when clusters grow New user space tool “tipc”  Syntax inspired by “ip” tool  Modular design inspired by git  Uses libmnl  Replaces old “tipc-config” tool  Part of iproute2 package  Along with “ip”, “tc” and others
  12. 12. ROADMAP 2018
  13. 13. FUNCTIONALITY TLS/DTLS Support  Extension to OpenSSL  Or Using kernel internal TLS support  Or both 128-bit service and socket addresses ???  All fields 128 bits long  Possible, but intrusive change  Only if there is demand and a good case for it Updating binding table by broadcast instead of replicast  We know how to do this  Compatibility biggest challenge Language Support  Java Carrier for some more of the most popular message buses  RabbitMQ, Kafka… struct tipcc_addr{ uuid_t type; uuid_t instance; uuid_t node; };
  14. 14. PERFORMANCE Bigger default link level window size  From 50 packets to 250 => doubles max throughput Direct socket to socket traffic message transport  The link layer is a bottleneck for performance  Both for connection oriented and group oriented communication  We could make it similar to TCP, but much simpler  All ACKs, NACKs and retransmissions are sent via link layer, where sequentiality and delivery is guaranteed.  No timers would be needed  Leverage state of the art for such protocols (TCP, QUIC...)
  15. 15. MORE INFORMATION TIPC Overview https://www.slideshare.net/JonMaloy/tipc-overview-93483595 TIPC Communication Groups https://www.slideshare.net/JonMaloy/tipc-communication-groups TIPC Overlapping Ring Neighbor Monitoring https://www.youtube.com/watch?v=ni-iNJ-njPo TIPC home page http://tipc.sourceforge.net TIPC project page https://sourceforge.net/projects/tipc TIPC protocol specification (somewhat dated|) http://tipc.sourceforge.net/doc/draft-spec-tipc-10.html TIPC programmer’s guide (somewhat dated) http://tipc.sourceforge.net/doc/tipc_2.0_prog_guide.html TIPC demo and test programs package https://sourceforge.net/projects/tipc/files/?source=navbar
  16. 16. THANKYOU

×