W3C

Automotive Working Group TPAC meeting day 2

13 Oct 2020

Agenda

Attendees

Present
Glenn, Joakim, Daniel, Ted, MagnusF, Peter, Steven, Ulf, MagnusG, Wonsuk, Tobias, Urata, Adnan, Gunnar, Carine, Yves
Regrets
Chair
Peter
Scribe
Ted

Contents


<scribe> Scribe: Ted

<scribe> scribenick: ted

Gen2 name selection

Ted: I think we are all tiring of not having a name and resolved to decide this week
... I want to take a straw poll, try to reach consensus and announce to public-automotive list (we have many inactive observers - 130 subscribers)

[review of current proposed namees and straw poll]

Gen2 name discussion on Github

<oberstet> : ted hi there, unfort. the webex link I have wants me to signin .. cant do. so .. currently double checking my email if I missed something ..

Peter: keeping it short is better, so not CVSiS

<oberstet> ok, mmh. I tried chrome and FF ..

Ted repeats merits of VISS version 2

https://www.w3.org/TR/vehicle-information-service/

Vehicle Information Service Specification

MagnusF wonders about corresponding RPC protocol spec

Ted: problem is VISS/VSS relation and for RPC we are using Vehicle Service Catalog, overloading term Service

MagnusF: we are leaning toward using WAMP for RPC so that may factor into name

Peter: I see problems using WAMP for RPC, we are committed to gRPC
... it won't go over well here

Tobias: what is your benchmark/concern for language
... Swift is fairly popular but we have strong support for Perl, Python, Java (Android)

Peter: I like the platform but will have problems introducing it

Tobias: give it a try with Swift and let me know of any issues, we can address it

Peter: Go support seems outdated

Tobias: gRPC with Google's support is why

MagnusF: what about Erlang? it is used extensively in telco

WAMP evaluation for RPC and Gen3 wishlist

MagnusF: v2d[evice] suggests need to be able to run clients on iOS and Android, eg for remote unlock
... is this a use case we see as part of service catalog?

Peter: absolutely

Steven: I can see that

Daniel: should we discuss if that is an RPC use case versus just sending signal? :)

Tobias: the WAMP piece on library support, the main library on Android is made from us and was the first WebSocket implementation for Android
... it runs cloud side as well
... iOS is a third party project and not as familiar with it so cannot speak to current status

MagnusF: gRPC has Object C and proven use in Volvo, people seem to like it
... we are keeping focus on gRPC vs WAMP

Tobias: so iOS part of your requirements

MagnusF: yes although we do not have formal requirements

Peter: iOS and Adroid both very important for us, especially the later
... we are using Go on server side. Volvo Signal Broker (open source version renamed) uses gRPC for proof of concept autonomous drive

MagnusF: what is the main drawback for gRPC?

Peter: the three party decoupling is better in WAMP
... I have done the Go implementation. versioning is an issue and initial problems with Objective C
... Swift5.0 a problem and concern with new devices using it such as Apple watch
... WAMP could let us influence the market but problem with our current use cases and existing solution. we already worked out issues for PoC we created

MagnusF: interesting to hear of gRPC success
... I no longer represent JLR and cannot speak to their intent, could see Toyota who I can't speak yet for going gRPC
... is there a performance issue, it uses protobuf underneath

Peter: yes, not a problem for us even on a raspberry pi test platform

Tobias: gRPC doesn't work for cloud to client support, that is a requirement as well?

MagnusF: yes, also a requirement

Tobias: how do you do that?

MagnusF: HTTP2

Tobias: so gRPC over HTTP2?
... so listening end point in the car?

MagnusF: no, vehicle always has to initiate

Tobias: so vehicle can't be reached?

MagnusF: SMS initiates vehicle to react
... car always runs connect system call to reach cloud after receiving that message

Tobias: gRPC over HTTP2 standardized?

MagnusF: believe that is what the implementation is
... yes HTTP2, protobuf and IDL for control language

Tobias: does that open port on device?

MagnusF: no, well not on vehicles I am familiar with

Tobias: how does callee request procedure to call

MagnusF: bidirectional communication established
... drawback with gRPC is its existing IDL and how that can conflict with FrancaIDL being used in service catalog
... not sure we want to hardwire ourselves into a Google solution...
... we can do adhoc translation during build

Steven: do we define a schema that can be mapped or does the gRPC or other protocol provide that for us
... we can have different implementations underneath with former

MagnusF: not sure where we are now
... issues that Volvo ran into with mobile support for WAMP gives nod toward to gRPC

