Minutes

Opening Matt Fredrickson - asterisk project lead

we want to make sure to thank you by having a lunch that is catered, there is some drinks & breakfasts available.

so lots of ways to prevent your blood suagar from dropping

thanks for E4 stratiges for lunch that helps us a lot

also of note we are ending at 15h, that is atypical due to conflicting obligations like a panel
Eric - when will pictures happen
Answer - we will wait until lunchtime

lunch is in the national ballroom B (accross the way)

We do have a speakerphone available & a wireless network called asteriskdevcon that should be more reliable than the astricon wifi

Password is the same digium18
Also want to thank Torrey for taking notes day and George for setting up streaming for those who cannot participate onsite. The development process is bigger than any one room

Introductions:

  • Matt Fredrickson - sangoma
  • Torrey Searle - Voxbone
  • Malcom Davenport - digium - product manager - here for free food
  • Jared Smith - digium
  • Christophe Durieux - connect with the community
  • Claude Paltry - jive
  • Jroan Vinzens- sipgate - bulding a new infrastructure in ast16 with ari
  • david duffet - digium - observing
  • fred posner - lod - interestin in the future of asterisk
  • Ludovic gasc - allo cloud -belgium - interested in ari
  • pascal cadotte - wazzo - in quebec in future development esp ari
  • evan boily - wazzo - hope next astricon will be in canada - interested in futre of asterisk
  • Igor Goncharovskiy - russia - IQTek unistim developer
  • Nir Simovitch - isreal - clodonix - uncarrier - here for fun
  • Eric Klein - clondonix - sponsoring dangerous demos
  • Lenz Dimitiri - lowe in switserland
  • Sean McCord - psycore systems - atlanta
  • Dan Jenkins - nimble ape UK - here to be quiet
  • andrew naggy - socal - sangoma
  • james benstrup - writes bugs for freepbx
  • brian walters - sangoma - buffalo ny - interested in future of asterisk
  • Jason Parker - atlanta -sangoma - work on phones for sangoma
  • Dan Collins - usan - knoxville TN
  • Paulo Vicentini - Brazil - Voxbone - help with ast13 rollout
  • Steve Murphy - next vortex - wyoming -
  • Peter Weschke - see where asterisk is going with ari
  • harrison schults - corona - indianapolis
  • john harden
  • alex goodman - corona
  • Ben Ford - digium - working on ast for 1 year
  • Kevin Harwell - alabama - digium - getting feedback
  • Alexander Traud - frankfurt germany - unemploied - used ast for 6 years
  • George Joseph - digium developer

What ever direction you like to see asterisk is within your power.
What has happened in this last year:
asterisk 15.x 6 bug fix releases, current is 15.6.1
asterisk 14 8 security releases last version is 14.7.7
asterisk 13.x 6 bug fix releases current 13.23.1

3300 merged code reviews (across all branches)

it is amazing the number of contributions, that is a pretty amazing number
that is also means alot of eyeballs, people helping wiht review is strongly encouraged, there are alot of patches pending review a long time because of lack of reviews

1000 commits on asterisk 16 (close 3 per day) 72 individual contributing
asterisk 16 as been released! it has been in feature freeze already for a while. if you haven't tested it yet, then well patches welcome

Top contributor
260 Corey Farrel

Standard release vs LTS

something happened last here that broke convention, that made some people angry

in asterisk land we have 2 categories of releases, one is the standard release and the other is the magic LTS

alot of people feel confort in LTS, we decided in lots of caution due to the lots of changes in ast 15 especially ref multi-stream support
we decided not to make 15 an tls, which broke lots of conventions. On the other hand the changes were supprisingly stable. they maintained compatiblity with most of the applicaiton interfaces

Standard release
1 year bug fix, 1 year security fix

LTS
4 year bug fix, 1 year security fix

additionaly we have a new branch inclusion policy. new features can be put into an existing branch so long as there are tested and are non-major nor breaking changes

that allowed us to alot of neat things with that especially in branch 13, and it helps other branches because all those tests can get moved to the other branches as well

