Craig`s slides
Download
Report
Transcript Craig`s slides
Dolby Australia
Internship Programme
CONFIDENTIAL INFORMATION
May, 2012
Introduction
Dolby and the new Internship Programme
Learn about building production software
Share my experiences working as a software developer
Please interrupt with questions
CONFIDENTIAL INFORMATION
3
Dolby Voice
New initiative targeting multi-party audio communication
Over $4.5B spent annually on audio conferencing, with the user
experiencing poor to extremely poor quality
We have the right people, technology and audio knowledge to make
it better
CONFIDENTIAL INFORMATION
4
History: Dense Immersive Communications Environment
We began as a CRC research project at the University of Wollongong
Funded by Telstra Research Labs and Motorola
Project was to create scalable immersive audio
MMO games were considered the hardest practical problem
Globally distributed user base, all IP connected
Real time voice for 5,000 player virtual worlds i.e. WoW
Cost effective to deliver for virtual worlds – even free to play
Integrated the technology into HL2:DM, CS:S and ET as demonstrators
Ran game trials with TRL Launceston
CONFIDENTIAL INFORMATION
5
CONFIDENTIAL INFORMATION
6
History: Spatial Voice and Axon
Spun off into a startup owned by the CRC and UOW in 2006
Acquired by Dolby in September 2007
Dolby created Axon
Voice platform targeting the Gaming segment
Technology from Spatial Voice
Enhanced with custom Echo and noise suppression, VAD, AGC, Codec
and Renderer
CONFIDENTIAL INFORMATION
7
Axon API
•
•
•
•
The platform for creation of
other Axon Products
Middleware provided to game
developers
1,000,000 Peak concurrent
users in China (Giant)
Axon Desktop Client
Dolby Axon Network
•
•
•
Wholesale Voice Service
GA Ready November 2010
Infrastructure for 130,000 Peak
Concurrent Users
Customers:
•
•
EA Need for Speed
Jump-gate Evolution
•
•
•
•
•
Consumer service
100,000+ consumer accounts
Hybrid peer-to-peer and hosted
10,000,000+ minutes of voice
served by us each week
99.99% uptime since
launch
CONFIDENTIAL INFORMATION
8
Building Production Software
Changing requirements
Security
Multiple developers
Long term support of code base
Diagnosing and fixing bugs in the field
Minimum downtime
Supporting legacy platforms
Time constraints
CONFIDENTIAL INFORMATION
9
Design and Planning
Keep it simple
Make it modular
Think about the tradeoffs between different designs
Discuss with other team members
Document your invariants
Define object ownership and lifetimes
CONFIDENTIAL INFORMATION
10
Development
Don’t trust you inputs
Especially from the network or user
Use asserts to check your state
Always handle the “Release build” case
Use logs and state dumps to provide a window into your code
Test as you develop
Pause in the debugger and check the state
CONFIDENTIAL INFORMATION
11
Testing
Unit tests
System tests
Negative and Positive testing
Code reviews
Playing around and looking for trouble
Test release builds once you are getting close to shipping
Dynamic and static analysis
Valgrind
Visual Studio Analyze (2010 Premium or better)
Clang Static Analyzer
CPPCheck
Compiler warnings (Multiple compilers)
CONFIDENTIAL INFORMATION
12
Deployment
Create procedures around production builds and deployment
Automate builds and deployment
If you can’t automate everything, automate what you can
Test after your deployment
Put in place mechanisms for informing customers about downtime
and updates
Have a backup plan, deployment may fail
CONFIDENTIAL INFORMATION
13
Production
Get feedback from users
Make it easy/automated
Include logs and state dumps
Crashes in the field
Keep debugging files
WER
OSX Crash files
Automated Uploads
Custom system
Breakpad + Socorro – Recommended
Automated handling of feedback and crashes
CONFIDENTIAL INFORMATION
14
WER
Free* service
Provides access
to minidumps
By default any
application crash
on Windows will
be reported here
CONFIDENTIAL INFORMATION
15
Process:
Path:
Version:
Dolby Axon [194]
/Applications/Dolby Axon.app/Contents/MacOS/Dolby Axon
Mac OS X Crash reports
0.2.2.0 (1)
Code Type:
X86 (Native)
Date/Time:
2012-05-01 23:30:54.496 -0700
OS Version:
Mac OS X 10.6.8 (10K549)
/Library/Logs/CrashReporter/ (10.5 and below)
/Library/Logs/DiagnosticReports/ (10.6 and above)
Exception Type: EXC_CRASH (SIGABRT)
Crashed Thread: 0 Dispatch queue: com.apple.main-thread
Assertion failed: (assert_buffsize(writec, readers[id].playc, readers[id].buffer_size)), function RegisterInputLane, file /DTC_branch/AxonCore/src/dvclient/EchoBuffer.cpp, line 278.
Thread 0 Crashed: Dispatch queue: com.apple.main-thread
0 libSystem.B.dylib
0x9025ec5a __kill + 10
1 libSystem.B.dylib
0x9025ec4c kill$UNIX2003 + 32
2 libSystem.B.dylib
0x902f15a5 raise + 26
3 libSystem.B.dylib
0x903076e4 abort + 93
4 libSystem.B.dylib
0x902f420f __assert_rtn + 252
5 com.dolby.axon.dvclient
0x01191895 AxonClientPrivate::EchoBuffer::RegisterInputLane(unsigned int, unsigned int) + 485
6 com.dolby.axon.dvclient
0x011922e9 AxonClientPrivate::EchoBufferManager::RegisterInputLane(unsigned int, unsigned int) + 553
7 com.dolby.axon.dvclient
0x0118a637 AxonClientPrivate::InputLane::InputLane(AxonClientPrivate::EchoBufferManager*, Axon::Util::LogBackend*, unsigned int, AxonClientPrivate::InputDevice*) + 231
8 com.dolby.axon.dvclient
0x0118a53d AxonClientPrivate::InputLane::InputLane(AxonClientPrivate::EchoBufferManager*, Axon::Util::LogBackend*, unsigned int, AxonClientPrivate::InputDevice*) + 77
9 com.dolby.axon.dvclient
0x0119889d AxonClientPrivate::DeviceManager::AcquireInputLane(unsigned int, unsigned int, AxonClientPrivate::AxonEngine*, AxonClientPrivate::InputLane**) + 573
10 com.dolby.axon.dvclient
0x0112b8a8 AxonClientPrivate::AxonEngine::SetupInputLane(unsigned int, unsigned int, unsigned int*) + 104
11 com.dolby.axon.dvclient
0x012354a1 AxonClientPrivate::DVClientCommon::SetDevice(_DVCL_AUDIO_PATH_TYPE, DVCL_DeviceGuid_, unsigned int, unsigned int) + 737
Custom System
DTC uses a launcher that acts a crash reporter
Any uncaught exceptions or crashes are automatically uploaded
Also detects potential deadlocks and uploads
Server collects reports and categorizes based on the call stack
Top 5 Windows crashes from a previous version
1188 ./0xC0000005/iceclient_1/AxonClientPrivate__EchoBufferManager__DeregisterOutputLane/
342 ./0xC0000005/dsound/CThreadBase__StaticThreadProc/
230 ./0xE06D7363/kernel32/RaiseException/
190 ./0xC0000005/winmm/timeGetTime/
169 ./0xC0000005/wdmaud/CWorker___StaticThreadProc/
CONFIDENTIAL INFORMATION
17
Top Windows Crash
iceclient_1!AxonClientPrivate::EchoBufferManager::DeregisterOutputLane Line 274
iceclient_1!AxonClientPrivate::DeviceManager::ReleaseOutputLane Line 299 + 0xF bytes
iceclient_1!AxonClientPrivate::AxonEngine::Destroy Line 270 + 0xC bytes
iceclient_1!AxonClientPrivate::AxonEngine::~AxonEngine Line 201
iceclient_1!AxonClientPrivate::TickManager::destroyhelper<AxonClientPrivate::AxonEngine> Line 94 + 0xE bytes
iceclient_1!AxonClientPrivate::TickManager::~TickManager Line 50 + 0x1C bytes
iceclient_1!AxonClientPrivate::DeviceManager::Shutdown Line 43 + 0x1B bytes
Axon!_DVP_context::~_DVP_context Line 1319
Axon!DVP_destroy Line 89 + 0x6 bytes
Axon!DVPModel::ModelManager::Release Line 42 + 0x1F bytes
Axon!Run Line 92
Axon!wWinMain Line 155 + 0x5 bytes
Axon!__tmainCRTStartup Line 324 + 0x1C bytes
kernel32 + 0x1339A bytes
[Frames below may be incorrect and/or missing, no symbols loaded for kernel32]
ntdll!__RtlUserThreadStart + 0x70 bytes
ntdll!_RtlUserThreadStart + 0x1B bytes
CONFIDENTIAL INFORMATION
18
Support - DAN and DTC
Monitoring systems are in place
Key metrics are graphed
Checked twice daily by a developer on “support duty”
Automated scripts detect failures and look for problems
Any failures trigger alerts to the support device
Support diagnoses and handles it or escalates to module lead
CONFIDENTIAL INFORMATION
19
Ensuring uptime
Redundancy is you friend
Dual redundant databases
Dual internet connections
Dual redundant switches
Dual power supplies
Multiple data centers*
Multiple servers, load based/round robin scheduling
Standby servers for single points of failure
Software that can automatically recover from a restart
CONFIDENTIAL INFORMATION
20
General tips
Never ignore a crash or assert it will happen to a customer (or in a demo)
If you notice something unusual investigate, it is probably a bug
You will need diagnostics to help you solve issues in the field. Make life easier on
yourself and write them early so you can use them in development and testing
Reread your code before committing
Something can always go wrong even with a “simple fix”
Prototypes become demos. Demos become products
Do what works for you and your team
CONFIDENTIAL INFORMATION
21
Questions?
Innovation with Impact