Ted recaps, WAMP suggested by Gunnar back before Gen2 started, revisited with RPC

scribe: want to be clear on scope of this topic
... not proposing derailing Gen2 although open to seeing how they may fit, interested in different architectural ideas
... what WAMP does that is on our Gen3 (or extensions) wishlist since we would get them for 'free', related to second major topic so perhaps keep some of that subtopic for when joined by other colleagues
... further consideration for RPC which as proposed will be separate from Gen2 although desire to have architecturally similar

Ted: @@
... he is at a disadvantage since he will need to talk to others more about iOS support

Tobias: understood and how you also want to learn about our experiences regarding compression, push/pull etc
... I am willing to prototype based on VSS. I can take your schema file, run through our tool chain including explicit targets (eg JavaScript and Objective C)
... in the end this is all about using the car
... end goal is to be able to create these interactions with vehicle
... gRPC ok in NodeJS runtime for browser clients using Webkit and worth testing as well

MagnusF: there tends to be local NodeJS, gateway does inspection before sending out via gRPC or whatever

Peter: there are issues with browser / gRPC interaction

Tobias: ah because of lack of HTTP2
... you can't do HTTP2 stream in browser tab, not possible
... you would have to tunnel over a WebSocket

MagnusF: I have two or three data points from different OEM saying they will only do native apps and not support browser apps
... anyone know otherwise?

Peter: I know of PoC but we are not doing so in our projects

MagnusF: JLR Defender uses Visteon's Phoenix for web apps via WebSocket gateway
... to NodeJS

Tobias: aren't you guys creating Web API at W3C? :)

Ted/Peter summarize history on original approach with Vehicle object in browser runtime and how we pivoted long ago to support broader range of clients

Daniel: regarding RPC we are not there, with common definition and toolset. I want more a protocol discussion before delving into eg protobuf

Tobias: this is my first time looking at this, how to model a car. the domain knowledge is the interesting part

Daniel: I can see multiple protocols being able to support the common data definition

Tobias: agree, the YAML can support multiple uses

MagnusF: this is split into two, GENIVI focused on the catalog and signal definitions with W3C on the corresponding protocol pieces
... I was trying to think of how to generate WAMP stubs from existing tooling that exists at JLR from service catalog

Daniel: we are working on both at the same time
... we maybe should postpone the W3C side for RPC instead of trying in parallel

MagnusF: depends on who steps up

Tobias: for WAMP at least I feel confident a few hundred lines of script code can read in JSON for car model and output flat buffer files I can use as stubs for WAMP
... we can compare that against gRPC
... propose giving that a try

MagnusF: we need to get a more detailed catalog, looking at you Steven

Steven: bit of resource issue right now but should be able to get energy soon
... we have some internal tooling we should be able to open source, previously gave a simpler version for YAML
... I don't want to be bottleneck

Tobias: don't want to be the bottleneck

Daniel: I am still a bit surprised at the format of the service catalog, wondering how we want to move forward

https://github.com/GENIVI/vehicle_service_catalog

Gunnar: I don't believe the difference between this early version and what we end up with as being very different

Tobias: this looks good, like the abstraction/description

Gunnar: to be clear we are not doing away with VSS
... final format may be adjusted to Daniel's comment
... we already have a Franca to WAMP mapping from years ago
... that is based on Franca instead of YAML
... FrancaIDL is about splitting from deployment model, not sure if the changes are too large

MagnusF: deployment as in what executes where?

Ted points out good conversation but we are kind of ambushing Tobias and didn't provide clear requirements earlier

Tobias: service catalog

Gen2 name selection

Off-boarding optimization (compression, serialization, sampling methodologies, etc)

Ted: automobiles are similar to some IoT and mobile devices, have sporadic connectivity, desire to 'off-board' sometimes substantial data while seeking to be efficient due to connectivity, cost, timeliness, etc
... focus of this discussion is on efficiency 'every byte counts'
... we are creating an in-vehicle service that OEM may permit outside connections to. also see desire to be able to do pre-packaging of sampled data to local storage for further inspection and later transmission

sub-topics:

* push v pull

* compression

* serialization

* sampling methodologies