it has been a few years since the last LTS. 16 will be an lts, will be around until 2022, and security fixes til 2023

What's new in 16?

Webrtc video
webrtc api
chan_pjsip performance
misc fun

Improving video resilance

  • sensitive to packet loss
  • a loss of a single frame - strange things happen
  • in ast 15 we took a sledge happer approach, if we detected packet loss we requested a full new video frame, (sending an entire video frame uncompressed, -very wasteful)
  • we knew there were some better tech, but didn't have time to use them
  • one tech is NACK - an RTCP control message

    • rtcp is the protocol used in accompanment of rtp, sends statistics
    • the decided to extend rtcp to do other things to allow other things, including NACK
    • it is a negative acknowledgement
    • so if a packet is lost, you send a nack to inform of the lost packet and sender will retransmit, allowing stream repair

    Remb * bandwith estimation * informs of sender of bandwith limitaitons (I only detect 1.5mb of video, please limit) * instant packet repair problem * negotiated in sdp (nack is as well)

Enhanced Messaging:
Backround - updated all apis to have multiple audio/video streams
last year it looked like people in boxes ( it was a really big deal)
there is some metadata, local video description, remote video description

how on earth do I figure out that is kevin karwell and write in on his box
we added an api to correlate callerid streams with participant metadata
additionally we thought it would be good to add participant to participant messaging to confbridge
allows a one stop shop solution, or to keep messaging close the the media path
uses in-dialog sip MESSAGE, you can set the content type, but only use UTF-8

George did alot of work on the conference bridge, don't want to take away his thunder

PJSIP performace improvements
good talk ref chan_sip vs pjsip last year, large attendence room was packed. in alot of cases chan_pjsip performed better, but some cases it did not
however not a considerable difference, but we still wanted to address them

approx 7% in cpu usage worse in reg handling
after some perfomance improvements we now have chan_pjsip perform better than chan_sip, 2k req/s for chan_pjsip vs 300 for chan_sip

Misc fun
build improvements: DragonFly BSD, NetBSD, OpenBSD, Solaris 11, FreeBSD

I'm a linux guy so I always fall into the trap of thinking that Linux is the only *nix out there, but Alexander Traud contributed alot for building for other platforms