Ted: I'll provide brief explanation of each since they are intertwined
... from security perspective I strongly prefer push, many OEM have open port which is a proven attack vector despite carrier level safeguards
... those carrier safeguards (firewalls, VPN etc) and opening port on mobile device (atypical compared to eg phones) costly, requires complete trust in competance, creates single point of attack to all vehicles and carriers known to have to comply with state actors
... unsure when vehicle is online, polling each to see if they are inefficient. appreciate WAMP approach of client (vehicle) initiating dialog with server in cloud (OEM only at present but subject to regulations, anti-trust etc - politics)
... regarding compression, with the exception of private branches in VSS we know our data structure and have schema. Ulf used a dictionary idea to greatly reduce
... realtime (time sensitive) data will be smaller transmissions, do see larger batch use cases as well for when connectivity is better (including at home, office or other wifi)
... regarding serialization JSON is verbose, have UUID (not that much shorter) which is why we are open to alternate formats
... ideal would be a binary or otherwise compact format that allows for some inspection to be able to prune and discard no longer pertinent data from local storage before off-boarding
... regarding sampling methodologies, we are seeing a mix at present of fixed time interval, event based and curve logic, possibly others
... Geotab interested in opening up their patent and curve algorithm. this enables being able to present reasonably full picture per signal (data point)
... it would be advantageous to support multiple sampling methodologies in Gen2 implementations for mutiple in-vehicle sampling applications to take advantage
... Dave previously equated this to lossy compression, discarding unneeded data
... given time lets focus on compression and serialization

Tobias: both topics involve a trade off
... depends on wire size and cpu
... if I am doing advanced compression to minimize bandwidth I will need more cpu and memory
... if I don't care about the wire size, I'll dump data as is
... consequence is there is no one best way
... second thing to keep in mind is to limit expectations. the best compression will always depend on the data
... data needs to be qualified, what are we sending, jpeg of cats?

<caribou> https://www.w3.org/TR/xbc-use-cases/ pre-EXI work examined different kinds of data

MagnusF: we are going to do a control plane protocol, sending signals and service calls
... not looking to send image/video transfers

Tobias: good point, not using large media data
... different set of compression algorithms, control calls and structured
... WebSocket deflate is a very simple option, depends on memory level

MagnusF: think we agree on a binary format such as protobuf instead of JSON

Tobias: agree, there is one reason to talk JSON

Carine: if you have any sort of data in EXI or CBOR you can run deflate
... you can go JSON to EXI directly, same for CBOR
... you get benefit with smaller payloads, especially repeating information EXI or CBOR will be more efficient that text if you have a schema

MagnusF: we do have schemas for signals and RPC service calls, could be made into protobuf as well

Tobias: coming back to serialization there is CBOR which is dynamically typed
... protobuf and flat buffers another for statically typed. can I use schema language to describe a meta schema
... I can write a schema in flatbuffer that represents another schema, allows me to do reflection
... if you want to store service descriptions in db. what is the type of column for schema table

MagnusF: we had a schema validator to check dumps for different types of targets
... https://github.com/GENIVI/vehicle_service_catalog

Tobias: that would be interesting for me to read

MagnusF: Steven needs to sterilize additional JLR code before open sourcing

<caribou> Don't forget to compare processing efficiency as well....

<caribou> not just the compression

MagnusF: there are many things up in the air as well. now we are discussing how to optimize a protocol

caribou, on receiving end presumably?

<caribou> both ends

Daniel: one proposal tomorrow we can look at is aligning VSS and VSC, some collapsing

Carine: we had roughly the same kind of problem when working on EXI and delayed choosing our solution
... we had all kinds of use cases, narrower set here
... we listed all properties we wanted the encoding to have, benchmarked the different proposals
... size of the resulting encoding not the only criteria. I heard someone mention roundrip time being important
... is the schema agreed upon

MagnusF: yes

Ted: clarification, we allow for 'private branches' which may not be known on receiving end

Carine: another aspect is measuring deviation in EXI, we had a requirement to allow for schema extensions negotiated on the line
... before EXI we had different candidates
... I'll provide link to measurements document you might find useful
... another was compression efficiency required for the different encodings

<Yves> other aspect: asymetry of encoding and decoding, if messages are always 1-1 or 1 to many, latency of encoding/decoding (I guess this is RTT). Having a "native" binary format (like cbor) is definitely better than compressing a string-based format like json

MagnusF: did you look into storing forward if data link was unavailable

Carine: didn't have that use case
... maybe the military use cases are closest

MagnusF: looks interesting, for regulations compliance we may need to lock down things and more rigid, spec backed
... not sure over the wire agreed extensions may be a nightmare and hard to explain to eg the EU
... did you look into versioning?

Carine: we had long discussions on sending the schema, obviously more efficient to not repeatedly resend it
... EXI headers aren't even mandatory
... in the end we created a Best Practices document on how to negotiate schema, when you want to use it
... this is an established specification, six years old

MagnusF: any developments since, prompting changes?

Carine: no but understand CBOR in IETF is more tokenization. EXI is more information theory, very different
... CBOR can also be efficient for smaller transmissions but not as familiar with it
... I know it know CBOR and EXI used in other places, ISO standards

Ted: can you tell us about its uses, understand military and aerospace, latter being very similar to automotive

Carine: Navy was a key stakeholder but we don't know their usage, highly confidential
... they were interested in EXI for JSON
... the Working Group is closed but still have the people around

<caribou> https://www.w3.org/XML/EXI/implementation-report/EXI_1_0_2nd_Edition.html

Ted: trying to remember one of the commercial solutions, believe it is AgileDelta and how much more efficient it is than the open source ones

<caribou> https://www.w3.org/XML/EXI/#implementations

Ted: any comparison to protobuf since that has been brought up

Carine: not sure, protobuf more optimized for wire transmission
... when we did a comparison it was not compressing as much

Tobias: why would we do that?

Ted processing on end?

Tobias: why serialize as XML?

Ted: not needed to go to XML if JSON with a schema

Carine: it is not really about XML, it is grammar based. schema description not necessarily XML schema
... schema describe grammar of what is being encoded. if you know how your JSON is structured you can generate an encoded document directly

Tobias: can I generate a validator for arbitrarily describing some JSON stuff, can I get a payload validator?

Carine: you can decode and get events

Tobias: ah while the parsing happens

Carine: encoded knows schema, chooses the right grammar and decode in reverse

Tobias: I see

Carine: depends on implementation

Tobias: so this is for domain specific grammars

Carine: as soon as you have a schema you can find a way to encode/decode events
... compare it to token based approach
... eg instead of 'sensor' you can have bit 1, preference on prioritizing what is transmitted more frequently
... CBOR is token based and no optimization based on actual data

Tobias: got it, if schema is known on both ends

Carine: you can use multiple schemas with simply sending the short string identified (or URI if needed)
... you do not need to encode all the stuff all the time

Tobias: thanks, much more clear

Carine: despite the name not tied to XML

Tobias: this is a crossover between serialization and compression

Carine: you may need to measure differences in processing efficiency, what types of devices are sending, bandwidth
... CBOR slightly longer and perhaps simpler
... deflate can be used in addition to EXI, more useful on larger transmissions
... Adobe was interested for compressing PDFs for example since gzipped had to operate on full document before being able to use it

s/Ted points out @@/Ted points out we have people waiting to join for next topic. while experiences and choices with different RPC solutions helpful we clearly need to flush out requirements more, use cases and represent them in the service catalog/

Summary of Action Items

Summary of Resolutions

[End of minutes]

Minutes manually created (not a transcript), formatted by David Booth's scribe.perl version (CVS log)
$Date: 2020/10/13 17:32:32 $

Linked related on WebEx chat:

from Tobias Oberstein to Everyone:
https://gitlab.com/leapsight/bondy11:28
http://leapsight.io/11:29
^ rgd erlang ..11:29
from Adnan Bekan to Everyone:
https://grpc.io/img/grpc-core-stack.svg11:35
from Tobias Oberstein to Everyone:
https://grpc.io/blog/state-of-grpc-web/11:48
from Adnan Bekan to Everyone:
they implement proxy11:49
from Magnus Feuer to Everyone:
https://docs.python-cerberus.org/en/stable/12:00
https://jinja.palletsprojects.com/en/2.11.x/12:00
from Tobias Oberstein to Everyone:
https://github.com/GENIVI/vehicle_signal_specification12:00
from Magnus Feuer to Everyone:
https://github.com/GENIVI/vehicle_service_catalog12:01
from Tobias Oberstein to Everyone:
https://github.com/google/flatbuffers/blob/master/reflection/reflection.fbs12:09
from daniel wilms to Everyone:
https://github.com/GENIVI/vehicle_service_catalog/issues/212:11
from Tobias Oberstein to Everyone:
fwiw, websocket supports deflate compression officially, autobahn-python also supports bzip2 and snappy over websocket https://github.com/crossbario/autobahn-python/tree/master/autobahn/websocket12:41
fwiw, rgd serializers here is a bunch of results https://crossbario.com/docs/benchmarks/serialization/index.html (sorry, company hosted, dont have other one)12:43
from Edward C Guild to Everyone:
https://www.w3.org/TR/xbc-use-cases/12:44