IPV6 added for Dundi
Does anybody use Dundi? (not that you shouldn't be useing it but it often gets forgoten about)

pjproject updated to v2.8
ability to bundle build libjansson, some versions of jansson have bugs, so bundling helps
misc gccc bug fixes
enhanced messaging with app_sendtext
new databuffer api added to the internal core api of asterisk, allows to do things like packet retransmisison buffers

early media video support in app_dial

python3 compatibility fixes - test suite is largely written in python, and different supporiting scripts

if you are a python developer we would love to see some help in reviewing those scripts to geting them compatible with python 3
sean bright worked on ephemeral DTLS certificates saves alot of pain of cert generation

support for a new cdr backend called beanstalk, developed by Nir

started looking into performance bottlenecks in stasis message buss, (it's a pubsub message buss)

improvements to strictrtp - the way we live in a world that is outside the standards of the RFCs, nat is a reality and part of the challenges are that, in sdp there is an address it expects to recieve media on. In order to work in that world you have to believe that address. If the other end is a private ip address that isn't true. some of the things that are done are symmetricip, where asterisk sends rtp back to the same address it recieved on, this is all find, but it has to trust the rtp stream is the right stream. But this can lead to hijacking of rtp streams.

Strict rtp is on by default, prevents of rtp hijacking can't happen, it may cause limitations when lots of video streams are happening, or crappy networks that send packets in big clumps, that presented problems in strictrtp, some improvements were added to make that better.

Reminder ast14 went EOL a couple weeks ago. Ast15 graduated to security fixes only mode. Keep track of what's happening in non-lts major releases of asterisk.
keep a test environment with non-lts releases to avoid supprises,

ast17 is presumably a standard relase so good opportunity to start breaking things

Questions:

when shall we see 16?
Answer:

right now! downloads.asterisk.org is up

Agenda for today
Presentation by George Joseph and Kevin Karwell about performance enhancements in 16 (30 min)

presentation of Ben Ford (originally Josh Colp presentation) about new video improvements (30 min)

Luch 12-1

Discussions

George Joseph | kevin Harwell presentation presentation:

Asterisk 2018 Performance Update

Matt gave a preview this morning but we are going to go in more detail

all of us would define performance a bit different as we have different usage patters & network environments and introducing their own deifintion of performance

so it is hard to define performance and what it means to improve it. CPU? CPS? memory? disk io?

where do improvements come from?

every release have performance improvements, some from community, some from core. even minor releases have perf improvements. you should always check the changes file as some perf changes might have functional implications too

Key improvements:

rmudgett spent a good amount of time with CDRs to reduce the time and resources to process it.

it doesn't really impact cps or quality, so do we care? yes, it takes reasources away from those other things.

stasis is another area, it's our internal pubsub buss. over the last 1.5 months we have done alot of work to reduce the overhead. one of the areas we discovered was that app_voicemail when you start it, and you have holding turned on, app_voicemail wants to know which mailboxes currently have subscribers so it only polls the mailboxes with subscribers.

most people don't have that turned on, collected via stasis, and in order to do that stasis had to keep track of every mailbox, it had to also have to keep track of the message flowing on the buss & never flushed cached. even if you didn't have polling turned on then you had alot of memory growth, which in turned caused cpu growth. all for app_voicemail. We cut that out, resulting in significat memory & cpu reduction

qualify & options, alot of attention this last year, one issue especially with realtime db, the time it takes to iterate contacts, to find which ones need to have qualify, and also write it back. lots of startup overhead. similarly inbound reistrations are the same way. Very read/write dependent. if you have thousands of aors and you are building up this db of contacts it can get really slow. pjsip show contacts is forced to go back to the database just to show it on the console

kevin will show some results now:

the thing we mainly focused on was cpu utilization, but you will also see some slides about memory

CDRs -30% increase in record processing, thanks richard

stasis cache - before memory climbing, after cpu is stablized and memory too

pjsip contacts

prior to 13.21.0

poor load and reload time, low reg/s

asterisk 13.21.0

improved registrations per second
asterisk 13.22.0 and after

context re-write patch had the biggest effect for improving performance

reloading contacts now take less than a second

Inbound registrations

pjsip channel was kind of lacking on registration perfomance (as mentioned last year) we took that seriously

setup: 1. socket 2 core 2 threads per core i3-2330 cpu 2.20GHZ (cpu will be averaged across all cpus)

regs are written to a database

we only loaded the modules required for the test (only loaded registration module)

4000 endpoints

we used sipp scenario to over local network

res_pjsip uses 7-8% more cpu than chan_sip, not many retransmissions

13.23.0 now uses less cpu than chan_sip for registration traffic (1-2% less cpu usage)

asterisk 16.1.0

cpu has dropped even more (3% less cpu than chan sip) mem use dropped by 3-4 mb

chan_sip can safely handle 300req/s but will choke on retransmisisons after

res_pjsip can easily handle that & much more, here you can see it easily handle 2k reg/s, at 2.5k/s retransmissions did climb a bit, but still ok

in the latest version of asterisk should see more improvements, some will be shipped in 16.1, be sure to test

testing is a huge part, so please let us know what you find (patches are welcome too)

Questions?

which format do you write cdrs in, can you specify the format?

answer: we don't have a json formatter for cdrs yet

answer: we have different backens, e.g. database, adding a json backend should be easy to add

answer: improvements should be across the board regardless of the backend tech

question: what was the motivation of performace evaluation

answer: there was a presentation last year that did a comparison of chan_sip vs chan_pjsip

answer: there should be a blogpost with a link to the tests

question: in the presentaiton ref performace, there was also a performance hit ref concurrent calls

answer: concurrent calls depends on media processing, chan_pjsip and chan_sip share the same underlaying media processing, so we confused by that and have no idea how to test that

answer: the delta between the two was only 1-2 concurrent call difference, so we were looking for more extreme differences that

answer: if anything could make the difference, it could be memory as pjsip does use more memory

answer: don't have any data-points but I found that chan_pjsip can handle more concurrent calls than chan_sip

answer: found a performance difference between 1.4 and 1.6 and it came down to a one line change ref DNS, there should be more performance tests on a regular basis

answer: yes, we are attempting to focus more on performance, we can def use more feedback, especially on what things we should test, indeed DNS can make a huge difference

Ben Ford
How not to trust the quality of the internet

Shattering the illusion some have that the traffic on the internet always get from point A to point B

today we will talk about media improvements particularly ref video

I'm not josh & don't have his knowlege, send him or me questions bford@digium.com

Overview:

patchy networks cause packet loss, which causes awful video experience

we are going to talk about how REMB & NACK work within asterisk w some demos

packet loss causes:

routing options - sub-obtimal routing (it may go via california)

network congestion - some packets won't get there

some packets may end up out of order

this hurts communicaiton if you are missing packets then you are obviosuly going to get (more apparent in video)

video freezes, or video stops

audio just gets choppy or "wonky" sounding

webrtc has tech to help video REMB & nack

What is remb?

remote estimated max bitrate

what this does is poll all the users of a call and find the bandwith of each user individually

it applys to all media streams

it can change throughout the lifetime of a call - so things can change during the call

it can control the video encoding bitrate of the sender, telling the sender the range we can expect/allow

supported in webrtc land

how does remb work

each receiver going to calculate max bitrate, then send it to asteris

asterisk relays or generates it's own feedback message

REMB is just a first step, transportcc and tmmbr, not widely supported though, foundation is in place to add later

NACK is like a ACK but not really it's a negative acknowledgement

it is a message when you do not get something you expect, eg report a lost packet

can be used to trigger retransmission & counter the effects of packet loss

works on a per-stream basis

no guarantee to get all lost packets back, (you may loose the packets again)

how does nack work?

ingresss -store packets in a buffer, so we can resend if needed

egress - if we recieve a packet we are expecting process it

otherwise store it, any missing packets then send a NACK request

when buffer reaches ½ size we send a nack to get the missing packets

if we get packets out of order, we store them, it's possible for the missing packet to still come late, if it does we process it, then get any subsequent packets from the buffer

conference bridges behave differently for remb than for 1 on 1

we provde a way to combine reports, we do that by adding options

avg max and min bitrate

depending on which reports we receive we send either lower/highets/avg we receive to the other participants

it's possible to receive nack request from multiple participants asterisk needs to determine which stream it belongs to

Discussions:

  • Have discussion about proposing that chan_sip be marked deprecated

Torrey brings up the point that chan_sip should be no-loaded by default. PJSIP users often have to nuke chan_sip just to use PJSIP.
Dan brings up the point that the plan for chan_sip (warnings on startup, no-load in 16) didn't happen. Dan also suggests no-loading chan_sip in SuperAwesome Company.
Jason suggests that even though 16.0 doesn't have the warnings; we should add them anyway. MattF disagrees and doesn't think we should make the change, given that 16 exists.
Fred points out that warnings should be noisy in the logs - not just errors.
A point was made that there still are some gaps in capability. MattF's rebuttal is that those capabilities are ones that are lightly used and the user community hasn't ported them forward for years.
Alexander makes the point that forcing users to move by no-loading or making it harder to use chan_sip, could result in user exodus. He also makes the point that it is good to ensure people don't end up on a channel driver that isn't well-supported.

  • res_xmpp/chan_motif should they remain core supported (due to dependency on unmaintained libraries)

Corey notes that the last commit on the supporting library is 2011, and it isn't even packaged in Fedora.
Jared seconds.
No dissent.

  • Discuss deprecation/removal of res_monitor

Torrey wants to know what replaces res_monitor. chan_spy replaces res_monitor.
Corey prefers mixmonitor because it uses framehooks; monitor requires separate core code (and doesn't use framehooks).
No dissent.

  • Discussion around removal of macro functionality

macro is long-deprecated.

  • Opportunistic DTLS

Torrey uses Kamailio. Kamailio is one endpoint. He'd like to have one endpoint configuration that'd work for both. Most things work except for use_received_transport. The outbound leg doesn't work, but may not be as necessary.
A patch had been submitted but was rejected. Discussion will resume on the mailing list.

  • Making it easier to send audio to/from Amazon, Google, IBM (especially in context of speech recognition)

Dan prefers not putting audio on the machine itself when his ARI apps are themselves, remote. It'd be nice to have an HTTP endpoint way to get one or both sides of the media stream for a call and relay them somewhere else. In particular, Dan's looking to push that audio out to a remote speech API.
Sean references (GRPC) as a means for sending audio. He has similar needs to Dan and built something called app_audiosocket, that directs a call over a TCP socket to anywhere; sends audio (SLIN) + metadata and receives audio back. It solved his problem and he'll hopefully demo it tomorrow. He pipes it to Google or to a websocket connection for manipulation. It's a better solution than app_jack, which is only local, and UniMRCP.
Sean and Dan want a way to use ARI to control where the audio is being sent to and received from. ASR, TTS, audio manipulations.
George - so a REST endpoint that allows you to specify the channel, a hostname, and a port.
Sean's app does the work, but it's not callable via ARI.
Ivan wants the feature callable not only by ARI, but also via Dialplan. He's familiar with chan_rtp, but it's hard to use for his purposes.
Matt - big picture, the capabilities today aren't enough to handle these requests in chan_rtp.
Dan points out that other projects handle this with individual modules for individual services.

  • Getting access to end of call statistics (regardless of who hangs up first)

Torrey wants SRTP stats at the end of a call, or put (in the hangup handler) what codecs were negotiated, or whether SRTP was negotiated, or query the channel for details in order to drop them into billing information, or find out if T.38 was negotiated to see if it was a fax call. But, there's no, currently, safe way to access that information after the channel is hung up. He's tried to copy details from the A-leg to the B-leg, but there's not a good way to guarantee the information's lifetime by the time the channel in invoked.
Matt - some of this, e.g. T.38 events, might be contained in CEL and be able to pump that externally.
Steve - Where would this information be stored? Once the channel is gone, it's gone. CEL was created to generate the information about a call as it traverses and is the right place for this, not CDRs.
Torrey - could a

  • Getting rid of extensions.conf for ARI applications

Missed notes for this section...

  • Discussion around having Asterisk and some message queue/bus (like RabbitMQ) talk directly to each other

Torrey uses an ARI proxy and then puts it on an external message bus. Torrey would like to get rid of the proxy.
Dan wants to know if we can have an ARI proxy built into Asterisk; Torrey says "yes, that's what I'm wondering."
Sylvain did a presentation about RabbitMQ and Stasis last year and has a module over on github. Andrew has either looked at it our used it.
Dan wants one way to do this.
Jroan sees the need for some small glue code to make it simpler to use any message bus, not one in particular.
Dan points out that this might be made easier if you could have more than one websocket connected for one app - instead of today's limitation of one socket for one app.
There are some rumblings about Protocol Buffers and Swagger, etc.

  • Alexander wants to talk about RTCP/media-interaction with audio codecs

Most people in the room have deployed Asterisk with Opus.
Most of the room doesn't use Opus as a primary audio codec.
Sean - most of the room is interested in it, but most of the room hasn't done it.
Alexander just wanted to survey the room.

  • Josh Elson wants to talk about task processor architecture limitations, e.g. the challenges of 50K sparsely registering endpoints.

They struggle with equal prioritization between taskprocessors and that one taskprocessor overflowing can cause badness for other items.
Is there a good approach to handling this?
A method of configuration might be helpful, but no such thing exists at this time. CDRs and AMI are both problematic; ARI where poorly-written apps that don't respond at the TCP layer can bring down the whole system.

  • Give Igor some time to talk about improvements for various applications in how you interact with multiple media streams.
  • Discuss how Sangoma's acquisition of Digium affects the future of Asterisk

There's a Q&A about this in a few minutes in a different conference room.