SlideShare a Scribd company logo
beyond breakpointsA Tour of Dynamic Analysis
Nathan Taylor, Fastly
http://nathan.dijkstracula.net
@dijkstracula
Beyond Breakpoints: A Tour of Dynamic Analysis
T. Ball: The Concept of Dynamic Analysis ESEC ‘99
“Dynamic analysis is the
analysis of the properties
of a running program […]
(usually through program
instrumentation).”
From Pin: Building Customized Program Analysis Tools with Dynamic Instrumentation

Recommended for you

Altitude SF 2017: Debugging Fastly VCL 101
Altitude SF 2017: Debugging Fastly VCL 101Altitude SF 2017: Debugging Fastly VCL 101
Altitude SF 2017: Debugging Fastly VCL 101

Learn from Fastly veteran Cassandra Dixon on some of the most common customer issues we see — such as why things aren’t caching, misconfigured origins, issues with intermediary proxies, and VCL snafus — and the best ways to resolve them. We’ll also discuss our unique approach to debugging — using seemingly mundane tools to diagnose issues in creative ways — and how you can apply these methods to your own organization to get the most out of Fastly’s offerings.

varnishtechnologysoftware
Tips for going fast in a slow world: Michael May at OSCON 2015
Tips for going fast in a slow world: Michael May at OSCON 2015Tips for going fast in a slow world: Michael May at OSCON 2015
Tips for going fast in a slow world: Michael May at OSCON 2015

Fastly engineer Michael May at OSCON 2015: When it comes to caching, we fall into two categories – those who make phat stacks of cache money and those who suffer from cache anxiety. We know caching aggressively improves performance; however, advanced caching strategies for event-driven content or user-specific content are often neglected for fear of complexity or lack of understanding. In this talk, we’ll cover HTTP caching, old and new strategies for caching historically ‘uncacheable’ content, and secret features of HTTP accelerators like Varnish. Whether you’re already stacking cache or just seeking a prescription for one, you’ll leave with a deeper understanding of caching and accelerating applications that you can take and apply to your Rails, Django, etc. apps.

osconcaching contentfastly
Real Time Event Dispatcher
Real Time Event DispatcherReal Time Event Dispatcher
Real Time Event Dispatcher

Pushing symfony events in real time to your clients This talk, held at the symfony live Paris unconference, gives an overview about how events thrown in symfony can be dispatched in real time to web clients. It describes the architecture of the solution and provides examples using the open source comet server APE

apeajaxevents
From ReVirt: Enabling Intrusion Analysis through Virtual-Machine Logging and Replay
classic use-cases
Debugging a program crash or race condition
Input to understand a new codebase
Analysis of obfuscated software or malware
who cares
Huge gulf between what tools practitioners use in
industry, and academic dynamic analysis work
Many techniques shared with other cool areas
like OS virtualization and compiler theory
Techniques have different performance tradeoffs;
knowing the lay of the land will help you choose
the right tool for your problem
dynamic vs static analysis
Static analysis is a conservative approximation of
runtime behavior
Programs are only partially known (dynamic linking;
user input)
Imprecise: consider a program that typechecks but still
has a bug
Language specifications often assume a single thread
of execution (or, don’t specify at all): “valid” programs
can still allow race conditions!

Recommended for you

A complete guide to Node.js
A complete guide to Node.jsA complete guide to Node.js
A complete guide to Node.js

This document provides a complete guide to Node.js, covering installation methods, checking installation, modules, NPM, events, streams, and persisting data. It discusses installing Node.js from nodejs.org, using a version manager like NVM, or compiling from source. It also covers creating a basic web server, reading and writing files, uploading files, and using Socket.IO for real-time applications.

node.jslearn-nodecomplete-node.js
About Node.js
About Node.jsAbout Node.js
About Node.js

Node.js is a JavaScript runtime built on Chrome's V8 engine that allows building scalable network applications using JavaScript on the server-side. It uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, suitable for data-intensive real-time applications that run across distributed devices. Common uses of Node.js include building web servers, file upload clients, ad servers, chat servers, and any real-time data applications. The document provides an introduction to Node.js concepts like callbacks, blocking vs non-blocking code, the event loop, streams, events, and modules.

node.jsnode js
Play Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaPlay Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and Scala

This document discusses asynchronous I/O in Java and Scala using the Play Framework. It describes how LinkedIn uses a service-oriented architecture with hundreds of services making requests to each other. It then covers how Play supports non-blocking I/O using asynchronous code, promises, and futures to allow parallel requests without blocking threads. Key points covered include using map and flatMap to transform promises and futures, handling errors and timeouts, and the benefits of non-blocking I/O for scalability.

play frameworkjavalinkedin
can’t prove correctness
but can demonstrate failure
today’s topics
Omniscient Debugging and State Tracking
Analyzing Concurrent Systems
Areas of Future Work
for each topic…
What open-source tooling exists?
How does it work under the hood?
What contributions has academia made?
Beyond Breakpoints: A Tour of Dynamic Analysis

Recommended for you

WebSockets wiith Scala and Play! Framework
WebSockets wiith Scala and Play! FrameworkWebSockets wiith Scala and Play! Framework
WebSockets wiith Scala and Play! Framework

A WebSockets HOW-TO using Scala and Play!Framework. Links to example repositories and other resources. Created for the AmsterdamScala meetup.

play frameworkactorsakka
Mitigating Security Threats with Fastly - Joe Williams at Fastly Altitude 2015
Mitigating Security Threats with Fastly - Joe Williams at Fastly Altitude 2015Mitigating Security Threats with Fastly - Joe Williams at Fastly Altitude 2015
Mitigating Security Threats with Fastly - Joe Williams at Fastly Altitude 2015

Fastly Altitude - June 25, 2015. Joe Williams, Computer Operator at GitHub discusses using a CDN to mitigate security threats. Video of the talk: http://fastly.us/Altitude2015_Mitigating-Security-Threats-2 Joe's bio: Joe Williams is a Computer Operator at GitHub, and joined their infrastructure team in August 2013. Joe's passion for distributed systems, queuing theory and automation help keep the lights on. When not behind a computer you can generally find him riding a bicycle around Marin, CA.

securitygithubcontent delivery network
Altitude SF 2017: Advanced VCL: Shielding and Clustering
Altitude SF 2017: Advanced VCL: Shielding and ClusteringAltitude SF 2017: Advanced VCL: Shielding and Clustering
Altitude SF 2017: Advanced VCL: Shielding and Clustering

1. Shielding and clustering help improve performance by distributing requests across multiple POPs and collapsing duplicate requests. 2. Shielding offloads requests to "shield" POPs to avoid bottlenecks and beat the speed of light, while clustering collapses requests within each POP. 3. Implementing shielding and clustering in VCL requires care to avoid issues like requests being processed differently on edge and shield POPs.

varnishvcladvanced vcl
Beyond Breakpoints: A Tour of Dynamic Analysis
Beyond Breakpoints: A Tour of Dynamic Analysis
Beyond Breakpoints: A Tour of Dynamic Analysis
Beyond Breakpoints: A Tour of Dynamic Analysis

Recommended for you

Choosing a Javascript Framework
Choosing a Javascript FrameworkChoosing a Javascript Framework
Choosing a Javascript Framework

Pam Selle Co-author of Choosing a JavaScript Framework, thewebivore.com Tuesday, Oct 20th 4:20 pm - Design/UX/UI

ato2015open sourceall things open
Going crazy with Varnish and Symfony
Going crazy with Varnish and SymfonyGoing crazy with Varnish and Symfony
Going crazy with Varnish and Symfony

You know how HTTP caching works but need more? In this talk we look into ways to cache personalized content. We will look at Edge Side Includes (ESI) to tailor caching rules of fragments, and at the user context concept to differentiate caches not by individual user but by permission groups.

symfony2symfonyhttp
Dancing with websocket
Dancing with websocketDancing with websocket
Dancing with websocket

Given at YAPC::EU 2012 Dancer + WebSocket + AnyEvent + Twiggy This in *not* a talk about doing a hello world in Dancer, as there are plenty of it. This is a real-life example of using Dancer to address a problem in an elegant and powerful way At $job, we have cpan mirrors. We want them to stay a bit behind the real CPAN for stability, but we have a tool to update modules from the real CPAN to our mirrors. Cool. I wanted to have a web interface to trigger it, and monitor the injection. This problem is not a typical one (blog, wiki, CRUD, etc). Here we have a long running operation that shall happen only one at a time, that generates logs to be displayed, with states that need keeping. In this regard, it's interesting to see how Dancer is versatile enough to address these situations with ease. This talk details how I did that, the technology I used, and the full source code (which is quite short). I used Dancer + WebSocket + AnyEvent + Twiggy + some other stuff. This talk doesn't require any particular knowledge beyond basic Perl, and very basic web server understanding.

perl anyevent dancer twiggy websocket
J. Mickens: The Night Watch ;login Nov 2013
“Despair is when you’re
debugging a kernel driver and
you look at a memory dump and
you see that a pointer has a value
of 7. THERE IS NO
HARDWARE ARCHITECTURE
THAT IS ALIGNED ON 7.
Furthermore, 7 IS TOO SMALL
AND ONLY EVIL CODE WOULD
TRY TO ACCESS SMALL
NUMBER MEMORY. ”
Beyond Breakpoints: A Tour of Dynamic Analysis
Time-Traveling
Debugging
Beyond Breakpoints: A Tour of Dynamic Analysis

Recommended for you

Reverse ajax in 2014
Reverse ajax in 2014Reverse ajax in 2014
Reverse ajax in 2014

Reverse Ajax, also known as Comet, allows a server to push data to a client without the client explicitly requesting it. This is achieved through techniques like long polling where the client opens a persistent connection to the server to receive messages as they happen. Common libraries that implement Reverse Ajax include CometD, Atmosphere, and DWR, with CometD being a preferred option as it supports websockets and offers full client/server functionality.

dwrcometreverse ajax
EWD 3 Training Course Part 5b: First Steps in Building a QEWD Application
EWD 3 Training Course Part 5b: First Steps in Building a QEWD ApplicationEWD 3 Training Course Part 5b: First Steps in Building a QEWD Application
EWD 3 Training Course Part 5b: First Steps in Building a QEWD Application

This presentation is part 5 in the EWD 3 Training Course. It describes the first steps you should take when building a browser-based desktop QEWD application. This version of Part 5 is for anyone using QEWD on Linux or a Raspberry Pi.

nosqlnode.jsdatabase
Service Worker Presentation
Service Worker PresentationService Worker Presentation
Service Worker Presentation

Service workers allow you to control how network requests from web pages are handled. They run scripts in the background to intercept and handle fetch events, allowing web applications to work offline by responding with cached responses. Before service workers, AppCache was used but had limitations. The lifecycle of a service worker involves registration, installation, activation, and controlling pages. Common uses are caching assets, providing offline functionality, and handling network responses. Challenges include debugging failed installations and limitations on credentials and CORS requests. Service workers also enable push notifications and background sync functionality.

line 9
old i: N/A
new i: 7
line 10
old i: 7
new i: 8
line 11
old j: N/A
new j: 5
line 12
old i: 8
new j: 13
gdb/record-full.c
Beyond Breakpoints: A Tour of Dynamic Analysis
Hofer et al. Design And Implementation of
a Backward-In-Time Debugger
NODe ‘06

Recommended for you

Connecting to Web Services on Android
Connecting to Web Services on AndroidConnecting to Web Services on Android
Connecting to Web Services on Android

The document discusses connecting Android applications to web services using HTTP, XML, JSON, and OAuth. It covers using the HttpClient API to make HTTP requests, parsing responses in XML and JSON formats, and obtaining access tokens from services using OAuth authentication. The document also recommends libraries for tasks like XML/JSON processing and provides examples of client libraries that connect to specific web services.

restjsonxml
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 2
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 2EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 2
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 2

This is part 38 of the EWD 3 Training Course. This presentation begins to explore in detail how to develop a React.js application that integrates with QEWD

node.jsdatabasejavascript
Applying Varnish
Applying VarnishApplying Varnish
Applying Varnish

This document discusses applying Varnish, including topics like the VCL (Varnish Configuration Language), request flow, sticky origins, localized site redirects, token authentication, and third party authentication. It concludes by inviting any questions from the audience.

varnish configuration languagevarnishfastly
Beyond Breakpoints: A Tour of Dynamic Analysis
Efficient time-
traveling
King et al. Debugging Operating Systems
with Time-Traveling Virtual Machines
Usenix ‘05
“…operating systems run
for long periods of time,
such as weeks, months, or
even years.”
King et al. Debugging Operating Systems
with Time-Traveling Virtual Machines
Usenix ‘05

Recommended for you

The Fallacy of Fast - Ines Sombra at Fastly Altitude 2015
The Fallacy of Fast - Ines Sombra at Fastly Altitude 2015The Fallacy of Fast - Ines Sombra at Fastly Altitude 2015
The Fallacy of Fast - Ines Sombra at Fastly Altitude 2015

Fastly Altitude - June 25, 2015. Ines Sombra, a Systems Engineer at Fastly, talks about lessons learned in rapid systems development. Video of the talk: http://fastly.us/Altitude2015_Fallacy-of-Fast Ines' bio: Ines Sombra is a Systems Engineer at Fastly, where she spends her time helping the Web go faster. Ines holds an M.S. in Computer Science and an M.S. in Information Management from Washington University in Saint Louis. Being a true Argentine, she has a fondness for steak, fernet, and a pug named Gordo.

rapid systems developmentcontent delivery networkfastly altitude
It Probably Works
It Probably WorksIt Probably Works
It Probably Works

Probabilistic algorithms exist to solve problems that are either impossible or unrealistic (too expensive, too time consuming, etc.) to solve precisely. In an ideal world, you would never actually need to use probabilistic algorithms. For programmers who are not familiar with them, the concept can be positively nerve-racking: “How do I know it will actually work? What if it is inexplicably wrong? How can I debug it? Maybe we should just punt on this problem or buy a whole lot more servers. . .” However, for those who either deeply understand probability theory or at least have used and observed the behavior of probabilistic algorithms in large-scale production environments, these algorithms are not only acceptable but also worth using at any opportunity. This is because they can help solve problems, create systems that are less expensive and more predictable, and do things that could not be done otherwise.

software developmentalgorithmsopen source software
Top 5 Things I've Messed Up in Live Streaming
Top 5 Things I've Messed Up in Live StreamingTop 5 Things I've Messed Up in Live Streaming
Top 5 Things I've Messed Up in Live Streaming

June 24, 2014 - SF Video Technology Meetup. Live streaming can be difficult and challenging, yet extremely rewarding. In the video gaming world, it has become the most powerful way of reaching your audience. It combines traditional web technologies with even more traditional broadcast video stacks in a "it's going live now" environment. In this presentation Lee Chen, head of product at Fastly, goes over the top 5 things that have lost him sleep, made his eyebrows go up, and sometimes even made him fail -- what he did to correct it.

video streaminglive videofastly
King et al. Debugging Operating Systems
with Time-Traveling Virtual Machines
Usenix ‘05
“Replay causes the virtual
machine to transition
through the same states as
it went through during the
original run”
“A VM can be replayed by
starting from a checkpoint,
then replaying […] the
network, keyboard, clock,
and timing of interrupts”
Deterministic
Replay
King et al. Debugging Operating Systems
with Time-Traveling Virtual Machines
Usenix ‘05
“Taking checkpoints every minute
added less than 4% time overhead
and 1-5 MB/sec space overhead.”
“The logging added 3-12% in
running time and 2-85 KB/sec in
log space.”
“Taking checkpoints every 10
second added 16-33% overhead
and enabled reverse debugging
commands to complete in about
12 seconds”
GDB: linked list storage of every memory op
Easy to build and reason about
Both recording and replaying is very slow-
+
King (et al): Periodic state checkpointing
Easy to jump between large period of time
Can trade better fidelity for greater overhead
Have to replay execution between checkpoints
+
+
-
King (et al): Only records external, non-deterministic events
Reduces log size and improves performance
synchronizing external events becomes complicated
+
-

Recommended for you

What we can learn from CDNs about Web Development, Deployment, and Performance
What we can learn from CDNs about Web Development, Deployment, and PerformanceWhat we can learn from CDNs about Web Development, Deployment, and Performance
What we can learn from CDNs about Web Development, Deployment, and Performance

CDNs provide caching and delivery of web content but are often misused. CDNs can cache more dynamic content than typically done and improve performance. Precise measurement is still difficult, such as determining cache hit rates and impacts of memory versus disk hits. Overall, CDNs have more potential for optimization and caching improvements remain an ongoing challenge.

software testingcontent delivery networksoftware
Confident Refactoring - Ember SF Meetup
Confident Refactoring - Ember SF MeetupConfident Refactoring - Ember SF Meetup
Confident Refactoring - Ember SF Meetup

This document discusses refactoring techniques for Ember applications. It describes using tests to guide refactoring, including custom test helpers for things like finding elements. An example shows refactoring a service for making requests by version into a more generic resource service. The recap encourages relying on tests, writing targeted helpers, addressing code smells, adding features, applying the "three times rule" of repetition, and refactoring during upgrades.

open source softwaretechnologysoftware development
Performance Measuring & Monitoring - Catchpoint CEO Mehdi Daoudi at Fastly Al...
Performance Measuring & Monitoring - Catchpoint CEO Mehdi Daoudi at Fastly Al...Performance Measuring & Monitoring - Catchpoint CEO Mehdi Daoudi at Fastly Al...
Performance Measuring & Monitoring - Catchpoint CEO Mehdi Daoudi at Fastly Al...

Fastly Altitude - June 25, 2015. Catchpoint CEO Mehdi Daoudi talks about performance measuring and monitoring. Video from the talk: http://fastly.us/Altitude2015-Catchpoint-Video Mehdi's bio: Mehdi is the founder and CEO of Catchpoint, the fastest-growing Web Performance Monitoring Solution. The Catchpoint vision is to provide the best IT analytics & intelligence to help companies improve their end user performance and keep an eye on their infrastructure and vendors. Before Catchpoint, Mehdi spent 10+ years at DoubleClick and Google, where he was responsible for Quality of Services, buying, building, deploying and using various internal and external monitoring solutions to keep an eye on the DART infrastructure delivering billions of transactions a day using thousands of servers, routers, and various other web performance systems.

high performance websiteperformance monitoringperformance measuring
Improving
performance with
JIT compilation
compilation-based tooling
Rather than interrupt execution to
return control-flow to a debugger,
weave instrumentation into the
existing codebase at runtime
Allows for both better
performance and more flexible
analysis tools
Luk et al. Pin: Building Customized Program
Analysis Tools w/ Dynamic Instrumentation PLDI ‘05
“The goal is to provide an
implementation platform for
building program analysis tools”
“Its API allows a tool to insert
calls to instrumentation at
arbitrary locations in the
executable”
“Pin provides efficient
instrumentation by using a just-
in-time compiler to insert and
optimize code”
…

4 byte write to 0x7fff572b3b1c
4 byte write to 0x7fff572b3b1c

1 byte write to 0x7f86c0c04b00
1 byte write to 0x7f86c0c04b04
4 byte write to 0x7fff572b3b20
…

Recommended for you

It Probably Works - QCon 2015
It Probably Works - QCon 2015It Probably Works - QCon 2015
It Probably Works - QCon 2015

The document discusses probabilistic algorithms and their use for solving count-distinct problems. It explains that probabilistic algorithms provide probabilistically bounded error rates rather than exact answers. The count-distinct problem aims to estimate the number of unique elements in a large dataset and is used in applications like estimating unique website visitors. The document presents the LogLog algorithm as a probabilistic solution that partitions data and tracks the maximum number of leading zeros seen to estimate the count in a memory-efficient way.

software developmenttechnologysoftware
Interative Traffic Engineering in Changing Internet Economics - Tom Daly at L...
Interative Traffic Engineering in Changing Internet Economics - Tom Daly at L...Interative Traffic Engineering in Changing Internet Economics - Tom Daly at L...
Interative Traffic Engineering in Changing Internet Economics - Tom Daly at L...

The physical, logical, and economic topology of the Internet is ever changing due to new network to network interconnections, the planned or accidental disconnection of existing interconnections, and the ever growing needs for more network capacity. As a multi-Terabit traffic source, Fastly must regularly evaluate its needs for network capacity against performance and operating costs. This talk will examine the capacity planning models, scalability concerns, and economic drivers used to make key business decisions regarding connectivity, emphasizing the needs for metrics collection, analysis, and constant iterative tuning involving a distributed, international team.

softwarenetworkingengineering
Developing a Globally Distributed Purging System
Developing a Globally Distributed Purging SystemDeveloping a Globally Distributed Purging System
Developing a Globally Distributed Purging System

(Surge 2014) How do you build a distributed cache invalidation system that can invalidate content in 150 milliseconds across a global network of servers? Fastly CTO Tyler McMullen and engineer Bruce Spang will discuss the process of constructing a production-ready distributed system built on solid theoretical foundations. This talk will cover using research to design systems, the bimodal multicast algorithm, and the behavior of this system in production.

content delivery networkcontent deliverydynamic content
Luk et al. Pin: Building Customized Program
Analysis Tools w/ Dynamic Instrumentation PLDI ‘05
recordMemWrite(%rip,	
  &i);
recordMemWrite(%rip,	
  &i);
recordMemWrite(%rip,	
  &j);
recordMemWrite(%rip,	
  &i);
movl	
  	
  	
  	
  $0x7,	
  -­‐0x8(%rbp)INS_AddInstrumentFunction()
push	
  	
  	
  %rbp	
  
mov	
  	
  	
  	
  %rsp,%rbp	
  
mov	
  	
  	
  	
  $0x100,%edi	
  
callq	
  	
  0x400430	
  <malloc@plt>
TRACE_AddInstrumentFunction()
push	
  	
  	
  %rbp	
  
mov	
  	
  	
  	
  %rsp,%rbp	
  
mov	
  	
  	
  	
  $0x100,%edi	
  
callq	
  	
  0x400430	
  <malloc@plt>	
  
mov	
  	
  	
  	
  %rax,0x200ac8(%rip)	
  
mov	
  	
  	
  	
  $0x0,%eax	
  
callq	
  	
  0x400540	
  <bar>	
  
pop	
  	
  	
  	
  %rbp	
  
retq
RTN_AddInstrumentFunction()
push	
  	
  	
  %rbp	
  
mov	
  	
  	
  	
  %rsp,%rbp	
  
mov	
  	
  	
  	
  $0x100,%edi	
  
callq	
  	
  0x400430	
  <malloc@plt>	
  
mov	
  	
  	
  	
  %rax,0x200ac8(%rip)	
  
mov	
  	
  	
  	
  $0x0,%eax	
  
callq	
  	
  0x400540	
  <bar>	
  
pop	
  	
  	
  	
  %rbp	
  
retq
push	
  	
  	
  %rbp	
  
mov	
  	
  	
  	
  %rsp,%rbp	
  
sub	
  	
  	
  	
  $0x10,%rsp	
  
movq	
  	
  	
  $0x0,-­‐0x8(%rbp)	
  
mov	
  	
  	
  	
  -­‐0x8(%rbp),%rax	
  
add	
  	
  	
  	
  $0x1c,%rax	
  
mov	
  	
  	
  	
  %rax,0x200ae9(%rip)	
  
mov	
  	
  	
  	
  $0x0,%eax	
  
callq	
  	
  0x40052d	
  <baz>	
  
leaveq	
  
retq
push	
  	
  	
  %rbp	
  
mov	
  	
  	
  	
  %rsp,%rbp	
  
mov	
  	
  	
  	
  0x200b10(%rip),%rax	
  
movl	
  	
  	
  $0x2a,(%rax)	
  
pop	
  	
  	
  	
  %rbp	
  
retq
IMG_AddInstrumentFunction()
thread-sanitizer/blob/master/gcc/tree-tsan.c
static	
  void	
  
instrument_gimple	
  (gimple_stmt_iterator	
  gsi)	
  
{	
  
	
  	
  unsigned	
  i;	
  
	
  	
  gimple	
  stmt;	
  
	
  	
  enum	
  gimple_code	
  gcode;	
  
	
  	
  tree	
  rhs,	
  lhs;	
  
	
  	
  stmt	
  =	
  gsi_stmt	
  (gsi);	
  
	
  	
  gcode	
  =	
  gimple_code	
  (stmt);	
  
	
  	
  if	
  (gcode	
  ==	
  GIMPLE_ASSIGN)	
  {	
  
	
  	
  	
  	
  	
  	
  /*	
  Handle	
  assignment	
  lhs	
  as	
  store.	
  	
  */	
  
	
  	
  	
  	
  	
  	
  lhs	
  =	
  gimple_assign_lhs	
  (stmt);	
  
	
  	
  	
  	
  	
  	
  instrument_expr	
  (gsi,	
  lhs,	
  1);	
  
	
  	
  	
  	
  	
  	
  /*	
  Handle	
  operands	
  as	
  loads.	
  	
  */	
  
	
  	
  	
  	
  	
  	
  for	
  (i	
  =	
  1;	
  i	
  <	
  gimple_num_ops	
  (stmt);	
  i++)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  rhs	
  =	
  gimple_op	
  (stmt,	
  i);	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  instrument_expr	
  (gsi,	
  rhs,	
  0);	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  }	
  
}
static	
  void	
  
instrument_expr	
  (gimple_stmt_iterator	
  gsi,	
  tree	
  expr,	
  int	
  is_write)	
  
{	
  
	
  	
  enum	
  tree_code	
  tcode;	
  
	
  	
  unsigned	
  fld_off,	
  fld_size;	
  
	
  	
  tree	
  base,	
  rhs;	
  
	
  	
  gimple	
  stmt;	
  
	
  	
  gimple_seq	
  gs;	
  
	
  	
  location_t	
  loc;	
  
	
  	
  base	
  =	
  get_base_address	
  (expr);	
  
	
  	
  if	
  (base	
  ==	
  NULL_TREE	
  ||	
  TREE_CODE	
  (base)	
  ==	
  SSA_NAME	
  
	
  	
  	
  	
  	
  	
  ||	
  TREE_CODE	
  (base)	
  ==	
  STRING_CST)	
  
	
  	
  	
  	
  return;	
  
	
  	
  tcode	
  =	
  TREE_CODE	
  (expr);	
  
	
  	
  /*	
  Below	
  are	
  things	
  we	
  do	
  not	
  instrument	
  
	
  	
  	
  	
  	
  (no	
  possibility	
  of	
  races	
  or	
  not	
  implemented	
  yet).	
  	
  */	
  
	
  	
  if	
  (/*	
  Compiler-­‐emitted	
  artificial	
  variables.	
  	
  */	
  
	
  	
  	
  	
  	
  	
  (DECL_P	
  (expr)	
  &&	
  DECL_ARTIFICIAL	
  (expr))	
  
	
  	
  	
  	
  	
  	
  /*	
  The	
  var	
  does	
  not	
  live	
  in	
  memory	
  -­‐>	
  no	
  possibility	
  of	
  races.	
  	
  */	
  
	
  	
  	
  	
  	
  	
  ||	
  (tcode	
  ==	
  VAR_DECL	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  &&	
  TREE_ADDRESSABLE	
  (expr)	
  ==	
  0	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  &&	
  TREE_STATIC	
  (expr)	
  ==	
  0)	
  
	
  	
  	
  	
  	
  	
  /*	
  Not	
  implemented.	
  	
  */	
  
	
  	
  	
  	
  	
  	
  ||	
  TREE_CODE	
  (TREE_TYPE	
  (expr))	
  ==	
  RECORD_TYPE	
  
	
  	
  	
  	
  	
  	
  ||	
  tcode	
  ==	
  CONSTRUCTOR	
  
	
  	
  	
  	
  	
  	
  ||	
  tcode	
  ==	
  PARM_DECL	
  
	
  	
  	
  	
  	
  	
  /*	
  Load	
  of	
  a	
  const	
  variable/parameter/field.	
  	
  */	
  
	
  	
  	
  	
  	
  	
  ||	
  is_load_of_const	
  (expr,	
  is_write))	
  
	
  	
  	
  	
  return;	
  
static	
  gimple_seq	
  
instr_memory_access	
  (tree	
  expr,	
  int	
  is_write)	
  
{	
  
	
  	
  tree	
  addr_expr,	
  expr_type,	
  call_expr,	
  fdecl;	
  
	
  	
  gimple_seq	
  gs;	
  
	
  	
  unsigned	
  size;	
  
	
  	
  gcc_assert	
  (is_gimple_addressable	
  (expr));	
  
	
  	
  addr_expr	
  =	
  build_addr	
  (unshare_expr	
  (expr),	
  current_function_decl);	
  
	
  	
  expr_type	
  =	
  TREE_TYPE	
  (expr);	
  
	
  	
  while	
  (TREE_CODE	
  (expr_type)	
  ==	
  ARRAY_TYPE)	
  
	
  	
  	
  	
  expr_type	
  =	
  TREE_TYPE	
  (expr_type);	
  
	
  	
  size	
  =	
  (TREE_INT_CST_LOW	
  (TYPE_SIZE	
  (expr_type)))	
  /	
  BITS_PER_UNIT;	
  
	
  	
  fdecl	
  =	
  get_memory_access_decl	
  (is_write,	
  size);	
  
	
  	
  call_expr	
  =	
  build_call_expr	
  (fdecl,	
  1,	
  addr_expr);	
  
	
  	
  gs	
  =	
  NULL;	
  
	
  	
  force_gimple_operand	
  (call_expr,	
  &gs,	
  true,	
  0);	
  
	
  	
  return	
  gs;	
  
static	
  tree	
  
get_memory_access_decl	
  (int	
  is_write,	
  unsigned	
  size)	
  
{	
  
	
  	
  tree	
  typ,	
  *decl;	
  
	
  	
  char	
  fname	
  [64];	
  
	
  	
  static	
  tree	
  cache	
  [2][17];	
  
	
  	
  is_write	
  =	
  !!is_write;	
  
	
  	
  if	
  (size	
  <=	
  1)	
  
	
  	
  	
  	
  size	
  =	
  1;	
  
	
  	
  else	
  if	
  (size	
  <=	
  3)	
  
	
  	
  	
  	
  size	
  =	
  2;	
  
	
  	
  else	
  if	
  (size	
  <=	
  7)	
  
	
  	
  	
  	
  size	
  =	
  4;	
  
	
  	
  else	
  if	
  (size	
  <=	
  15)	
  
	
  	
  	
  	
  size	
  =	
  8;	
  
	
  	
  else	
  
	
  	
  	
  	
  size	
  =	
  16;	
  
	
  	
  decl	
  =	
  &cache[is_write][size];	
  
	
  	
  if	
  (*decl	
  ==	
  NULL)	
  {	
  
	
  	
  	
  	
  	
  	
  snprintf(fname,	
  sizeof	
  fname,	
  "__tsan_%s%d",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  is_write	
  ?	
  "write"	
  :	
  "read",	
  size);	
  
	
  	
  	
  	
  	
  	
  typ	
  =	
  build_function_type_list	
  (void_type_node,	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ptr_type_node,	
  NULL_TREE);	
  
	
  	
  	
  	
  	
  	
  *decl	
  =	
  build_func_decl	
  (typ,	
  fname);	
  
	
  	
  	
  	
  }	
  
	
  	
  return	
  *decl;	
  
}
	
  	
  if	
  (tcode	
  ==	
  COMPONENT_REF)	
  {	
  
	
  	
  	
  	
  	
  	
  tree	
  field	
  =	
  TREE_OPERAND	
  (expr,	
  1);	
  
	
  	
  	
  	
  	
  	
  if	
  (TREE_CODE	
  (field)	
  ==	
  FIELD_DECL)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  fld_off	
  =	
  TREE_INT_CST_LOW	
  (DECL_FIELD_BIT_OFFSET	
  (field));	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  fld_size	
  =	
  TREE_INT_CST_LOW	
  (DECL_SIZE	
  (field));	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  if	
  (((fld_off	
  %	
  BITS_PER_UNIT)	
  !=	
  0)	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ||	
  ((fld_size	
  %	
  BITS_PER_UNIT)	
  !=	
  0))	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  /*	
  As	
  of	
  now	
  it	
  crashes	
  compilation.	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  TODO:	
  handle	
  bit-­‐fields	
  as	
  if	
  touching	
  the	
  whole	
  field.	
  	
  */	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return;	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  }	
  
	
  	
  /*	
  TODO:	
  handle	
  other	
  cases	
  
	
  	
  	
  	
  	
  (FIELD_DECL,	
  MEM_REF,	
  ARRAY_RANGE_REF,	
  TARGET_MEM_REF,	
  ADDR_EXPR).	
  	
  */	
  
	
  	
  if	
  (tcode	
  !=	
  ARRAY_REF	
  
	
  	
  	
  	
  	
  	
  &&	
  tcode	
  !=	
  VAR_DECL	
  &&	
  tcode	
  !=	
  COMPONENT_REF	
  
	
  	
  	
  	
  	
  	
  &&	
  tcode	
  !=	
  INDIRECT_REF	
  &&	
  tcode	
  !=	
  MEM_REF)	
  
	
  	
  	
  	
  return;	
  
	
  	
  func_mops++;	
  
	
  	
  stmt	
  =	
  gsi_stmt	
  (gsi);	
  
	
  	
  loc	
  =	
  gimple_location	
  (stmt);	
  
	
  	
  rhs	
  =	
  is_vptr_store	
  (stmt,	
  expr,	
  is_write);	
  
	
  	
  if	
  (rhs	
  ==	
  NULL)	
  
	
  	
  	
  	
  gs	
  =	
  instr_memory_access	
  (expr,	
  is_write);	
  
	
  	
  else	
  
	
  	
  	
  	
  gs	
  =	
  instr_vptr_update	
  (expr,	
  rhs);	
  
	
  	
  set_location	
  (gs,	
  loc);	
  
	
  	
  /*	
  Instrumentation	
  for	
  assignment	
  of	
  a	
  function	
  result	
  
	
  	
  	
  	
  	
  must	
  be	
  inserted	
  after	
  the	
  call.	
  	
  Instrumentation	
  for	
  
	
  	
  	
  	
  	
  reads	
  of	
  function	
  arguments	
  must	
  be	
  inserted	
  before	
  the	
  call.	
  
	
  	
  	
  	
  	
  That's	
  because	
  the	
  call	
  can	
  contain	
  synchronization.	
  	
  */	
  
	
  	
  if	
  (is_gimple_call	
  (stmt)	
  &&	
  is_write)	
  
	
  	
  	
  	
  gsi_insert_seq_after	
  (&gsi,	
  gs,	
  GSI_NEW_STMT);	
  
	
  	
  else	
  
	
  	
  	
  	
  gsi_insert_seq_before	
  (&gsi,	
  gs,	
  GSI_SAME_STMT);	
  
}
Luk et al. Pin: Building Customized Program
Analysis Tools w/ Dynamic Instrumentation PLDI ‘05
“Pin compiles from one ISA
directly into the same ISA
without going through an
intermediate format and
stored in a software-based
code cache”
“only code residing in the
code cache is executed - the
original code is never
executed.”

Recommended for you

Fallacy of Fast
Fallacy of FastFallacy of Fast
Fallacy of Fast

The document discusses common mistakes made when prioritizing speed over quality, such as de-emphasizing testing, releases, operations, insights, security, and knowledge. It recommends focusing on system design, configurations, limits, growth, processes, resources, and building resilience through redundancies and documentation. Testing the full system, having playbooks, and minding assumptions and dependencies are emphasized.

software developmentsoftware engineeringsoftware testing
Advanced VCL Workshop - Rogier Mulhuijzen and Stephen Basile at Fastly Altitu...
Advanced VCL Workshop - Rogier Mulhuijzen and Stephen Basile at Fastly Altitu...Advanced VCL Workshop - Rogier Mulhuijzen and Stephen Basile at Fastly Altitu...
Advanced VCL Workshop - Rogier Mulhuijzen and Stephen Basile at Fastly Altitu...

Fastly Altitude - June 25, 2015. Want to integrate Fastly with a paywall, or learn how to efficiently do a large amount of redirects from VCL? This workshop with Fastly engineers Rogier Mulhuijzen and Stephen Basile is a deep dive into six advanced use cases and the VCL needed for them. Rogier's bio: Rogier “Doc” Mulhuijzen is a Varnish wizard and senior professional services engineer at Fastly where he focuses on performance tuning and troubleshooting. When he’s not helping customers, he sits on the Varnish Governance Board, where he helps give direction and solve issues for the Varnish open source project. Formerly an Oracle DBA and Unix admin, Rogier learned scaling while working for Ziggo, a major Dutch ISP.

advanced vclfastly altitudevarnish
Rails Caching: Secrets From the Edge
Rails Caching: Secrets From the EdgeRails Caching: Secrets From the Edge
Rails Caching: Secrets From the Edge

This document discusses caching strategies for Rails applications, including: 1. Using Rails caching for queries, pages, assets, and fragments to improve performance. 2. Configuring Cache-Control headers, compression, and CDNs like Fastly for efficient caching. 3. Techniques for caching dynamic content at the edge using surrogate keys and purging cached responses.

content delivery networkcontent deliverycache dynamic content
Luk et al. Pin: Building Customized Program
Analysis Tools w/ Dynamic Instrumentation PLDI ‘05
“Pin compiles from one ISA
directly into the same ISA
without going through an
intermediate format”
movl	
  	
  	
  	
  $0x7,	
  -­‐0x8(%rbp)
addl	
  	
  	
  	
  $0x1,	
  -­‐0x8(%rbp)
mov	
  	
  	
  	
  	
  -­‐0x8(%rbp),	
  %eax
sub	
  	
  	
  	
  	
  $0x3,	
  %eax
mov	
  	
  	
  	
  	
  %eax,	
  -­‐0x4(%rbp)
mov	
  	
  	
  	
  	
  $0x4(%rbp),	
  %eax
add	
  	
  	
  	
  	
  %eax,	
  -­‐0x8(%rbp)
recordMemWrite(%rip,	
  -­‐0x8(%rbp))
recordMemWrite(%rip,	
  -­‐0x8(%rbp))
recordMemWrite(%rip,	
  -­‐0x4(%rbp))
recordMemWrite(%rip,	
  -­‐0x8(%rbp))
movl	
  	
  	
  	
  $0x7,	
  -­‐0x8(%rbp)
addl	
  	
  	
  	
  $0x1,	
  -­‐0x8(%rbp)
mov	
  	
  	
  	
  	
  -­‐0x8(%rbp),	
  %eax
sub	
  	
  	
  	
  	
  $0x3,	
  %eax
mov	
  	
  	
  	
  	
  %eax,	
  -­‐0x4(%rbp)
mov	
  	
  	
  	
  	
  $0x4(%rbp),	
  %eax
add	
  	
  	
  	
  	
  %eax,	
  -­‐0x8(%rbp)
code rewriting
push	
  	
  	
  %rbp	
  
mov	
  	
  	
  	
  %rsp,%rbp	
  
mov	
  	
  	
  	
  $0x100,%edi	
  
callq	
  	
  0x400430	
  <malloc@plt>	
  
mov	
  	
  	
  	
  %rax,0x200ac8(%rip)	
  
mov	
  	
  	
  	
  $0x0,%eax	
  
callq	
  	
  0x400540	
  <bar>	
  
pop	
  	
  	
  	
  %rbp	
  
retq
push	
  	
  	
  %rbp	
  
mov	
  	
  	
  	
  %rsp,%rbp	
  
sub	
  	
  	
  	
  $0x10,%rsp	
  
movq	
  	
  	
  $0x0,-­‐0x8(%rbp)	
  
mov	
  	
  	
  	
  -­‐0x8(%rbp),%rax	
  
add	
  	
  	
  	
  $0x1c,%rax	
  
mov	
  	
  	
  	
  %rax,0x200ae9(%rip)	
  
mov	
  	
  	
  	
  $0x0,%eax	
  
callq	
  	
  0x40052d	
  <baz>	
  
leaveq	
  
retq
push	
  	
  	
  %rbp	
  
mov	
  	
  	
  	
  %rsp,%rbp	
  
mov	
  	
  	
  	
  0x200b10(%rip),%rax	
  
movl	
  	
  	
  $0x2a,(%rax)	
  
pop	
  	
  	
  	
  %rbp	
  
retq
jump rewriting
push	
  	
  	
  %rbp	
  
mov	
  	
  	
  	
  %rsp,%rbp	
  
mov	
  	
  	
  	
  $0x100,%edi	
  
callq	
  	
  0x400430	
  <malloc@plt>	
  
mov	
  	
  	
  	
  %rax,0x200ac8(%rip)	
  
mov	
  	
  	
  	
  $0x0,%eax	
  
callq	
  	
  0x400540	
  <bar>	
  
pop	
  	
  	
  	
  %rbp	
  
retq
push	
  	
  	
  %rbp	
  
mov	
  	
  	
  	
  %rsp,%rbp	
  
sub	
  	
  	
  	
  $0x10,%rsp	
  
movq	
  	
  	
  $0x0,-­‐0x8(%rbp)	
  
mov	
  	
  	
  	
  -­‐0x8(%rbp),%rax	
  
add	
  	
  	
  	
  $0x1c,%rax	
  
mov	
  	
  	
  	
  %rax,0x200ae9(%rip)	
  
mov	
  	
  	
  	
  $0x0,%eax	
  
callq	
  	
  0x40052d	
  <baz>	
  
leaveq	
  
retq
push	
  	
  	
  %rbp	
  
mov	
  	
  	
  	
  %rsp,%rbp	
  
mov	
  	
  	
  	
  0x200b10(%rip),%rax	
  
movl	
  	
  	
  $0x2a,(%rax)	
  
pop	
  	
  	
  	
  %rbp	
  
retq
push	
  	
  	
  %rbp	
  
mov	
  	
  	
  	
  %rsp,%rbp	
  
mov	
  	
  	
  	
  $0x100,%edi	
  
callq	
  	
  0x400430	
  <malloc@plt>	
  
mov	
  	
  	
  	
  %rax,0x200ac8(%rip)	
  
mov	
  	
  	
  	
  $0x0,%wax	
  
callq	
  	
  0xdeadbeef	
  
pop	
  	
  	
  	
  %rbp	
  
retq
callq	
  	
  0x400540	
  <bar>callq	
  	
  0xdeadbeef
jump rewriting
push	
  	
  	
  %rbp	
  
mov	
  	
  	
  	
  %rsp,%rbp	
  
mov	
  	
  	
  	
  $0x100,%edi	
  
callq	
  	
  0x400430	
  <malloc@plt>	
  
mov	
  	
  	
  	
  %rax,0x200ac8(%rip)	
  
mov	
  	
  	
  	
  $0x0,%eax	
  
callq	
  	
  0x400540	
  <bar>	
  
pop	
  	
  	
  	
  %rbp	
  
retq
push	
  	
  	
  %rbp	
  
mov	
  	
  	
  	
  %rsp,%rbp	
  
sub	
  	
  	
  	
  $0x10,%rsp	
  
movq	
  	
  	
  $0x0,-­‐0x8(%rbp)	
  
mov	
  	
  	
  	
  -­‐0x8(%rbp),%rax	
  
add	
  	
  	
  	
  $0x1c,%rax	
  
mov	
  	
  	
  	
  %rax,0x200ae9(%rip)	
  
mov	
  	
  	
  	
  $0x0,%eax	
  
callq	
  	
  0x40052d	
  <baz>	
  
leaveq	
  
retq
push	
  	
  	
  %rbp	
  
mov	
  	
  	
  	
  %rsp,%rbp	
  
mov	
  	
  	
  	
  0x200b10(%rip),%rax	
  
movl	
  	
  	
  $0x2a,(%rax)	
  
pop	
  	
  	
  	
  %rbp	
  
retq
push	
  	
  	
  %rbp	
  
mov	
  	
  	
  	
  %rsp,%rbp	
  
mov	
  	
  	
  	
  $0x100,%edi	
  
callq	
  	
  0x400430	
  <malloc@plt>	
  
mov	
  	
  	
  	
  %rax,0x200ac8(%rip)	
  
mov	
  	
  	
  	
  $0x0,%eax	
  
callq	
  	
  0x400540	
  <bar>	
  
pop	
  	
  	
  	
  %rbp	
  
retq
push	
  	
  	
  %rbp	
  
mov	
  	
  	
  	
  %rsp,%rbp	
  
mov	
  	
  	
  	
  $0x100,%edi	
  
callq	
  	
  0x400430	
  <malloc@plt>	
  
mov	
  	
  	
  	
  %rax,0x200ac8(%rip)	
  
mov	
  	
  	
  	
  $0x0,%eax	
  
callq	
  	
  0x400540	
  <bar>	
  
pop	
  	
  	
  	
  %rbp	
  
retq
push	
  	
  	
  %rbp	
  
mov	
  	
  	
  	
  %rsp,%rbp	
  
sub	
  	
  	
  	
  $0x10,%rsp	
  
movq	
  	
  	
  $0x0,-­‐0x8(%rbp)	
  
mov	
  	
  	
  	
  -­‐0x8(%rbp),%rax	
  
add	
  	
  	
  	
  $0x1c,%rax	
  
mov	
  	
  	
  	
  %rax,0x200ae9(%rip)	
  
mov	
  	
  	
  	
  $0x0,%eax	
  
callq	
  	
  0xdeadbeef	
  
leaveq	
  
retq

Recommended for you

Building a better web
Building a better webBuilding a better web
Building a better web

On the eve of what was hoped to be of the biggest traffic days for New York Magazine’s sites, the company was the target of a DDoS attack that caused their sites to go dark. New York quickly turned to Fastly to deflect and overcome the attack. Larry discusses how New York Mag went from zero page views per second to getting back online and recording one of their biggest traffic days of the year with the aid of Fastly’s team and tech. In addition he discusses how New York is leveraging Fastly as part of a larger strategy of performance improvements to deliver the build a better web and deliver the best premium content experience in the context of alternative distribution and consumption channels, such as Google Amp and FB Instant Article.

content delivery networkdigital mediasoftware testing
The future of the edge
The future of the edge The future of the edge
The future of the edge

The internet and how people interact with content online has evolved, with event-driven and personalized experiences becoming more common. Content delivery networks (CDNs) are struggling to meet new demands. While edge computing addresses some issues, true personalization and interactivity require data as well. For the next phase of the internet, data must also move to the edge to power personalized, real-time experiences globally. However, distributing and keeping data consistent across all edge locations presents significant technical challenges.

cdnfuture of cdnsservers
Migrating Target to Fastly - Eddie Roger at Fastly Altitude 2015
Migrating Target to Fastly - Eddie Roger at Fastly Altitude 2015Migrating Target to Fastly - Eddie Roger at Fastly Altitude 2015
Migrating Target to Fastly - Eddie Roger at Fastly Altitude 2015

This document discusses how Target deployed Fastly in front of its existing infrastructure to speed up response times and give engineers control over caching without any downtime or production issues. It outlines the reasoning for using Fastly, including lightening the load on data centers and gaining control over caching and purging. It then details the plan, struggles, migration process, benefits, and future plans for using Fastly.

content delivery networkfastlytarget
jump rewriting
push	
  	
  	
  %rbp	
  
mov	
  	
  	
  	
  %rsp,%rbp	
  
mov	
  	
  	
  	
  $0x100,%edi	
  
callq	
  	
  0x400430	
  <malloc@plt>	
  
mov	
  	
  	
  	
  %rax,0x200ac8(%rip)	
  
mov	
  	
  	
  	
  $0x0,%eax	
  
callq	
  	
  0x400540	
  <bar>	
  
pop	
  	
  	
  	
  %rbp	
  
retq
push	
  	
  	
  %rbp	
  
mov	
  	
  	
  	
  %rsp,%rbp	
  
sub	
  	
  	
  	
  $0x10,%rsp	
  
movq	
  	
  	
  $0x0,-­‐0x8(%rbp)	
  
mov	
  	
  	
  	
  -­‐0x8(%rbp),%rax	
  
add	
  	
  	
  	
  $0x1c,%rax	
  
mov	
  	
  	
  	
  %rax,0x200ae9(%rip)	
  
mov	
  	
  	
  	
  $0x0,%eax	
  
callq	
  	
  0x40052d	
  <baz>	
  
leaveq	
  
retq
push	
  	
  	
  %rbp	
  
mov	
  	
  	
  	
  %rsp,%rbp	
  
mov	
  	
  	
  	
  0x200b10(%rip),%rax	
  
movl	
  	
  	
  $0x2a,(%rax)	
  
pop	
  	
  	
  	
  %rbp	
  
retq
push	
  	
  	
  %rbp	
  
mov	
  	
  	
  	
  %rsp,%rbp	
  
mov	
  	
  	
  	
  $0x100,%edi	
  
callq	
  	
  0x400430	
  <malloc@plt>	
  
mov	
  	
  	
  	
  %rax,0x200ac8(%rip)	
  
mov	
  	
  	
  	
  $0x0,%eax	
  
callq	
  	
  0x400540	
  <bar>	
  
pop	
  	
  	
  	
  %rbp	
  
retq
push	
  	
  	
  %rbp	
  
mov	
  	
  	
  	
  %rsp,%rbp	
  
mov	
  	
  	
  	
  $0x100,%edi	
  
callq	
  	
  0x400430	
  <malloc@plt>	
  
mov	
  	
  	
  	
  %rax,0x200ac8(%rip)	
  
mov	
  	
  	
  	
  $0x0,%eax	
  
callq	
  	
  0x400540	
  <bar>	
  
pop	
  	
  	
  	
  %rbp	
  
retq
push	
  	
  	
  %rbp	
  
mov	
  	
  	
  	
  %rsp,%rbp	
  
sub	
  	
  	
  	
  $0x10,%rsp	
  
movq	
  	
  	
  $0x0,-­‐0x8(%rbp)	
  
mov	
  	
  	
  	
  -­‐0x8(%rbp),%rax	
  
add	
  	
  	
  	
  $0x1c,%rax	
  
mov	
  	
  	
  	
  %rax,0x200ae9(%rip)	
  
mov	
  	
  	
  	
  $0x0,%eax	
  
callq	
  	
  0x40052d	
  <baz>	
  
leaveq	
  
retq
push	
  	
  	
  %rbp	
  
mov	
  	
  	
  	
  %rsp,%rbp	
  
mov	
  	
  	
  	
  0x200b10(%rip),%rax	
  
movl	
  	
  	
  $0x2a,(%rax)	
  
pop	
  	
  	
  	
  %rbp	
  
retq
stateless(ish) instrumentation
https://software.intel.com/sites/landingpage/pintool/docs/67254/Pin/html/index.html#EXAMPLES
Nethercote et al. Valgrind: A Framework for
Heavyweight Dynamic Binary Instrumentation PLDI ‘07
“which values are undefined (i.e.
uninitialised, or derived from
undefined values) and can thus
detect dangerous uses of
undefined values.”
“which values are tainted (i.e.
from an untrusted source,) and
can thus detect dangerous uses of
tainted values.”
“which word values are array
pointers, and from this can detect
bounds errors.”
Nethercote et al. Valgrind: A Framework for
Heavyweight Dynamic Binary Instrumentation PLDI ‘07
One interesting group of
DBA tools are those that
use shadow values. These
tools shadow, purely in
software, every register and
memory value with another
value that says something
about it. We call these
shadow value tools.

Recommended for you

From Zero to Capacity Planning
From Zero to Capacity PlanningFrom Zero to Capacity Planning
From Zero to Capacity Planning

From Zero to Capacity Planning is a journey of discovery about capacity planning. Key learnings include defining your system's architecture and metrics, using historical data to predict future capacity needs, and ensuring capacity expansions don't disrupt service. While challenging, capacity planning is important for understanding constraints and proactively managing system growth. Both capacity and optimizations must be addressed through formal planning and an organized team effort.

content delivery networkcapacity planningcontent delivery
Making ops life easier
Making ops life easierMaking ops life easier
Making ops life easier

Carmen Sarlo Principal Operations Engineer, Vox Media at Fastly Altitude 2016 Fastly’s API has provided us the ability to create tooling for any member of the team to use and feel confident to roll out changes. Some of our tooling using Fastly’s API is done by chat-ops or integrated workflow through Jenkins. Making edge tasks easier for other team members, makes a happier engineering staff.

opsdevopsengineering
Debugging Your CDN - Austin Spires at Fastly Altitude 2015
Debugging Your CDN - Austin Spires at Fastly Altitude 2015Debugging Your CDN - Austin Spires at Fastly Altitude 2015
Debugging Your CDN - Austin Spires at Fastly Altitude 2015

Fastly Altitude - June 25, 2015. Austin Spires, Lead Customer Engineer at Fastly, covers how to use curl tricks, Varnish logging, and web services to identify and debug issues. Video of the talk: http://fastly.us/Altitude2015_Debugging-Your-CDN Austin's bio: Austin Spires is a lead customer engineer at Fastly. He’s been working on developer tools and customer happiness for five years, and frequently speaks at conferences and meetups. Recently, he’s been blogging about how Fastly scales its support infrastructure. Before Fastly, Austin worked in sales and support at GitHub, where he helped lead customer onboarding. Originally from Texas, Austin plays a mean bass and likes drinking cheap beer.

debuggingcustomer engineeringvarnish
<value>
<value>
<value>
<value>
<value>
<value>
<value>
<value>
<value>
<value>
<value>
<value>0x08048000
0x08048001
0x08048002
0xc000000
.
.
.
<value>
<value>
<value>
<value>
<value>
<value>
<value>
<value>
<value>
<value>
<value>
<value>0x08048000
0x08048001
0x08048002
0xc000000
.
.
.
<metadata>
<metadata>
<metadata>
<metadata>
<metadata>
<metadata>
<metadata>
<metadata>
<metadata>
<metadata>
<metadata>
<metadata> 0x08048000
0x08048001
0x08048002
0xc000000
.
.
.
Nethercote et al. Valgrind: A Framework for
Heavyweight Dynamic Binary Instrumentation PLDI ‘07
One interesting group of
DBA tools are those that
use shadow values. These
tools shadow, purely in
software, every register and
memory value with another
value that says something
about it. We call these
shadow value tools.
0xc000000
memcheck/mc_main.c

Recommended for you

Resource Allocation in Computer Networks
Resource Allocation in Computer NetworksResource Allocation in Computer Networks
Resource Allocation in Computer Networks

João tells us "Resource allocation in computer networks is notoriously hard - it took over twenty years to find something that works, and jury is out as to whether we'll ever find something that works properly. In a rollercoaster ride of historical revisionism, this talk will cover the evolution of resource allocation as applied to networking, and provide context for the mess we're currently in" [1] Paul Baran - On Distributed Communications - https://www.rand.org/content/dam/rand/pubs/research_memoranda/2006/RM3420.pdf [2] V. Cerf and R. Kahn - A protocol for packet network intercommunication - https://www.cs.princeton.edu/courses/archive/fall06/cos561/papers/cerf74.pdf [3] Van Jacobson - Congestion avoidance and control - http://ee.lbl.gov/papers/congavoid.pdf [4] Bob Briscoe - Flow Rate Fairness: Dismantling a Religion - http://pbg.cs.illinois.edu/courses/cs598fa09/readings/b07.pdf João's Bio João Taveira is a network engineer at Fastly, where he is responsible for making dumb switches do clever things. In addition to writing software for network orchestration, Joao works on protocol design and performance, and holds a PhD from University College London on something to that effect.

softwarecloud computingnetwork
Static analysis of C++ source code
Static analysis of C++ source codeStatic analysis of C++ source code
Static analysis of C++ source code

We all make mistakes while programming and spend a lot of time fixing them. One of the methods which allows for quick detection of defects is source code static analysis.

code reviewcpvs-studio
Static analysis of C++ source code
Static analysis of C++ source codeStatic analysis of C++ source code
Static analysis of C++ source code

We all make mistakes while programming and spend a lot of time fixing them. One of the methods which allows for quick detection of defects is source code static analysis.

0xc000000
memcheck/mc_main.c
set? set? set? set? set? set? set? set?
0xc000000
memcheck/mc_main.c
set? set? set? set? set? set? set? set?valid?
0xc000000
memcheck/mc_main.c
set? set? set? set? set? set? set? set?valid?
Nethercote et al. Valgrind: A Framework for
Heavyweight Dynamic Binary Instrumentation PLDI ‘07

Recommended for you

Beyond Breakpoints: A Tour of Dynamic Analysis
Beyond Breakpoints: A Tour of Dynamic AnalysisBeyond Breakpoints: A Tour of Dynamic Analysis
Beyond Breakpoints: A Tour of Dynamic Analysis

Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/2dXUUTG. Nathan Taylor provides an introduction to the dynamic analysis research space, suggesting integrating these techniques into various internal tools. Filmed at qconnewyork.com. Nathan Taylor is a software developer currently employed at Fastly, where he works on making the Web faster through high performance content delivery. Previous gigs have included hacking on low-level systems software such as Java runtimes at Twitter and, prior to that, the Xen virtual machine monitor in grad school.

infoqqcon new yorkqcon
Skiron - Experiments in CPU Design in D
Skiron - Experiments in CPU Design in DSkiron - Experiments in CPU Design in D
Skiron - Experiments in CPU Design in D

This document discusses Skiron, an experimental CPU design project implemented in the D programming language. It provides an overview of Skiron, which simulates a RISC-inspired instruction set architecture. It describes the idioms and patterns used in D to define the instruction set and encoding in a way that is self-documenting and allows different parts of the software to stay in sync. It also discusses lessons learned, such as issues with delegates, as well as potential improvements to D's metaprogramming capabilities and standard library support for @nogc code. Realizing Skiron in hardware with an FPGA and making it self-hosting are presented as future goals.

C programming language tutorial
C programming language tutorial C programming language tutorial
C programming language tutorial

The document provides an overview of the C programming language. It states that C was developed in 1972 by Dennis Ritchie at Bell Labs and was used to develop the UNIX operating system. The document then covers various features of C like it being a mid-level programming language, having structured programming, pointers, loops, functions, arrays, and more. It provides examples to explain concepts like input/output functions, data types, operators, control structures, and pointers.

c programming tutorialc language tutorial ppt
Nethercote et al. Valgrind: A Framework for
Heavyweight Dynamic Binary Instrumentation PLDI ‘07
disassemble-and-
resynthesise: machine code is
converted to an IR in which each
instruction becomes one or more
IR operations. This IR is
instrumented and then converted
back to machine code.
copy-and-annotate: incoming
instructions are copied through
verbatim except for necessary
control flow changes. Tools use
the annotations to guide their
instrumentation.
Nethercote et al. Valgrind: A Framework for
Heavyweight Dynamic Binary Instrumentation PLDI ‘07
“Pin provides no built-in support
for [shadow memory], so tools
must cope with the non-atomicity
of loads/stores and shadow
loads/stores themselves.”



“Valgrind’s thread serialisation
and asynchronous signal
treatment frees shadow value
tools from having to deal with this
issue.”
Luk et al. Pin: Building Customized Program
Analysis Tools w/ Dynamic Instrumentation PLDI ‘05
“in Figure 7(b), Pin
outperforms both
DynamoRIO and
Valgrind by a significant
margin: on average,
Valgrind slows the
application down by 8.3
times […] and Pin by 2.5
times.”
Pin: a “copy and annotate” system
Lower overhead than the alternatives
Close-to-the-metal instrumentation API
Best for tracking control flow, rather than memory
+
+
-
Valgrind: a “disassemble and resynthsize” system
Richer API and shadow memory allows for per-memory word
metadata tracking
Greater runtime overhead
+
-

Recommended for you

Virtual platform
Virtual platformVirtual platform
Virtual platform

This document discusses building a virtual platform for the OpenRISC architecture using SystemC and transaction-level modeling. It covers setting up the toolchain, writing test programs, and simulating the platform using event-driven or cycle-accurate simulation with Icarus Verilog or the Vorpsoc simulator. The virtual platform allows fast development and debugging of OpenRISC code without requiring physical hardware.

PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...
PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...
PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...

PVS-Studio is a static analyzer that detects errors in source code of C, C++, C++11, C++/CX applications.

c++cppc++11
Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...
Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...
Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...

Charlie Miller and Vincenzo Iozzo presented techniques for post-exploitation on the iPhone 2 including: 1. Running arbitrary shellcode by overwriting memory protections and calling vm_protect to mark pages as read/write/executable. 2. Loading an unsigned dynamic library called Meterpreter by mapping it over an existing signed library, patching dyld to ignore code signing, and forcing unloaded of linked libraries. 3. Adding new functionality to Meterpreter, such as a module to vibrate and play a sound on the iPhone, demonstrating how payloads can be extended once loaded into memory.

charlie millerblack hatvincenzo iozzo
State tracking
in practice
problem statement
“What values did a piece of memory
have over time?”
“How does a value propagate
through a running system?”
Chow et al. Understanding Data Lifetime via Whole
System Simulation USENIX Sec ‘04
TaintBochs tracks sensitive
data by “tainting” it at the
hardware level. Tainting
information is then
propagated across operating
system, language, and
application boundaries,
permitting analysis of
sensitive data handling at a
whole system level.
Chow et al. Understanding Data Lifetime via Whole
System Simulation USENIX Sec ‘04
We have used TaintBochs
to analyze sensitive data
handling in several large,
real world applications.
Among these were Mozilla,
Apache, and Perl, which
are used to process
millions of passwords,
credit card numbers, etc.
on a daily basis.

Recommended for you

CGI.ppt
CGI.pptCGI.ppt
CGI.ppt

This document discusses common gateway interface (CGI) programming and server-side programming. It provides examples of CGI programs written in C to multiply two numbers submitted through an HTML form using GET and POST methods. It discusses how CGI works, including getting environment variables and user input. Some disadvantages of CGI include spawning new processes for each request and security issues. It suggests using server-side scripting languages like PHP for more efficient and secure server-side programming.

cgi
Exploiting vectorization with ISPC
Exploiting vectorization with ISPCExploiting vectorization with ISPC
Exploiting vectorization with ISPC

1) ISPC (Intel SPMD Program Compiler) is a language that extends C with "single program, multiple data" constructs to enable easy vectorization of code. It describes the behavior of a single program instance while executing a "gang" of instances in parallel. 2) ISPC was shown to provide significant speedups (up to 5x) over non-vectorized C/C++ code for problems like matrix multiplication and Kalman filtering. 3) While OpenCL can also enable vectorization, ISPC offers advantages like explicit control over vectorized vs serial code, performance warnings, and easier composition with task schedulers than OpenCL.

vectorizationavxavx2
LSFMM 2019 BPF Observability
LSFMM 2019 BPF ObservabilityLSFMM 2019 BPF Observability
LSFMM 2019 BPF Observability

Here is a bpftrace program to measure scheduler latency for ICMP echo requests: #!/usr/local/bin/bpftrace kprobe:icmp_send { @start[tid] = nsecs; } kprobe:__netif_receive_skb_core { @diff[tid] = hist(nsecs - @start[tid]); delete(@start[tid]); } END { print(@diff); clear(@diff); } This traces the time between the icmp_send kernel function (when the packet is queued for transmit) and the __netif_receive_skb_core function (when the response packet is received). The

bpfebpflinu
Chow et al. Understanding Data Lifetime via Whole
System Simulation USENIX Sec ‘04
“We must decide how
operations in the system
should affect shadow state.
If two registers A and B are
added, and one of them is
tainted, is the register where
the result are stored also
tainted? We refer to the
collective set of policies that
decide this as the
propagation policy.”
Chow et al. Understanding Data Lifetime via Whole
System Simulation USENIX Sec ‘04
“ Our basic propagation
policy is simply that if
any byte of any input
value is tainted, then all
bytes of the output are
tainted. This policy
is clearly conservative
and errs on the side of
tainting too much.”
Chow et al. Understanding Data Lifetime via Whole
System Simulation USENIX Sec ‘04
“ Sometimes tainted values are
used by instructions as indexes
into non-tainted memory (i.e. as
an index into a lookup table).”
For example, Linux routinely
remaps keyboard device data
through a lookup table before
sending keystrokes to user
programs. Thus, user programs
never directly see the data read in
from the keyboard device, only the
non tainted values they index in
the kernel’s key remapping
table.”
methodology
shadow memory to track
information flow
time-traveling debugging to
uncover relationship between
tainted memory

Recommended for you

PVS-Studio, a solution for resource intensive applications development
PVS-Studio, a solution for resource intensive applications developmentPVS-Studio, a solution for resource intensive applications development
PVS-Studio, a solution for resource intensive applications development

PVS-Studio is a static code analyzer designed for developers of state-of-the-art resource-intensive applications.

64bitsopenmpcplusplus
RxJava on Android
RxJava on AndroidRxJava on Android
RxJava on Android

An exploration into RxJava on Android for the experienced, yet uninitiated software engineer. This presentation explores Declarative vs Imperative programming paradigms and expands the discussion into Functional Reactive Programming. It explains the benefits of the observer contract, high-order functions, and schedulers available in RxJava. It also explains the purpose of the Android integration libraries: RxAndroid, RxLifecycle, and RxBindings.

rxandroidandroidrxbinding
Linux kernel tracing superpowers in the cloud
Linux kernel tracing superpowers in the cloudLinux kernel tracing superpowers in the cloud
Linux kernel tracing superpowers in the cloud

The Linux 4.x series introduced a new powerful engine of programmable tracing (BPF) that allows to actually look inside the kernel at runtime. This talk will show you how to exploit this engine in order to debug problems or identify performance bottlenecks in a complex environment like a cloud. This talk will cover the latest Linux superpowers that allow to see what is happening “under the hood” of the Linux kernel at runtime. I will explain how to exploit these “superpowers” to measure and trace complex events at runtime in a cloud environment. For example, we will see how we can measure latency distribution of filesystem I/O, details of storage device operations, like individual block I/O request timeouts, or TCP buffer allocations, investigating stack traces of certain events, identify memory leaks, performance bottlenecks and a whole lot more.

linuxprofilingtracing
experiment: mozilla
Slowinska & Bos: Pointless Tainting? Evaluating the
Practicality of Pointer Tainting Eurosys ‘09
Slowinska & Bos: Pointless Tainting? Evaluating the
Practicality of Pointer Tainting Eurosys ‘09
“…in-depth analysis of the
problems of pointer tainting
on real systems which shows
that it does not work against
malware spying on users’
behaviour”
“an analysis and evaluation
of all known fixes to the
problems that shows that
they all have serious
shortcomings.”
Slowinska & Bos: Pointless Tainting? Evaluating the
Practicality of Pointer Tainting Eurosys ‘09

Recommended for you

Virtual training Intro to Kapacitor
Virtual training  Intro to Kapacitor Virtual training  Intro to Kapacitor
Virtual training Intro to Kapacitor

A detailed overview of Kapacitor, InfluxDB’s native data processing engine. How to install, configure and build custom TICKscripts enable alerting and anomaly detection

kapacitorinfluxdbinfluxdata
Pragmatic Optimization in Modern Programming - Demystifying the Compiler
Pragmatic Optimization in Modern Programming - Demystifying the CompilerPragmatic Optimization in Modern Programming - Demystifying the Compiler
Pragmatic Optimization in Modern Programming - Demystifying the Compiler

This document discusses compiler optimizations. It begins with an outline of topics including compilation trajectory, intermediate languages, optimization levels, and optimization techniques. It then provides more details on each phase of compilation, how compilers use intermediate representations to perform optimizations, and specific optimizations like common subexpression elimination, constant propagation, and instruction scheduling.

optimization levelssoftware optimizationcompiler
ExperiencesSharingOnEmbeddedSystemDevelopment_20160321
ExperiencesSharingOnEmbeddedSystemDevelopment_20160321ExperiencesSharingOnEmbeddedSystemDevelopment_20160321
ExperiencesSharingOnEmbeddedSystemDevelopment_20160321

This document discusses embedded system development. It begins with definitions of embedded systems and some of their common characteristics like limited resources and real-time constraints. It then discusses specific issues like memory alignment, flash and RAM sizes, and performance optimizations. Examples are given of embedded projects like digital video recorders and how to address issues like file sorting, memory usage and stack overflows. The conclusion emphasizes that embedded systems involve knowledge from many technical fields and stresses the importance of experience, observation, and a positive problem-solving attitude.

Analyzing
Concurrent
Systems
King et al. Debugging Operating Systems
with Time-Traveling Virtual Machines
Usenix ‘05
“Replay causes the virtual
machine to transition through
the same states as it went
through during the original run”
“A virtual machine can be
replayed by starting from a
checkpoint, then replaying all
sources of nondeterminism […]
the network, keyboard, clock,
and timing of interrupts”
Sequential
problem statement
“how to build a dynamic analysis tool
that correctly runs in a concurrent
environment?”
“What challenges does concurrent
software have that dynamic analysis
could help with?”
concurrent record & replay
use locking operations as sequencing
points
use virtual memory page protection
(come up with ideas for custom
hardware)

Recommended for you

Pascal script maxbox_ekon_14_2
Pascal script maxbox_ekon_14_2Pascal script maxbox_ekon_14_2
Pascal script maxbox_ekon_14_2

PascalScript is a scripting engine that allows scripts written in Object Pascal to be executed at runtime in Delphi and Free Pascal applications. It provides advantages like allowing customization without recompiling and updating applications by distributing new script files. The engine works by compiling scripts to bytecode using a compiler component, and executing the bytecode using an executer component. It supports common data types, functions, classes, and calling external libraries.

codemaxboxscripts
grsecurity and PaX
grsecurity and PaXgrsecurity and PaX
grsecurity and PaX

In this talk, Gil Yankovitch discusses the PaX patch for the Linux kernel, focusing on memory manager changes and security mechanisms for memory allocations, reads, writes from user/kernel space and ASLR.

securitykerneltlvelf
Stranger in These Parts. A Hired Gun in the JS Corral (JSConf US 2012)
Stranger in These Parts. A Hired Gun in the JS Corral (JSConf US 2012)Stranger in These Parts. A Hired Gun in the JS Corral (JSConf US 2012)
Stranger in These Parts. A Hired Gun in the JS Corral (JSConf US 2012)

This document summarizes Andy Wingo's talk at JSConf 2012 about his work on the JavaScriptCore engine. It discusses the different tiers of just-in-time compilation in JSC, including the low-level interpreter (LLInt), baseline JIT, and optimizing DFG JIT. It also covers techniques like lazy compilation, inline caching, and value profiling that JSC uses to improve performance. Finally, it mentions parallel garbage collection and how the engine is ported to different platforms.

Nethercote et al. Valgrind: A Framework for
Heavyweight Dynamic Binary Instrumentation PLDI ‘07
“Valgrind serialises thread
execution with a thread locking
mechanism. Only the thread
holding the lock can run,”
“The kernel still chooses which
thread is to run next, but Valgrind
dictates when thread-switches
occur and prevents more than one
thread from running at a time.”
“How to best overcome this
problem remains an open
research question.”
Savage et al: Eraser: A Dynamic Data Race
Detector for Multithreaded Programs
SOSP ‘97
Savage et al: Eraser: A Dynamic Data Race
Detector for Multithreaded Programs
SOSP ‘97
“Eraser instruments
each call to acquire or
release a lock”
Dunlap et al: Execution Replay for
Multiprocessor Virtual Machines
VEE ‘08

Recommended for you

Revisiting HTTP/2
Revisiting HTTP/2Revisiting HTTP/2
Revisiting HTTP/2

RFC 7540 was ratified over 2 years ago and, today, all major browsers, servers, and CDNs support the next generation of HTTP. Just over a year ago, at Velocity, we discussed the protocol, looked at some real world implications of its deployment and use, and what realistic expectations we should have from its use. Now that adoption is ramped up and the protocol is being regularly used on the Internet, it's a good time to revisit the protocol and its deployment. Has it evolved? Have we learned anything? Are all the features providing the benefits we were expecting? What's next?In this session, we'll review protocol basics and try to answer some of these questions based on real-world use of it. We'll dig into the core features like interaction with TCP, server push, priorities and dependencies, and HPACK. We'll look at these features through the lens of experience and see if good practice patterns have emerged. We'll also review available tools and discuss what protocol enhancements are in the near and not-so-near horizon.

http2cdnfuture of cdns
Altitude San Francisco 2018: Preparing for Video Streaming Events at Scale
Altitude San Francisco 2018: Preparing for Video Streaming Events at ScaleAltitude San Francisco 2018: Preparing for Video Streaming Events at Scale
Altitude San Francisco 2018: Preparing for Video Streaming Events at Scale

CBS Interactive streams some of the largest video streaming events on the planet, including SuperBowl in 2019. This talk will focus on all the work that goes in ahead of time to prepare and plan for game day. From architecture design to capacity reservations to operational visibility and building playbooks we will explore how we build, test and prepare for these large events. We will also explore how some of Fastly's unique features such as MediaShield and VCL are becoming critical to these workflows.

Altitude San Francisco 2018: Building the Souther Hemisphere of the Internet
Altitude San Francisco 2018: Building the Souther Hemisphere of the InternetAltitude San Francisco 2018: Building the Souther Hemisphere of the Internet
Altitude San Francisco 2018: Building the Souther Hemisphere of the Internet

As a global organization, Fastly carefully selects and deploys POP locations to service the greater audience of the Internet. Fastly currently has 52 global POPs across the Internet, 13 of which are located in the Southern Hemisphere. Another 3 are outside North America, Europe, and Asia. During this talk, VP of Infrastructure Tom Daly will share our experience in building Fastly's network of POPs south of the equator, where, in some cases, the Internet we know here in San Francisco, is much different. Tom will explore the physical datacenter infrastructure, network topology, and network policy that pose of unique challenges when operating in these parts of the world.

Dunlap et al: Execution Replay for
Multiprocessor Virtual Machines
VEE ‘08
“if two memory instructions on
different processors access the
same page, and one of them is a
write, there will be a CREW
event between the instructions
on each processor.”
• concurrent-read: All cpus
have read permission, but none
have write permission.
• exclusive-write: One cpu
(called the owner) has both read
and write permission; all virtual
cpus have no permission.
Dunlap et al: Execution Replay for
Multiprocessor Virtual Machines
VEE ‘08
“we use hardware page
protections, enforced
by the memory
management unit
(MMU), which will
check each read and
write as the instruction
executes, and cause a
fault to the hypervisor
on any violation.”
Dunlap et al: Execution Replay for
Multiprocessor Virtual Machines
VEE ‘08
“if two memory instructions on
different processors access the
same page, and one of them is a
write, there will be a CREW
event between the instructions
on each processor.”
• concurrent-read: All cpus
have read permission, but none
have write permission.
• exclusive-write: One cpu
(called the owner) has both read
and write permission; all virtual
cpus have no permission.
CREW limitations
virtual memory hardware only
operates on 4k blocks
DMA not implemented in the paper
10x slowdown in the worst case!

Recommended for you

Altitude San Francisco 2018: The World Cup Stream
Altitude San Francisco 2018: The World Cup StreamAltitude San Francisco 2018: The World Cup Stream
Altitude San Francisco 2018: The World Cup Stream

FuboTV’s recent offering of the 2018 FIFA World Cup broke all of our previous records for viewership and put our systems to the test as we delivered all 64 matches live. Coverage for a majority of games was spread out across ~150 regional sports networks, local FOX affiliates, owned and operated regional stations and other local FOX offerings, with a few early matches broadcasted on national channels. Running a successful World Cup required us to pay close attention to our caching strategies, delivery mechanisms, content edge-case handling and more. An event at this scale, spread out over a month, also gave us an excellent test bed to run experiments. We were able to augment our last-mile delivery, test/tweak our solution for CDN decisioning/priority, and even stand up a set of UHD HDR10 feeds to give our users their first glimpse of live OTT UHD offerings. We’ll run through this whole event from a scale and technology perspective and share our takeaways as we prepare for the upcoming NFL season and beyond.

Altitude San Francisco 2018: We Own Our Destiny
Altitude San Francisco 2018: We Own Our DestinyAltitude San Francisco 2018: We Own Our Destiny
Altitude San Francisco 2018: We Own Our Destiny

1) CNN adopted GraphQL in 2016 to improve page load speeds by allowing clients to request specific data fields rather than entire documents, reducing response sizes by over 90% in some cases. 2) CNN later developed its own Data API using GraphQL and saw request volumes increase to over 7 million per hour with an 89% cache hit rate. 3) For live storytelling, CNN chose to implement Server-Sent Events which allows for near real-time updates without polling by allowing servers to push messages to clients as new data becomes available.

Altitude San Francisco 2018: Scale and Stability at the Edge with 1.4 Billion...
Altitude San Francisco 2018: Scale and Stability at the Edge with 1.4 Billion...Altitude San Francisco 2018: Scale and Stability at the Edge with 1.4 Billion...
Altitude San Francisco 2018: Scale and Stability at the Edge with 1.4 Billion...

Braze is a customer engagement platform that delivers more than a billion messaging experiences across push, email, apps and more each day. In this session, Jon Hyman will describe the company's challenges during an inflection point in 2015 when the company reached the limitation of their physical networking equipment, and how Braze has since grown more than 7x on Fastly. Jon will also discuss how Braze uses Fastly's Layer 7 load balancing to improve stability and uptime of its APIs.

Beyond Breakpoints: A Tour of Dynamic Analysis
Race detection
race detection techiques
Lockset algorithm
Happens-before relation
Hybrid techniques
examples from https://github.com/google/sanitizers/wiki/ThreadSanitizerPopularDataRaces
int	
  var;	
  
void	
  Thread1()	
  {	
  	
  //	
  Runs	
  in	
  one	
  thread.	
  
	
  	
  var++;	
  
}	
  
void	
  Thread2()	
  {	
  	
  //	
  Runs	
  in	
  another	
  thread.	
  
	
  	
  var++;	
  
}	
  

Recommended for you

Altitude San Francisco 2018: Moving Off the Monolith: A Seamless Migration
Altitude San Francisco 2018: Moving Off the Monolith: A Seamless MigrationAltitude San Francisco 2018: Moving Off the Monolith: A Seamless Migration
Altitude San Francisco 2018: Moving Off the Monolith: A Seamless Migration

In this talk, Jeff Valeo from Grubhub will talk about how they leveraged Fastly to slowly migrate user traffic from a legacy monolith to a new, service-based architecture. This solution allowed Grubhub to shift millions of users as new functionality was built with zero downtime.

Altitude San Francisco 2018: Bringing TLS to GitHub Pages
Altitude San Francisco 2018: Bringing TLS to GitHub PagesAltitude San Francisco 2018: Bringing TLS to GitHub Pages
Altitude San Francisco 2018: Bringing TLS to GitHub Pages

Sam Kottler, SRE Engineering Manager at GitHub will dig into how they rearchitected Pages, so that custom domains now support HTTPS, meaning over a million GitHub Pages sites will be served over HTTPS.

Altitude San Francisco 2018: HTTP Invalidation Workshop
Altitude San Francisco 2018: HTTP Invalidation WorkshopAltitude San Francisco 2018: HTTP Invalidation Workshop
Altitude San Francisco 2018: HTTP Invalidation Workshop

One of the most powerful tools that Fastly offers is worldwide, instant purge. Come learn the ins and outs of how HTTP invalidation works in general and how purge and surrogate keys can be used to improve your site's delivery and get even more value from Fastly. This talk will also cover the purge blast radius Surrogate Keys are an amazing way to purge your content from cache, but they can be a bit scary when you aren't sure how many URLs this surrogate key is tied to or what kind of affect this will have on origin. Join the USA Today Network as we explain how we leverage big data tools, Go APIs, New Relic, and Sumo Logic to provide our users a suite of tools for purging content from Fastly. Developers love knowing the blast radius of their surrogate keys, while our engineers love the real-time metrics and notifications we get when developers are hard-purging content.

examples from https://github.com/google/sanitizers/wiki/ThreadSanitizerPopularDataRaces
//	
  Ref()	
  and	
  Unref()	
  may	
  be	
  called	
  from	
  several	
  threads.	
  
//	
  Last	
  Unref()	
  destroys	
  the	
  object.	
  
class	
  RefCountedObject	
  {	
  
	
  ...	
  
	
  public:	
  
	
  	
  void	
  Ref()	
  {	
  
	
  	
  	
  	
  ref_++;	
  	
  //	
  Bug!	
  
	
  	
  }	
  
	
  	
  void	
  Unref()	
  {	
  
	
  	
  	
  	
  if	
  (-­‐-­‐ref_	
  ==	
  0)	
  	
  //	
  Bug!	
  Need	
  to	
  use	
  atomic	
  decrement!	
  
	
  	
  	
  	
  	
  	
  delete	
  this;	
  
	
  	
  }	
  
	
  private:	
  
	
  	
  int	
  ref_;	
  
};
examples from https://github.com/google/sanitizers/wiki/ThreadSanitizerPopularDataRaces
bool	
  done	
  =	
  false;	
  
void	
  Thread1()	
  {	
  
	
  	
  while	
  (!done)	
  {	
  
	
  	
  	
  	
  do_something_useful_in_a_loop_1();	
  
	
  	
  }	
  	
  
	
  	
  do_thread1_cleanup();	
  
}	
  
void	
  Thread2()	
  {	
  
	
  	
  do_something_useful_2();	
  
	
  	
  done	
  =	
  true;	
  
	
  	
  do_thread2_cleanup();	
  
}
examples from https://github.com/google/sanitizers/wiki/ThreadSanitizerPopularDataRaces
bool	
  done	
  =	
  false;	
  
void	
  Thread1()	
  {	
  
	
  	
  while	
  (!done)	
  {	
  
	
  	
  	
  	
  do_something_useful_in_a_loop_1();	
  
	
  	
  }	
  	
  
	
  	
  do_thread1_cleanup();	
  
}	
  
void	
  Thread2()	
  {	
  
	
  	
  do_something_useful_2();	
  
	
  	
  done	
  =	
  true;	
  
	
  	
  do_thread2_cleanup();	
  
}
examples from https://github.com/google/sanitizers/wiki/ThreadSanitizerPopularDataRaces
bool	
  done	
  =	
  false;	
  
void	
  Thread1()	
  {	
  
	
  	
  while	
  (!done)	
  {	
  
	
  	
  	
  	
  do_something_useful_in_a_loop_1();	
  
	
  	
  }	
  	
  
	
  	
  do_thread1_cleanup();	
  
}	
  
void	
  Thread2()	
  {	
  
	
  	
  done	
  =	
  true;	
  
	
  	
  do_something_useful_2();	
  
	
  	
  do_thread2_cleanup();	
  
}

Recommended for you

Altitude San Francisco 2018: HTTP/2 Tales: Discovery and Woe
Altitude San Francisco 2018: HTTP/2 Tales: Discovery and WoeAltitude San Francisco 2018: HTTP/2 Tales: Discovery and Woe
Altitude San Francisco 2018: HTTP/2 Tales: Discovery and Woe

HTTP/2 initially seemed promising for reducing latency, but caused intermittent slowdowns for the client's critical assets. Testing revealed HTTP/2 increased median page latency by 20-30% compared to HTTP/1.1. While HTTP/2 performs well in some scenarios, it was not suitable for delivering critical assets globally due to variance issues. Over time the performance of HTTP/2 has improved, but introducing artificial latency still results in a 2.3x slowdown, so HTTP/1.1 remains a better solution for this client's critical path resources.

Altitude San Francisco 2018: How Magento moved to the cloud while maintaining...
Altitude San Francisco 2018: How Magento moved to the cloud while maintaining...Altitude San Francisco 2018: How Magento moved to the cloud while maintaining...
Altitude San Francisco 2018: How Magento moved to the cloud while maintaining...

Magento Commerce was first released by a small web development agency over ten years when they saw first-hand what a challenge it was for companies like them to build unique eCommerce sites. They created an open source platform that gives developers the flexibility to create meaningful shopping experiences while building a global community that drives down merchant costs and fosters innovation. Amid the rise of cloud-based software Magento needed to keep pace with more complex merchant needs and heightened shopper expectations. In this session learn how Magento, with the help of Partners like Fastly, evolved into a cloud-based platform without sacrificing their commitment to open software, flexibility, and the community.

Altitude San Francisco 2018: Scaling Ethereum to 10B requests per day
Altitude San Francisco 2018: Scaling Ethereum to 10B requests per dayAltitude San Francisco 2018: Scaling Ethereum to 10B requests per day
Altitude San Francisco 2018: Scaling Ethereum to 10B requests per day

ConsenSys is a venture production studio building decentralized applications and developer and end-user tools for blockchains. Their Infura platform is a core infrastructure pillar of Ethereum, enabling decentralized applications of all kinds to scale to accommodate their users. Infura went from 20 million requests a day at the beginning of 2017 to over 10 billion requests today. This staggering 500x increase naturally lead to questions of scale. In this talk, co-founder Michael Wuehler will discuss the technical challenges encountered while building and scaling the Infura platform, and the infrastructure decisions that led to their adoption of Fastly and other pivotal technologies.

“Eraser instruments
each call to acquire
or release a lock”
“In order to reconstruct the
state of shared memory,
each processor must view
writes to shared memory
by other processors as
asynchronous events. We
therefore need to preserve
the order of execution
between the processors.”
Savage et al: Eraser: A Dynamic Data Race
Detector for Multithreaded Programs
SOSP ‘97
Savage et al: Eraser: A Dynamic Data Race
Detector for Multithreaded Programs
SOSP ‘97
Lamport et al: Time, Locks and the Ordering
of Events in a Distributed System
CACM ‘78

Recommended for you

Altitude San Francisco 2018: Authentication at the Edge
Altitude San Francisco 2018: Authentication at the EdgeAltitude San Francisco 2018: Authentication at the Edge
Altitude San Francisco 2018: Authentication at the Edge

Turning away unwanted traffic close to the source is a common and key use case for edge networks like Fastly, but identity, authentication, and authorization at the edge can go far beyond blocking DDoS. The unique way that you identify your site’s users can probably move to the edge too, allowing you to cut response times in your critical path, offload more origin traffic, and make smarter routing decisions at the edge. In this talk we’ll cover a number of patterns in use by real Fastly customers. Whether you prefer token authentication, pre-shared keys, OAuth, HTTP auth, JSON web tokens, or a complex paywall, learn how you can potentially make your authentication decisions at the edge.

Altitude San Francisco 2018: WebAssembly Tools & Applications
Altitude San Francisco 2018: WebAssembly Tools & ApplicationsAltitude San Francisco 2018: WebAssembly Tools & Applications
Altitude San Francisco 2018: WebAssembly Tools & Applications

This document provides a brief history of WebAssembly, including its origins in asm.js and progression through various compiler tools to the current WebAssembly standard. It discusses early implementations using asm.js for structured control flow and linear memory with isolated stacks. It also summarizes key compiler and tooling projects that have contributed to WebAssembly, such as Emscripten, Binaryen, Cranelift, Rust and WebAssembly, Pyodide, and WebAssembly Studio.

Altitude San Francisco 2018: Testing with Fastly Workshop
Altitude San Francisco 2018: Testing with Fastly WorkshopAltitude San Francisco 2018: Testing with Fastly Workshop
Altitude San Francisco 2018: Testing with Fastly Workshop

A crucial step for continuous integration and continuous delivery with Fastly is testing the service configuration to provide confidence in changes. This workshop will cover unit-testing VCL, component testing a service as a black box, systems testing a service end-to-end and stakeholder acceptance testing.

Lamport et al: Time, Locks and the Ordering
of Events in a Distributed System
CACM ‘78
Dunlap et al: Execution Replay for
Multiprocessor Virtual Machines
VEE ‘08
Dunlap et al: Execution Replay for
Multiprocessor Virtual Machines
VEE ‘08
“In order to reconstruct the state
of shared memory, each
processor must view writes to
shared memory by other
processors as asynchronous
events. We therefore need to
preserve the order of execution
between the processors.”
“Only reads and writes to shared
memory need to be ordered with
respect to each other"
Savage et al: Eraser: A Dynamic Data Race
Detector for Multithreaded Programs
SOSP ‘97

Recommended for you

Altitude San Francisco 2018: Fastly Purge Control at the USA TODAY NETWORK
Altitude San Francisco 2018: Fastly Purge Control at the USA TODAY NETWORKAltitude San Francisco 2018: Fastly Purge Control at the USA TODAY NETWORK
Altitude San Francisco 2018: Fastly Purge Control at the USA TODAY NETWORK

One of the most powerful tools that Fastly offers is worldwide, instant purge. Come learn the ins and outs of how HTTP invalidation works in general and how purge and surrogate keys can be used to improve your site's delivery and get even more value from Fastly. This talk will also cover the purge blast radius Surrogate Keys are an amazing way to purge your content from cache, but they can be a bit scary when you aren't sure how many URLs this surrogate key is tied to or what kind of affect this will have on origin. Join the USA Today Network as we explain how we leverage big data tools, Go APIs, New Relic, and Sumo Logic to provide our users a suite of tools for purging content from Fastly. Developers love knowing the blast radius of their surrogate keys, while our engineers love the real-time metrics and notifications we get when developers are hard-purging content.

Altitude San Francisco 2018: WAF Workshop
Altitude San Francisco 2018: WAF WorkshopAltitude San Francisco 2018: WAF Workshop
Altitude San Francisco 2018: WAF Workshop

In this hands-on workshop you will attack a vulnerable web application while defending your own web service behind a Fastly WAF. Attendees will depart understanding how common web application attacks can be exploited as well defended against. They will experience WAF logging and analytics via sumologic to detect attacks realtime. For mitigation you will use a preview version of our newly built WAF rule management UI. We will close off the workshop by deep diving on how our security team analyzed and mitigated some of this summer major vulnerabilities.

Altitude San Francisco 2018: Logging at the Edge
Altitude San Francisco 2018: Logging at the Edge Altitude San Francisco 2018: Logging at the Edge
Altitude San Francisco 2018: Logging at the Edge

Fastly delivers more than a million log events per second. Our Real-Time Log Streaming is easy to set up, but there are many features you might not be using to their full extent. This workshop will cover setting up logging to various endpoints, dealing with structured data, and getting real-time insights into your customers’ behavior.

O’Callahan & Choi: Hybrid Dynamic Data
Race Detection
PPoPP ‘03
“Unfortunately violations of
the lockset hypothesis are not
always programming errors.
One common example is
programs which use
channels to pass objects
between threads in the style of
CSP [15].
In such programs thread
synchronization and mutual
exclusion are accomplished by
explicit signaling between
threads.”
Lockset - ensure >1 lock always protects shared me
Doesn’t need to observe a bug happening to find a race
False positives if different synchronization techniques used
+
-
Happens-Before - shared accesses must be separated by a sync
Causality def’n doesn’t require locks: fewer false positives
Observing races depends on execution order
Slower to run in practice than Lockset
+
-
-
Serebryany & Iskhodzhanov: ThreadSanitizer:
data race detection in practice WBIA ‘12
a hybrid approach
Full happens-before tracking for
synchronize operations
Lockset approach to determine
whether causally-related locksets are
non-empty

Recommended for you

Altitude San Francisco 2018: Video Workshop Docs
Altitude San Francisco 2018: Video Workshop DocsAltitude San Francisco 2018: Video Workshop Docs
Altitude San Francisco 2018: Video Workshop Docs

Fastly delivers more than a million log events per second. Our Real-Time Log Streaming is easy to set up, but there are many features you might not be using to their full extent. This workshop will cover setting up logging to various endpoints, dealing with structured data, and getting real-time insights into your customers’ behavior. - - - - - - - - - - - Live streaming and on-demand video can provide a powerful way to connect with customers, but viewers expect seamless pixel-perfect streams without common video delivery inconveniences, such as downtime or lags. This workshop will demonstrate how anyone can deliver live video at scale. We’ll thoroughly explain key video delivery optimizations and more importantly, demonstrate their efficacy using the data collected from both Fastly Log Streaming/Sumo Logic and the Mux quality of experience service.

Altitude San Francisco 2018: Programming the Edge
Altitude San Francisco 2018: Programming the EdgeAltitude San Francisco 2018: Programming the Edge
Altitude San Francisco 2018: Programming the Edge

Programming the edge Second floor Andrew Betts Principal Developer Advocate, Fastly Hide abstract Through our support for running your own code on our edge servers, Fastly's network offers you a platform of unparalleled speed, reliability and efficiency to which you can delegate a surprising amount of logic that has traditionally been in the application layer. In this workshop, you'll implement a series of advanced edge solutions, and learn how to apply these patterns to your own applications to reduce your origin load, dramatically improve performance, and make your applications more secure.

Seamless PostgreSQL to Snowflake Data Transfer in 8 Simple Steps
Seamless PostgreSQL to Snowflake Data Transfer in 8 Simple StepsSeamless PostgreSQL to Snowflake Data Transfer in 8 Simple Steps
Seamless PostgreSQL to Snowflake Data Transfer in 8 Simple Steps

Unlock the full potential of your data by effortlessly migrating from PostgreSQL to Snowflake, the leading cloud data warehouse. This comprehensive guide presents an easy-to-follow 8-step process using Estuary Flow, an open-source data operations platform designed to simplify data pipelines. Discover how to seamlessly transfer your PostgreSQL data to Snowflake, leveraging Estuary Flow's intuitive interface and powerful real-time replication capabilities. Harness the power of both platforms to create a robust data ecosystem that drives business intelligence, analytics, and data-driven decision-making. Key Takeaways: 1. Effortless Migration: Learn how to migrate your PostgreSQL data to Snowflake in 8 simple steps, even with limited technical expertise. 2. Real-Time Insights: Achieve near-instantaneous data syncing for up-to-the-minute analytics and reporting. 3. Cost-Effective Solution: Lower your total cost of ownership (TCO) with Estuary Flow's efficient and scalable architecture. 4. Seamless Integration: Combine the strengths of PostgreSQL's transactional power with Snowflake's cloud-native scalability and data warehousing features. Don't miss out on this opportunity to unlock the full potential of your data. Read & Download this comprehensive guide now and embark on a seamless data journey from PostgreSQL to Snowflake with Estuary Flow! Try it Free: https://dashboard.estuary.dev/register

postgresqlsnowflakepostgres to snowflake
Serebryany & Iskhodzhanov: ThreadSanitizer:
data race detection in practice WBIA ‘12
Serebryany & Iskhodzhanov: ThreadSanitizer:
data race detection in practice WBIA ‘12
what have we seen
Time-Traveling Debugging for
reconstructing previous program state
JIT instrumentation for efficient control
flow modification
Shadow memory for efficient memory
introspection
the trace is out there
Novel and experimental hardware
Query languages and storage for large
trace data
Trace visualization techniques

Recommended for you

Top 10 Tips To Get Google AdSense For Your Website
Top 10 Tips To Get Google AdSense For Your WebsiteTop 10 Tips To Get Google AdSense For Your Website
Top 10 Tips To Get Google AdSense For Your Website

Lots of bloggers are using Google AdSense now. It’s getting really popular. With AdSense, bloggers can make money by showing ads on their websites. Read this important article written by the experienced designers of the best website designing company in Delhi –

website designing company in d
Cultural Shifts: Embracing DevOps for Organizational Transformation
Cultural Shifts: Embracing DevOps for Organizational TransformationCultural Shifts: Embracing DevOps for Organizational Transformation
Cultural Shifts: Embracing DevOps for Organizational Transformation

Mindfire Solutions specializes in DevOps services, facilitating digital transformation through streamlined software development and operational efficiency. Their expertise enhances collaboration, accelerates delivery cycles, and ensures scalability using cloud-native technologies. Mindfire Solutions empowers businesses to innovate rapidly and maintain competitive advantage in dynamic market landscapes.

devops servicesdevops consulting servicesexpertise devops
active-directory-auditing-solution (2).pptx
active-directory-auditing-solution (2).pptxactive-directory-auditing-solution (2).pptx
active-directory-auditing-solution (2).pptx

Active Directory Audit

Thanks
Slides, Citations,
and Acknowledgments:
https://github.com/dijkstracula/QConNYC2016
Nathan Taylor, Fastly
http://nathan.dijkstracula.net
@dijkstracula

More Related Content

What's hot

Composable and streamable Play apps
Composable and streamable Play appsComposable and streamable Play apps
Composable and streamable Play apps
Yevgeniy Brikman
 
Java Play RESTful ebean
Java Play RESTful ebeanJava Play RESTful ebean
Java Play RESTful ebean
Faren faren
 
Java Play Restful JPA
Java Play Restful JPAJava Play Restful JPA
Java Play Restful JPA
Faren faren
 
Altitude SF 2017: Debugging Fastly VCL 101
Altitude SF 2017: Debugging Fastly VCL 101Altitude SF 2017: Debugging Fastly VCL 101
Altitude SF 2017: Debugging Fastly VCL 101
Fastly
 
Tips for going fast in a slow world: Michael May at OSCON 2015
Tips for going fast in a slow world: Michael May at OSCON 2015Tips for going fast in a slow world: Michael May at OSCON 2015
Tips for going fast in a slow world: Michael May at OSCON 2015
Fastly
 
Real Time Event Dispatcher
Real Time Event DispatcherReal Time Event Dispatcher
Real Time Event Dispatcher
Peter Dietrich
 
A complete guide to Node.js
A complete guide to Node.jsA complete guide to Node.js
A complete guide to Node.js
Prabin Silwal
 
About Node.js
About Node.jsAbout Node.js
About Node.js
Artemisa Yescas Engler
 
Play Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaPlay Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and Scala
Yevgeniy Brikman
 
WebSockets wiith Scala and Play! Framework
WebSockets wiith Scala and Play! FrameworkWebSockets wiith Scala and Play! Framework
WebSockets wiith Scala and Play! Framework
Fabio Tiriticco
 
Mitigating Security Threats with Fastly - Joe Williams at Fastly Altitude 2015
Mitigating Security Threats with Fastly - Joe Williams at Fastly Altitude 2015Mitigating Security Threats with Fastly - Joe Williams at Fastly Altitude 2015
Mitigating Security Threats with Fastly - Joe Williams at Fastly Altitude 2015
Fastly
 
Altitude SF 2017: Advanced VCL: Shielding and Clustering
Altitude SF 2017: Advanced VCL: Shielding and ClusteringAltitude SF 2017: Advanced VCL: Shielding and Clustering
Altitude SF 2017: Advanced VCL: Shielding and Clustering
Fastly
 
Choosing a Javascript Framework
Choosing a Javascript FrameworkChoosing a Javascript Framework
Choosing a Javascript Framework
All Things Open
 
Going crazy with Varnish and Symfony
Going crazy with Varnish and SymfonyGoing crazy with Varnish and Symfony
Going crazy with Varnish and Symfony
David de Boer
 
Dancing with websocket
Dancing with websocketDancing with websocket
Dancing with websocket
Damien Krotkine
 
Reverse ajax in 2014
Reverse ajax in 2014Reverse ajax in 2014
Reverse ajax in 2014
Nenad Pecanac
 
EWD 3 Training Course Part 5b: First Steps in Building a QEWD Application
EWD 3 Training Course Part 5b: First Steps in Building a QEWD ApplicationEWD 3 Training Course Part 5b: First Steps in Building a QEWD Application
EWD 3 Training Course Part 5b: First Steps in Building a QEWD Application
Rob Tweed
 
Service Worker Presentation
Service Worker PresentationService Worker Presentation
Service Worker Presentation
Kyle Dorman
 
Connecting to Web Services on Android
Connecting to Web Services on AndroidConnecting to Web Services on Android
Connecting to Web Services on Android
sullis
 
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 2
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 2EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 2
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 2
Rob Tweed
 

What's hot (20)

Composable and streamable Play apps
Composable and streamable Play appsComposable and streamable Play apps
Composable and streamable Play apps
 
Java Play RESTful ebean
Java Play RESTful ebeanJava Play RESTful ebean
Java Play RESTful ebean
 
Java Play Restful JPA
Java Play Restful JPAJava Play Restful JPA
Java Play Restful JPA
 
Altitude SF 2017: Debugging Fastly VCL 101
Altitude SF 2017: Debugging Fastly VCL 101Altitude SF 2017: Debugging Fastly VCL 101
Altitude SF 2017: Debugging Fastly VCL 101
 
Tips for going fast in a slow world: Michael May at OSCON 2015
Tips for going fast in a slow world: Michael May at OSCON 2015Tips for going fast in a slow world: Michael May at OSCON 2015
Tips for going fast in a slow world: Michael May at OSCON 2015
 
Real Time Event Dispatcher
Real Time Event DispatcherReal Time Event Dispatcher
Real Time Event Dispatcher
 
A complete guide to Node.js
A complete guide to Node.jsA complete guide to Node.js
A complete guide to Node.js
 
About Node.js
About Node.jsAbout Node.js
About Node.js
 
Play Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaPlay Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and Scala
 
WebSockets wiith Scala and Play! Framework
WebSockets wiith Scala and Play! FrameworkWebSockets wiith Scala and Play! Framework
WebSockets wiith Scala and Play! Framework
 
Mitigating Security Threats with Fastly - Joe Williams at Fastly Altitude 2015
Mitigating Security Threats with Fastly - Joe Williams at Fastly Altitude 2015Mitigating Security Threats with Fastly - Joe Williams at Fastly Altitude 2015
Mitigating Security Threats with Fastly - Joe Williams at Fastly Altitude 2015
 
Altitude SF 2017: Advanced VCL: Shielding and Clustering
Altitude SF 2017: Advanced VCL: Shielding and ClusteringAltitude SF 2017: Advanced VCL: Shielding and Clustering
Altitude SF 2017: Advanced VCL: Shielding and Clustering
 
Choosing a Javascript Framework
Choosing a Javascript FrameworkChoosing a Javascript Framework
Choosing a Javascript Framework
 
Going crazy with Varnish and Symfony
Going crazy with Varnish and SymfonyGoing crazy with Varnish and Symfony
Going crazy with Varnish and Symfony
 
Dancing with websocket
Dancing with websocketDancing with websocket
Dancing with websocket
 
Reverse ajax in 2014
Reverse ajax in 2014Reverse ajax in 2014
Reverse ajax in 2014
 
EWD 3 Training Course Part 5b: First Steps in Building a QEWD Application
EWD 3 Training Course Part 5b: First Steps in Building a QEWD ApplicationEWD 3 Training Course Part 5b: First Steps in Building a QEWD Application
EWD 3 Training Course Part 5b: First Steps in Building a QEWD Application
 
Service Worker Presentation
Service Worker PresentationService Worker Presentation
Service Worker Presentation
 
Connecting to Web Services on Android
Connecting to Web Services on AndroidConnecting to Web Services on Android
Connecting to Web Services on Android
 
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 2
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 2EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 2
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 2
 

Viewers also liked

Applying Varnish
Applying VarnishApplying Varnish
Applying Varnish
Fastly
 
The Fallacy of Fast - Ines Sombra at Fastly Altitude 2015
The Fallacy of Fast - Ines Sombra at Fastly Altitude 2015The Fallacy of Fast - Ines Sombra at Fastly Altitude 2015
The Fallacy of Fast - Ines Sombra at Fastly Altitude 2015
Fastly
 
It Probably Works
It Probably WorksIt Probably Works
It Probably Works
Fastly
 
Top 5 Things I've Messed Up in Live Streaming
Top 5 Things I've Messed Up in Live StreamingTop 5 Things I've Messed Up in Live Streaming
Top 5 Things I've Messed Up in Live Streaming
Fastly
 
What we can learn from CDNs about Web Development, Deployment, and Performance
What we can learn from CDNs about Web Development, Deployment, and PerformanceWhat we can learn from CDNs about Web Development, Deployment, and Performance
What we can learn from CDNs about Web Development, Deployment, and Performance
Fastly
 
Confident Refactoring - Ember SF Meetup
Confident Refactoring - Ember SF MeetupConfident Refactoring - Ember SF Meetup
Confident Refactoring - Ember SF Meetup
Fastly
 
Performance Measuring & Monitoring - Catchpoint CEO Mehdi Daoudi at Fastly Al...
Performance Measuring & Monitoring - Catchpoint CEO Mehdi Daoudi at Fastly Al...Performance Measuring & Monitoring - Catchpoint CEO Mehdi Daoudi at Fastly Al...
Performance Measuring & Monitoring - Catchpoint CEO Mehdi Daoudi at Fastly Al...
Fastly
 
It Probably Works - QCon 2015
It Probably Works - QCon 2015It Probably Works - QCon 2015
It Probably Works - QCon 2015
Fastly
 
Interative Traffic Engineering in Changing Internet Economics - Tom Daly at L...
Interative Traffic Engineering in Changing Internet Economics - Tom Daly at L...Interative Traffic Engineering in Changing Internet Economics - Tom Daly at L...
Interative Traffic Engineering in Changing Internet Economics - Tom Daly at L...
Fastly
 
Developing a Globally Distributed Purging System
Developing a Globally Distributed Purging SystemDeveloping a Globally Distributed Purging System
Developing a Globally Distributed Purging System
Fastly
 
Fallacy of Fast
Fallacy of FastFallacy of Fast
Fallacy of Fast
Fastly
 
Advanced VCL Workshop - Rogier Mulhuijzen and Stephen Basile at Fastly Altitu...
Advanced VCL Workshop - Rogier Mulhuijzen and Stephen Basile at Fastly Altitu...Advanced VCL Workshop - Rogier Mulhuijzen and Stephen Basile at Fastly Altitu...
Advanced VCL Workshop - Rogier Mulhuijzen and Stephen Basile at Fastly Altitu...
Fastly
 
Rails Caching: Secrets From the Edge
Rails Caching: Secrets From the EdgeRails Caching: Secrets From the Edge
Rails Caching: Secrets From the Edge
Fastly
 
Building a better web
Building a better webBuilding a better web
Building a better web
Fastly
 
The future of the edge
The future of the edge The future of the edge
The future of the edge
Fastly
 
Migrating Target to Fastly - Eddie Roger at Fastly Altitude 2015
Migrating Target to Fastly - Eddie Roger at Fastly Altitude 2015Migrating Target to Fastly - Eddie Roger at Fastly Altitude 2015
Migrating Target to Fastly - Eddie Roger at Fastly Altitude 2015
Fastly
 
From Zero to Capacity Planning
From Zero to Capacity PlanningFrom Zero to Capacity Planning
From Zero to Capacity Planning
Fastly
 
Making ops life easier
Making ops life easierMaking ops life easier
Making ops life easier
Fastly
 
Debugging Your CDN - Austin Spires at Fastly Altitude 2015
Debugging Your CDN - Austin Spires at Fastly Altitude 2015Debugging Your CDN - Austin Spires at Fastly Altitude 2015
Debugging Your CDN - Austin Spires at Fastly Altitude 2015
Fastly
 
Resource Allocation in Computer Networks
Resource Allocation in Computer NetworksResource Allocation in Computer Networks
Resource Allocation in Computer Networks
Fastly
 

Viewers also liked (20)

Applying Varnish
Applying VarnishApplying Varnish
Applying Varnish
 
The Fallacy of Fast - Ines Sombra at Fastly Altitude 2015
The Fallacy of Fast - Ines Sombra at Fastly Altitude 2015The Fallacy of Fast - Ines Sombra at Fastly Altitude 2015
The Fallacy of Fast - Ines Sombra at Fastly Altitude 2015
 
It Probably Works
It Probably WorksIt Probably Works
It Probably Works
 
Top 5 Things I've Messed Up in Live Streaming
Top 5 Things I've Messed Up in Live StreamingTop 5 Things I've Messed Up in Live Streaming
Top 5 Things I've Messed Up in Live Streaming
 
What we can learn from CDNs about Web Development, Deployment, and Performance
What we can learn from CDNs about Web Development, Deployment, and PerformanceWhat we can learn from CDNs about Web Development, Deployment, and Performance
What we can learn from CDNs about Web Development, Deployment, and Performance
 
Confident Refactoring - Ember SF Meetup
Confident Refactoring - Ember SF MeetupConfident Refactoring - Ember SF Meetup
Confident Refactoring - Ember SF Meetup
 
Performance Measuring & Monitoring - Catchpoint CEO Mehdi Daoudi at Fastly Al...
Performance Measuring & Monitoring - Catchpoint CEO Mehdi Daoudi at Fastly Al...Performance Measuring & Monitoring - Catchpoint CEO Mehdi Daoudi at Fastly Al...
Performance Measuring & Monitoring - Catchpoint CEO Mehdi Daoudi at Fastly Al...
 
It Probably Works - QCon 2015
It Probably Works - QCon 2015It Probably Works - QCon 2015
It Probably Works - QCon 2015
 
Interative Traffic Engineering in Changing Internet Economics - Tom Daly at L...
Interative Traffic Engineering in Changing Internet Economics - Tom Daly at L...Interative Traffic Engineering in Changing Internet Economics - Tom Daly at L...
Interative Traffic Engineering in Changing Internet Economics - Tom Daly at L...
 
Developing a Globally Distributed Purging System
Developing a Globally Distributed Purging SystemDeveloping a Globally Distributed Purging System
Developing a Globally Distributed Purging System
 
Fallacy of Fast
Fallacy of FastFallacy of Fast
Fallacy of Fast
 
Advanced VCL Workshop - Rogier Mulhuijzen and Stephen Basile at Fastly Altitu...
Advanced VCL Workshop - Rogier Mulhuijzen and Stephen Basile at Fastly Altitu...Advanced VCL Workshop - Rogier Mulhuijzen and Stephen Basile at Fastly Altitu...
Advanced VCL Workshop - Rogier Mulhuijzen and Stephen Basile at Fastly Altitu...
 
Rails Caching: Secrets From the Edge
Rails Caching: Secrets From the EdgeRails Caching: Secrets From the Edge
Rails Caching: Secrets From the Edge
 
Building a better web
Building a better webBuilding a better web
Building a better web
 
The future of the edge
The future of the edge The future of the edge
The future of the edge
 
Migrating Target to Fastly - Eddie Roger at Fastly Altitude 2015
Migrating Target to Fastly - Eddie Roger at Fastly Altitude 2015Migrating Target to Fastly - Eddie Roger at Fastly Altitude 2015
Migrating Target to Fastly - Eddie Roger at Fastly Altitude 2015
 
From Zero to Capacity Planning
From Zero to Capacity PlanningFrom Zero to Capacity Planning
From Zero to Capacity Planning
 
Making ops life easier
Making ops life easierMaking ops life easier
Making ops life easier
 
Debugging Your CDN - Austin Spires at Fastly Altitude 2015
Debugging Your CDN - Austin Spires at Fastly Altitude 2015Debugging Your CDN - Austin Spires at Fastly Altitude 2015
Debugging Your CDN - Austin Spires at Fastly Altitude 2015
 
Resource Allocation in Computer Networks
Resource Allocation in Computer NetworksResource Allocation in Computer Networks
Resource Allocation in Computer Networks
 

Similar to Beyond Breakpoints: A Tour of Dynamic Analysis

Static analysis of C++ source code
Static analysis of C++ source codeStatic analysis of C++ source code
Static analysis of C++ source code
Andrey Karpov
 
Static analysis of C++ source code
Static analysis of C++ source codeStatic analysis of C++ source code
Static analysis of C++ source code
PVS-Studio
 
Beyond Breakpoints: A Tour of Dynamic Analysis
Beyond Breakpoints: A Tour of Dynamic AnalysisBeyond Breakpoints: A Tour of Dynamic Analysis
Beyond Breakpoints: A Tour of Dynamic Analysis
C4Media
 
Skiron - Experiments in CPU Design in D
Skiron - Experiments in CPU Design in DSkiron - Experiments in CPU Design in D
Skiron - Experiments in CPU Design in D
Mithun Hunsur
 
C programming language tutorial
C programming language tutorial C programming language tutorial
C programming language tutorial
javaTpoint s
 
Virtual platform
Virtual platformVirtual platform
Virtual platform
sean chen
 
PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...
PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...
PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...
Andrey Karpov
 
Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...
Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...
Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...
Vincenzo Iozzo
 
CGI.ppt
CGI.pptCGI.ppt
Exploiting vectorization with ISPC
Exploiting vectorization with ISPCExploiting vectorization with ISPC
Exploiting vectorization with ISPC
Roberto Agostino Vitillo
 
LSFMM 2019 BPF Observability
LSFMM 2019 BPF ObservabilityLSFMM 2019 BPF Observability
LSFMM 2019 BPF Observability
Brendan Gregg
 
PVS-Studio, a solution for resource intensive applications development
PVS-Studio, a solution for resource intensive applications developmentPVS-Studio, a solution for resource intensive applications development
PVS-Studio, a solution for resource intensive applications development
OOO "Program Verification Systems"
 
RxJava on Android
RxJava on AndroidRxJava on Android
RxJava on Android
Dustin Graham
 
Linux kernel tracing superpowers in the cloud
Linux kernel tracing superpowers in the cloudLinux kernel tracing superpowers in the cloud
Linux kernel tracing superpowers in the cloud
Andrea Righi
 
Virtual training Intro to Kapacitor
Virtual training  Intro to Kapacitor Virtual training  Intro to Kapacitor
Virtual training Intro to Kapacitor
InfluxData
 
Pragmatic Optimization in Modern Programming - Demystifying the Compiler
Pragmatic Optimization in Modern Programming - Demystifying the CompilerPragmatic Optimization in Modern Programming - Demystifying the Compiler
Pragmatic Optimization in Modern Programming - Demystifying the Compiler
Marina Kolpakova
 
ExperiencesSharingOnEmbeddedSystemDevelopment_20160321
ExperiencesSharingOnEmbeddedSystemDevelopment_20160321ExperiencesSharingOnEmbeddedSystemDevelopment_20160321
ExperiencesSharingOnEmbeddedSystemDevelopment_20160321
Teddy Hsiung
 
Pascal script maxbox_ekon_14_2
Pascal script maxbox_ekon_14_2Pascal script maxbox_ekon_14_2
Pascal script maxbox_ekon_14_2
Max Kleiner
 
grsecurity and PaX
grsecurity and PaXgrsecurity and PaX
grsecurity and PaX
Kernel TLV
 
Stranger in These Parts. A Hired Gun in the JS Corral (JSConf US 2012)
Stranger in These Parts. A Hired Gun in the JS Corral (JSConf US 2012)Stranger in These Parts. A Hired Gun in the JS Corral (JSConf US 2012)
Stranger in These Parts. A Hired Gun in the JS Corral (JSConf US 2012)
Igalia
 

Similar to Beyond Breakpoints: A Tour of Dynamic Analysis (20)

Static analysis of C++ source code
Static analysis of C++ source codeStatic analysis of C++ source code
Static analysis of C++ source code
 
Static analysis of C++ source code
Static analysis of C++ source codeStatic analysis of C++ source code
Static analysis of C++ source code
 
Beyond Breakpoints: A Tour of Dynamic Analysis
Beyond Breakpoints: A Tour of Dynamic AnalysisBeyond Breakpoints: A Tour of Dynamic Analysis
Beyond Breakpoints: A Tour of Dynamic Analysis
 
Skiron - Experiments in CPU Design in D
Skiron - Experiments in CPU Design in DSkiron - Experiments in CPU Design in D
Skiron - Experiments in CPU Design in D
 
C programming language tutorial
C programming language tutorial C programming language tutorial
C programming language tutorial
 
Virtual platform
Virtual platformVirtual platform
Virtual platform
 
PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...
PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...
PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...
 
Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...
Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...
Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...
 
CGI.ppt
CGI.pptCGI.ppt
CGI.ppt
 
Exploiting vectorization with ISPC
Exploiting vectorization with ISPCExploiting vectorization with ISPC
Exploiting vectorization with ISPC
 
LSFMM 2019 BPF Observability
LSFMM 2019 BPF ObservabilityLSFMM 2019 BPF Observability
LSFMM 2019 BPF Observability
 
PVS-Studio, a solution for resource intensive applications development
PVS-Studio, a solution for resource intensive applications developmentPVS-Studio, a solution for resource intensive applications development
PVS-Studio, a solution for resource intensive applications development
 
RxJava on Android
RxJava on AndroidRxJava on Android
RxJava on Android
 
Linux kernel tracing superpowers in the cloud
Linux kernel tracing superpowers in the cloudLinux kernel tracing superpowers in the cloud
Linux kernel tracing superpowers in the cloud
 
Virtual training Intro to Kapacitor
Virtual training  Intro to Kapacitor Virtual training  Intro to Kapacitor
Virtual training Intro to Kapacitor
 
Pragmatic Optimization in Modern Programming - Demystifying the Compiler
Pragmatic Optimization in Modern Programming - Demystifying the CompilerPragmatic Optimization in Modern Programming - Demystifying the Compiler
Pragmatic Optimization in Modern Programming - Demystifying the Compiler
 
ExperiencesSharingOnEmbeddedSystemDevelopment_20160321
ExperiencesSharingOnEmbeddedSystemDevelopment_20160321ExperiencesSharingOnEmbeddedSystemDevelopment_20160321
ExperiencesSharingOnEmbeddedSystemDevelopment_20160321
 
Pascal script maxbox_ekon_14_2
Pascal script maxbox_ekon_14_2Pascal script maxbox_ekon_14_2
Pascal script maxbox_ekon_14_2
 
grsecurity and PaX
grsecurity and PaXgrsecurity and PaX
grsecurity and PaX
 
Stranger in These Parts. A Hired Gun in the JS Corral (JSConf US 2012)
Stranger in These Parts. A Hired Gun in the JS Corral (JSConf US 2012)Stranger in These Parts. A Hired Gun in the JS Corral (JSConf US 2012)
Stranger in These Parts. A Hired Gun in the JS Corral (JSConf US 2012)
 

More from Fastly

Revisiting HTTP/2
Revisiting HTTP/2Revisiting HTTP/2
Revisiting HTTP/2
Fastly
 
Altitude San Francisco 2018: Preparing for Video Streaming Events at Scale
Altitude San Francisco 2018: Preparing for Video Streaming Events at ScaleAltitude San Francisco 2018: Preparing for Video Streaming Events at Scale
Altitude San Francisco 2018: Preparing for Video Streaming Events at Scale
Fastly
 
Altitude San Francisco 2018: Building the Souther Hemisphere of the Internet
Altitude San Francisco 2018: Building the Souther Hemisphere of the InternetAltitude San Francisco 2018: Building the Souther Hemisphere of the Internet
Altitude San Francisco 2018: Building the Souther Hemisphere of the Internet
Fastly
 
Altitude San Francisco 2018: The World Cup Stream
Altitude San Francisco 2018: The World Cup StreamAltitude San Francisco 2018: The World Cup Stream
Altitude San Francisco 2018: The World Cup Stream
Fastly
 
Altitude San Francisco 2018: We Own Our Destiny
Altitude San Francisco 2018: We Own Our DestinyAltitude San Francisco 2018: We Own Our Destiny
Altitude San Francisco 2018: We Own Our Destiny
Fastly
 
Altitude San Francisco 2018: Scale and Stability at the Edge with 1.4 Billion...
Altitude San Francisco 2018: Scale and Stability at the Edge with 1.4 Billion...Altitude San Francisco 2018: Scale and Stability at the Edge with 1.4 Billion...
Altitude San Francisco 2018: Scale and Stability at the Edge with 1.4 Billion...
Fastly
 
Altitude San Francisco 2018: Moving Off the Monolith: A Seamless Migration
Altitude San Francisco 2018: Moving Off the Monolith: A Seamless MigrationAltitude San Francisco 2018: Moving Off the Monolith: A Seamless Migration
Altitude San Francisco 2018: Moving Off the Monolith: A Seamless Migration
Fastly
 
Altitude San Francisco 2018: Bringing TLS to GitHub Pages
Altitude San Francisco 2018: Bringing TLS to GitHub PagesAltitude San Francisco 2018: Bringing TLS to GitHub Pages
Altitude San Francisco 2018: Bringing TLS to GitHub Pages
Fastly
 
Altitude San Francisco 2018: HTTP Invalidation Workshop
Altitude San Francisco 2018: HTTP Invalidation WorkshopAltitude San Francisco 2018: HTTP Invalidation Workshop
Altitude San Francisco 2018: HTTP Invalidation Workshop
Fastly
 
Altitude San Francisco 2018: HTTP/2 Tales: Discovery and Woe
Altitude San Francisco 2018: HTTP/2 Tales: Discovery and WoeAltitude San Francisco 2018: HTTP/2 Tales: Discovery and Woe
Altitude San Francisco 2018: HTTP/2 Tales: Discovery and Woe
Fastly
 
Altitude San Francisco 2018: How Magento moved to the cloud while maintaining...
Altitude San Francisco 2018: How Magento moved to the cloud while maintaining...Altitude San Francisco 2018: How Magento moved to the cloud while maintaining...
Altitude San Francisco 2018: How Magento moved to the cloud while maintaining...
Fastly
 
Altitude San Francisco 2018: Scaling Ethereum to 10B requests per day
Altitude San Francisco 2018: Scaling Ethereum to 10B requests per dayAltitude San Francisco 2018: Scaling Ethereum to 10B requests per day
Altitude San Francisco 2018: Scaling Ethereum to 10B requests per day
Fastly
 
Altitude San Francisco 2018: Authentication at the Edge
Altitude San Francisco 2018: Authentication at the EdgeAltitude San Francisco 2018: Authentication at the Edge
Altitude San Francisco 2018: Authentication at the Edge
Fastly
 
Altitude San Francisco 2018: WebAssembly Tools & Applications
Altitude San Francisco 2018: WebAssembly Tools & ApplicationsAltitude San Francisco 2018: WebAssembly Tools & Applications
Altitude San Francisco 2018: WebAssembly Tools & Applications
Fastly
 
Altitude San Francisco 2018: Testing with Fastly Workshop
Altitude San Francisco 2018: Testing with Fastly WorkshopAltitude San Francisco 2018: Testing with Fastly Workshop
Altitude San Francisco 2018: Testing with Fastly Workshop
Fastly
 
Altitude San Francisco 2018: Fastly Purge Control at the USA TODAY NETWORK
Altitude San Francisco 2018: Fastly Purge Control at the USA TODAY NETWORKAltitude San Francisco 2018: Fastly Purge Control at the USA TODAY NETWORK
Altitude San Francisco 2018: Fastly Purge Control at the USA TODAY NETWORK
Fastly
 
Altitude San Francisco 2018: WAF Workshop
Altitude San Francisco 2018: WAF WorkshopAltitude San Francisco 2018: WAF Workshop
Altitude San Francisco 2018: WAF Workshop
Fastly
 
Altitude San Francisco 2018: Logging at the Edge
Altitude San Francisco 2018: Logging at the Edge Altitude San Francisco 2018: Logging at the Edge
Altitude San Francisco 2018: Logging at the Edge
Fastly
 
Altitude San Francisco 2018: Video Workshop Docs
Altitude San Francisco 2018: Video Workshop DocsAltitude San Francisco 2018: Video Workshop Docs
Altitude San Francisco 2018: Video Workshop Docs
Fastly
 
Altitude San Francisco 2018: Programming the Edge
Altitude San Francisco 2018: Programming the EdgeAltitude San Francisco 2018: Programming the Edge
Altitude San Francisco 2018: Programming the Edge
Fastly
 

More from Fastly (20)

Revisiting HTTP/2
Revisiting HTTP/2Revisiting HTTP/2
Revisiting HTTP/2
 
Altitude San Francisco 2018: Preparing for Video Streaming Events at Scale
Altitude San Francisco 2018: Preparing for Video Streaming Events at ScaleAltitude San Francisco 2018: Preparing for Video Streaming Events at Scale
Altitude San Francisco 2018: Preparing for Video Streaming Events at Scale
 
Altitude San Francisco 2018: Building the Souther Hemisphere of the Internet
Altitude San Francisco 2018: Building the Souther Hemisphere of the InternetAltitude San Francisco 2018: Building the Souther Hemisphere of the Internet
Altitude San Francisco 2018: Building the Souther Hemisphere of the Internet
 
Altitude San Francisco 2018: The World Cup Stream
Altitude San Francisco 2018: The World Cup StreamAltitude San Francisco 2018: The World Cup Stream
Altitude San Francisco 2018: The World Cup Stream
 
Altitude San Francisco 2018: We Own Our Destiny
Altitude San Francisco 2018: We Own Our DestinyAltitude San Francisco 2018: We Own Our Destiny
Altitude San Francisco 2018: We Own Our Destiny
 
Altitude San Francisco 2018: Scale and Stability at the Edge with 1.4 Billion...
Altitude San Francisco 2018: Scale and Stability at the Edge with 1.4 Billion...Altitude San Francisco 2018: Scale and Stability at the Edge with 1.4 Billion...
Altitude San Francisco 2018: Scale and Stability at the Edge with 1.4 Billion...
 
Altitude San Francisco 2018: Moving Off the Monolith: A Seamless Migration
Altitude San Francisco 2018: Moving Off the Monolith: A Seamless MigrationAltitude San Francisco 2018: Moving Off the Monolith: A Seamless Migration
Altitude San Francisco 2018: Moving Off the Monolith: A Seamless Migration
 
Altitude San Francisco 2018: Bringing TLS to GitHub Pages
Altitude San Francisco 2018: Bringing TLS to GitHub PagesAltitude San Francisco 2018: Bringing TLS to GitHub Pages
Altitude San Francisco 2018: Bringing TLS to GitHub Pages
 
Altitude San Francisco 2018: HTTP Invalidation Workshop
Altitude San Francisco 2018: HTTP Invalidation WorkshopAltitude San Francisco 2018: HTTP Invalidation Workshop
Altitude San Francisco 2018: HTTP Invalidation Workshop
 
Altitude San Francisco 2018: HTTP/2 Tales: Discovery and Woe
Altitude San Francisco 2018: HTTP/2 Tales: Discovery and WoeAltitude San Francisco 2018: HTTP/2 Tales: Discovery and Woe
Altitude San Francisco 2018: HTTP/2 Tales: Discovery and Woe
 
Altitude San Francisco 2018: How Magento moved to the cloud while maintaining...
Altitude San Francisco 2018: How Magento moved to the cloud while maintaining...Altitude San Francisco 2018: How Magento moved to the cloud while maintaining...
Altitude San Francisco 2018: How Magento moved to the cloud while maintaining...
 
Altitude San Francisco 2018: Scaling Ethereum to 10B requests per day
Altitude San Francisco 2018: Scaling Ethereum to 10B requests per dayAltitude San Francisco 2018: Scaling Ethereum to 10B requests per day
Altitude San Francisco 2018: Scaling Ethereum to 10B requests per day
 
Altitude San Francisco 2018: Authentication at the Edge
Altitude San Francisco 2018: Authentication at the EdgeAltitude San Francisco 2018: Authentication at the Edge
Altitude San Francisco 2018: Authentication at the Edge
 
Altitude San Francisco 2018: WebAssembly Tools & Applications
Altitude San Francisco 2018: WebAssembly Tools & ApplicationsAltitude San Francisco 2018: WebAssembly Tools & Applications
Altitude San Francisco 2018: WebAssembly Tools & Applications
 
Altitude San Francisco 2018: Testing with Fastly Workshop
Altitude San Francisco 2018: Testing with Fastly WorkshopAltitude San Francisco 2018: Testing with Fastly Workshop
Altitude San Francisco 2018: Testing with Fastly Workshop
 
Altitude San Francisco 2018: Fastly Purge Control at the USA TODAY NETWORK
Altitude San Francisco 2018: Fastly Purge Control at the USA TODAY NETWORKAltitude San Francisco 2018: Fastly Purge Control at the USA TODAY NETWORK
Altitude San Francisco 2018: Fastly Purge Control at the USA TODAY NETWORK
 
Altitude San Francisco 2018: WAF Workshop
Altitude San Francisco 2018: WAF WorkshopAltitude San Francisco 2018: WAF Workshop
Altitude San Francisco 2018: WAF Workshop
 
Altitude San Francisco 2018: Logging at the Edge
Altitude San Francisco 2018: Logging at the Edge Altitude San Francisco 2018: Logging at the Edge
Altitude San Francisco 2018: Logging at the Edge
 
Altitude San Francisco 2018: Video Workshop Docs
Altitude San Francisco 2018: Video Workshop DocsAltitude San Francisco 2018: Video Workshop Docs
Altitude San Francisco 2018: Video Workshop Docs
 
Altitude San Francisco 2018: Programming the Edge
Altitude San Francisco 2018: Programming the EdgeAltitude San Francisco 2018: Programming the Edge
Altitude San Francisco 2018: Programming the Edge
 

Recently uploaded

Seamless PostgreSQL to Snowflake Data Transfer in 8 Simple Steps
Seamless PostgreSQL to Snowflake Data Transfer in 8 Simple StepsSeamless PostgreSQL to Snowflake Data Transfer in 8 Simple Steps
Seamless PostgreSQL to Snowflake Data Transfer in 8 Simple Steps
Estuary Flow
 
Top 10 Tips To Get Google AdSense For Your Website
Top 10 Tips To Get Google AdSense For Your WebsiteTop 10 Tips To Get Google AdSense For Your Website
Top 10 Tips To Get Google AdSense For Your Website
e-Definers Technology
 
Cultural Shifts: Embracing DevOps for Organizational Transformation
Cultural Shifts: Embracing DevOps for Organizational TransformationCultural Shifts: Embracing DevOps for Organizational Transformation
Cultural Shifts: Embracing DevOps for Organizational Transformation
Mindfire Solution
 
active-directory-auditing-solution (2).pptx
active-directory-auditing-solution (2).pptxactive-directory-auditing-solution (2).pptx
active-directory-auditing-solution (2).pptx
sudsdeep
 
Safe Work Permit Management Software for Hot Work Permits
Safe Work Permit Management Software for Hot Work PermitsSafe Work Permit Management Software for Hot Work Permits
Safe Work Permit Management Software for Hot Work Permits
sheqnetworkmarketing
 
React vs Next js: Which is Better for Web Development? - Semiosis Software Pr...
React vs Next js: Which is Better for Web Development? - Semiosis Software Pr...React vs Next js: Which is Better for Web Development? - Semiosis Software Pr...
React vs Next js: Which is Better for Web Development? - Semiosis Software Pr...
Semiosis Software Private Limited
 
Independence Day Hasn’t Always Been a U.S. Holiday.pdf
Independence Day Hasn’t Always Been a U.S. Holiday.pdfIndependence Day Hasn’t Always Been a U.S. Holiday.pdf
Independence Day Hasn’t Always Been a U.S. Holiday.pdf
Livetecs LLC
 
Break data silos with real-time connectivity using Confluent Cloud Connectors
Break data silos with real-time connectivity using Confluent Cloud ConnectorsBreak data silos with real-time connectivity using Confluent Cloud Connectors
Break data silos with real-time connectivity using Confluent Cloud Connectors
confluent
 
CViewSurvey Digitech Pvt Ltd that works on a proven C.A.A.G. model.
CViewSurvey Digitech Pvt Ltd that  works on a proven C.A.A.G. model.CViewSurvey Digitech Pvt Ltd that  works on a proven C.A.A.G. model.
CViewSurvey Digitech Pvt Ltd that works on a proven C.A.A.G. model.
bhatinidhi2001
 
dachnug51 - HCL Sametime 12 as a Software Appliance.pdf
dachnug51 - HCL Sametime 12 as a Software Appliance.pdfdachnug51 - HCL Sametime 12 as a Software Appliance.pdf
dachnug51 - HCL Sametime 12 as a Software Appliance.pdf
DNUG e.V.
 
Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...
Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...
Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...
Asher Sterkin
 
ENISA Threat Landscape 2023 documentation
ENISA Threat Landscape 2023 documentationENISA Threat Landscape 2023 documentation
ENISA Threat Landscape 2023 documentation
sofiafernandezon
 
Cisco Live Announcements: New ThousandEyes Release Highlights - July 2024
Cisco Live Announcements: New ThousandEyes Release Highlights - July 2024Cisco Live Announcements: New ThousandEyes Release Highlights - July 2024
Cisco Live Announcements: New ThousandEyes Release Highlights - July 2024
ThousandEyes
 
Prada Group Reports Strong Growth in First Quarter …
Prada Group Reports Strong Growth in First Quarter …Prada Group Reports Strong Growth in First Quarter …
Prada Group Reports Strong Growth in First Quarter …
908dutch
 
NBFC Software: Optimize Your Non-Banking Financial Company
NBFC Software: Optimize Your Non-Banking Financial CompanyNBFC Software: Optimize Your Non-Banking Financial Company
NBFC Software: Optimize Your Non-Banking Financial Company
NBFC Softwares
 
AWS Cloud Practitioner Essentials (Second Edition) (Arabic) AWS Security .pdf
AWS Cloud Practitioner Essentials (Second Edition) (Arabic) AWS Security .pdfAWS Cloud Practitioner Essentials (Second Edition) (Arabic) AWS Security .pdf
AWS Cloud Practitioner Essentials (Second Edition) (Arabic) AWS Security .pdf
karim wahed
 
Discover the Power of ONEMONITAR: The Ultimate Mobile Spy App for Android Dev...
Discover the Power of ONEMONITAR: The Ultimate Mobile Spy App for Android Dev...Discover the Power of ONEMONITAR: The Ultimate Mobile Spy App for Android Dev...
Discover the Power of ONEMONITAR: The Ultimate Mobile Spy App for Android Dev...
onemonitarsoftware
 
NYC 26-Jun-2024 Combined Presentations.pdf
NYC 26-Jun-2024 Combined Presentations.pdfNYC 26-Jun-2024 Combined Presentations.pdf
NYC 26-Jun-2024 Combined Presentations.pdf
AUGNYC
 
MVP Mobile Application - Codearrest.pptx
MVP Mobile Application - Codearrest.pptxMVP Mobile Application - Codearrest.pptx
MVP Mobile Application - Codearrest.pptx
Mitchell Marsh
 
AWS Cloud Practitioner Essentials (Second Edition) (Arabic) Course Introducti...
AWS Cloud Practitioner Essentials (Second Edition) (Arabic) Course Introducti...AWS Cloud Practitioner Essentials (Second Edition) (Arabic) Course Introducti...
AWS Cloud Practitioner Essentials (Second Edition) (Arabic) Course Introducti...
karim wahed
 

Recently uploaded (20)

Seamless PostgreSQL to Snowflake Data Transfer in 8 Simple Steps
Seamless PostgreSQL to Snowflake Data Transfer in 8 Simple StepsSeamless PostgreSQL to Snowflake Data Transfer in 8 Simple Steps
Seamless PostgreSQL to Snowflake Data Transfer in 8 Simple Steps
 
Top 10 Tips To Get Google AdSense For Your Website
Top 10 Tips To Get Google AdSense For Your WebsiteTop 10 Tips To Get Google AdSense For Your Website
Top 10 Tips To Get Google AdSense For Your Website
 
Cultural Shifts: Embracing DevOps for Organizational Transformation
Cultural Shifts: Embracing DevOps for Organizational TransformationCultural Shifts: Embracing DevOps for Organizational Transformation
Cultural Shifts: Embracing DevOps for Organizational Transformation
 
active-directory-auditing-solution (2).pptx
active-directory-auditing-solution (2).pptxactive-directory-auditing-solution (2).pptx
active-directory-auditing-solution (2).pptx
 
Safe Work Permit Management Software for Hot Work Permits
Safe Work Permit Management Software for Hot Work PermitsSafe Work Permit Management Software for Hot Work Permits
Safe Work Permit Management Software for Hot Work Permits
 
React vs Next js: Which is Better for Web Development? - Semiosis Software Pr...
React vs Next js: Which is Better for Web Development? - Semiosis Software Pr...React vs Next js: Which is Better for Web Development? - Semiosis Software Pr...
React vs Next js: Which is Better for Web Development? - Semiosis Software Pr...
 
Independence Day Hasn’t Always Been a U.S. Holiday.pdf
Independence Day Hasn’t Always Been a U.S. Holiday.pdfIndependence Day Hasn’t Always Been a U.S. Holiday.pdf
Independence Day Hasn’t Always Been a U.S. Holiday.pdf
 
Break data silos with real-time connectivity using Confluent Cloud Connectors
Break data silos with real-time connectivity using Confluent Cloud ConnectorsBreak data silos with real-time connectivity using Confluent Cloud Connectors
Break data silos with real-time connectivity using Confluent Cloud Connectors
 
CViewSurvey Digitech Pvt Ltd that works on a proven C.A.A.G. model.
CViewSurvey Digitech Pvt Ltd that  works on a proven C.A.A.G. model.CViewSurvey Digitech Pvt Ltd that  works on a proven C.A.A.G. model.
CViewSurvey Digitech Pvt Ltd that works on a proven C.A.A.G. model.
 
dachnug51 - HCL Sametime 12 as a Software Appliance.pdf
dachnug51 - HCL Sametime 12 as a Software Appliance.pdfdachnug51 - HCL Sametime 12 as a Software Appliance.pdf
dachnug51 - HCL Sametime 12 as a Software Appliance.pdf
 
Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...
Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...
Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...
 
ENISA Threat Landscape 2023 documentation
ENISA Threat Landscape 2023 documentationENISA Threat Landscape 2023 documentation
ENISA Threat Landscape 2023 documentation
 
Cisco Live Announcements: New ThousandEyes Release Highlights - July 2024
Cisco Live Announcements: New ThousandEyes Release Highlights - July 2024Cisco Live Announcements: New ThousandEyes Release Highlights - July 2024
Cisco Live Announcements: New ThousandEyes Release Highlights - July 2024
 
Prada Group Reports Strong Growth in First Quarter …
Prada Group Reports Strong Growth in First Quarter …Prada Group Reports Strong Growth in First Quarter …
Prada Group Reports Strong Growth in First Quarter …
 
NBFC Software: Optimize Your Non-Banking Financial Company
NBFC Software: Optimize Your Non-Banking Financial CompanyNBFC Software: Optimize Your Non-Banking Financial Company
NBFC Software: Optimize Your Non-Banking Financial Company
 
AWS Cloud Practitioner Essentials (Second Edition) (Arabic) AWS Security .pdf
AWS Cloud Practitioner Essentials (Second Edition) (Arabic) AWS Security .pdfAWS Cloud Practitioner Essentials (Second Edition) (Arabic) AWS Security .pdf
AWS Cloud Practitioner Essentials (Second Edition) (Arabic) AWS Security .pdf
 
Discover the Power of ONEMONITAR: The Ultimate Mobile Spy App for Android Dev...
Discover the Power of ONEMONITAR: The Ultimate Mobile Spy App for Android Dev...Discover the Power of ONEMONITAR: The Ultimate Mobile Spy App for Android Dev...
Discover the Power of ONEMONITAR: The Ultimate Mobile Spy App for Android Dev...
 
NYC 26-Jun-2024 Combined Presentations.pdf
NYC 26-Jun-2024 Combined Presentations.pdfNYC 26-Jun-2024 Combined Presentations.pdf
NYC 26-Jun-2024 Combined Presentations.pdf
 
MVP Mobile Application - Codearrest.pptx
MVP Mobile Application - Codearrest.pptxMVP Mobile Application - Codearrest.pptx
MVP Mobile Application - Codearrest.pptx
 
AWS Cloud Practitioner Essentials (Second Edition) (Arabic) Course Introducti...
AWS Cloud Practitioner Essentials (Second Edition) (Arabic) Course Introducti...AWS Cloud Practitioner Essentials (Second Edition) (Arabic) Course Introducti...
AWS Cloud Practitioner Essentials (Second Edition) (Arabic) Course Introducti...
 

Beyond Breakpoints: A Tour of Dynamic Analysis

  • 1. beyond breakpointsA Tour of Dynamic Analysis Nathan Taylor, Fastly http://nathan.dijkstracula.net @dijkstracula
  • 3. T. Ball: The Concept of Dynamic Analysis ESEC ‘99 “Dynamic analysis is the analysis of the properties of a running program […] (usually through program instrumentation).”
  • 4. From Pin: Building Customized Program Analysis Tools with Dynamic Instrumentation
  • 5. From ReVirt: Enabling Intrusion Analysis through Virtual-Machine Logging and Replay
  • 6. classic use-cases Debugging a program crash or race condition Input to understand a new codebase Analysis of obfuscated software or malware
  • 7. who cares Huge gulf between what tools practitioners use in industry, and academic dynamic analysis work Many techniques shared with other cool areas like OS virtualization and compiler theory Techniques have different performance tradeoffs; knowing the lay of the land will help you choose the right tool for your problem
  • 8. dynamic vs static analysis Static analysis is a conservative approximation of runtime behavior Programs are only partially known (dynamic linking; user input) Imprecise: consider a program that typechecks but still has a bug Language specifications often assume a single thread of execution (or, don’t specify at all): “valid” programs can still allow race conditions!
  • 9. can’t prove correctness but can demonstrate failure
  • 10. today’s topics Omniscient Debugging and State Tracking Analyzing Concurrent Systems Areas of Future Work
  • 11. for each topic… What open-source tooling exists? How does it work under the hood? What contributions has academia made?
  • 17. J. Mickens: The Night Watch ;login Nov 2013 “Despair is when you’re debugging a kernel driver and you look at a memory dump and you see that a pointer has a value of 7. THERE IS NO HARDWARE ARCHITECTURE THAT IS ALIGNED ON 7. Furthermore, 7 IS TOO SMALL AND ONLY EVIL CODE WOULD TRY TO ACCESS SMALL NUMBER MEMORY. ”
  • 21. line 9 old i: N/A new i: 7 line 10 old i: 7 new i: 8 line 11 old j: N/A new j: 5 line 12 old i: 8 new j: 13
  • 24. Hofer et al. Design And Implementation of a Backward-In-Time Debugger NODe ‘06
  • 27. King et al. Debugging Operating Systems with Time-Traveling Virtual Machines Usenix ‘05 “…operating systems run for long periods of time, such as weeks, months, or even years.”
  • 28. King et al. Debugging Operating Systems with Time-Traveling Virtual Machines Usenix ‘05
  • 29. King et al. Debugging Operating Systems with Time-Traveling Virtual Machines Usenix ‘05 “Replay causes the virtual machine to transition through the same states as it went through during the original run” “A VM can be replayed by starting from a checkpoint, then replaying […] the network, keyboard, clock, and timing of interrupts”
  • 31. King et al. Debugging Operating Systems with Time-Traveling Virtual Machines Usenix ‘05 “Taking checkpoints every minute added less than 4% time overhead and 1-5 MB/sec space overhead.” “The logging added 3-12% in running time and 2-85 KB/sec in log space.” “Taking checkpoints every 10 second added 16-33% overhead and enabled reverse debugging commands to complete in about 12 seconds”
  • 32. GDB: linked list storage of every memory op Easy to build and reason about Both recording and replaying is very slow- + King (et al): Periodic state checkpointing Easy to jump between large period of time Can trade better fidelity for greater overhead Have to replay execution between checkpoints + + - King (et al): Only records external, non-deterministic events Reduces log size and improves performance synchronizing external events becomes complicated + -
  • 34. compilation-based tooling Rather than interrupt execution to return control-flow to a debugger, weave instrumentation into the existing codebase at runtime Allows for both better performance and more flexible analysis tools
  • 35. Luk et al. Pin: Building Customized Program Analysis Tools w/ Dynamic Instrumentation PLDI ‘05 “The goal is to provide an implementation platform for building program analysis tools” “Its API allows a tool to insert calls to instrumentation at arbitrary locations in the executable” “Pin provides efficient instrumentation by using a just- in-time compiler to insert and optimize code”
  • 36. …
 4 byte write to 0x7fff572b3b1c 4 byte write to 0x7fff572b3b1c
 1 byte write to 0x7f86c0c04b00 1 byte write to 0x7f86c0c04b04 4 byte write to 0x7fff572b3b20 …
  • 37. Luk et al. Pin: Building Customized Program Analysis Tools w/ Dynamic Instrumentation PLDI ‘05 recordMemWrite(%rip,  &i); recordMemWrite(%rip,  &i); recordMemWrite(%rip,  &j); recordMemWrite(%rip,  &i);
  • 38. movl        $0x7,  -­‐0x8(%rbp)INS_AddInstrumentFunction() push      %rbp   mov        %rsp,%rbp   mov        $0x100,%edi   callq    0x400430  <malloc@plt> TRACE_AddInstrumentFunction() push      %rbp   mov        %rsp,%rbp   mov        $0x100,%edi   callq    0x400430  <malloc@plt>   mov        %rax,0x200ac8(%rip)   mov        $0x0,%eax   callq    0x400540  <bar>   pop        %rbp   retq RTN_AddInstrumentFunction() push      %rbp   mov        %rsp,%rbp   mov        $0x100,%edi   callq    0x400430  <malloc@plt>   mov        %rax,0x200ac8(%rip)   mov        $0x0,%eax   callq    0x400540  <bar>   pop        %rbp   retq push      %rbp   mov        %rsp,%rbp   sub        $0x10,%rsp   movq      $0x0,-­‐0x8(%rbp)   mov        -­‐0x8(%rbp),%rax   add        $0x1c,%rax   mov        %rax,0x200ae9(%rip)   mov        $0x0,%eax   callq    0x40052d  <baz>   leaveq   retq push      %rbp   mov        %rsp,%rbp   mov        0x200b10(%rip),%rax   movl      $0x2a,(%rax)   pop        %rbp   retq IMG_AddInstrumentFunction()
  • 39. thread-sanitizer/blob/master/gcc/tree-tsan.c static  void   instrument_gimple  (gimple_stmt_iterator  gsi)   {      unsigned  i;      gimple  stmt;      enum  gimple_code  gcode;      tree  rhs,  lhs;      stmt  =  gsi_stmt  (gsi);      gcode  =  gimple_code  (stmt);      if  (gcode  ==  GIMPLE_ASSIGN)  {              /*  Handle  assignment  lhs  as  store.    */              lhs  =  gimple_assign_lhs  (stmt);              instrument_expr  (gsi,  lhs,  1);              /*  Handle  operands  as  loads.    */              for  (i  =  1;  i  <  gimple_num_ops  (stmt);  i++)  {                      rhs  =  gimple_op  (stmt,  i);                      instrument_expr  (gsi,  rhs,  0);                  }          }   } static  void   instrument_expr  (gimple_stmt_iterator  gsi,  tree  expr,  int  is_write)   {      enum  tree_code  tcode;      unsigned  fld_off,  fld_size;      tree  base,  rhs;      gimple  stmt;      gimple_seq  gs;      location_t  loc;      base  =  get_base_address  (expr);      if  (base  ==  NULL_TREE  ||  TREE_CODE  (base)  ==  SSA_NAME              ||  TREE_CODE  (base)  ==  STRING_CST)          return;      tcode  =  TREE_CODE  (expr);      /*  Below  are  things  we  do  not  instrument            (no  possibility  of  races  or  not  implemented  yet).    */      if  (/*  Compiler-­‐emitted  artificial  variables.    */              (DECL_P  (expr)  &&  DECL_ARTIFICIAL  (expr))              /*  The  var  does  not  live  in  memory  -­‐>  no  possibility  of  races.    */              ||  (tcode  ==  VAR_DECL                      &&  TREE_ADDRESSABLE  (expr)  ==  0                      &&  TREE_STATIC  (expr)  ==  0)              /*  Not  implemented.    */              ||  TREE_CODE  (TREE_TYPE  (expr))  ==  RECORD_TYPE              ||  tcode  ==  CONSTRUCTOR              ||  tcode  ==  PARM_DECL              /*  Load  of  a  const  variable/parameter/field.    */              ||  is_load_of_const  (expr,  is_write))          return;   static  gimple_seq   instr_memory_access  (tree  expr,  int  is_write)   {      tree  addr_expr,  expr_type,  call_expr,  fdecl;      gimple_seq  gs;      unsigned  size;      gcc_assert  (is_gimple_addressable  (expr));      addr_expr  =  build_addr  (unshare_expr  (expr),  current_function_decl);      expr_type  =  TREE_TYPE  (expr);      while  (TREE_CODE  (expr_type)  ==  ARRAY_TYPE)          expr_type  =  TREE_TYPE  (expr_type);      size  =  (TREE_INT_CST_LOW  (TYPE_SIZE  (expr_type)))  /  BITS_PER_UNIT;      fdecl  =  get_memory_access_decl  (is_write,  size);      call_expr  =  build_call_expr  (fdecl,  1,  addr_expr);      gs  =  NULL;      force_gimple_operand  (call_expr,  &gs,  true,  0);      return  gs;   static  tree   get_memory_access_decl  (int  is_write,  unsigned  size)   {      tree  typ,  *decl;      char  fname  [64];      static  tree  cache  [2][17];      is_write  =  !!is_write;      if  (size  <=  1)          size  =  1;      else  if  (size  <=  3)          size  =  2;      else  if  (size  <=  7)          size  =  4;      else  if  (size  <=  15)          size  =  8;      else          size  =  16;      decl  =  &cache[is_write][size];      if  (*decl  ==  NULL)  {              snprintf(fname,  sizeof  fname,  "__tsan_%s%d",                                is_write  ?  "write"  :  "read",  size);              typ  =  build_function_type_list  (void_type_node,                                            ptr_type_node,  NULL_TREE);              *decl  =  build_func_decl  (typ,  fname);          }      return  *decl;   }    if  (tcode  ==  COMPONENT_REF)  {              tree  field  =  TREE_OPERAND  (expr,  1);              if  (TREE_CODE  (field)  ==  FIELD_DECL)  {                      fld_off  =  TREE_INT_CST_LOW  (DECL_FIELD_BIT_OFFSET  (field));                      fld_size  =  TREE_INT_CST_LOW  (DECL_SIZE  (field));                      if  (((fld_off  %  BITS_PER_UNIT)  !=  0)                              ||  ((fld_size  %  BITS_PER_UNIT)  !=  0))  {                              /*  As  of  now  it  crashes  compilation.                                    TODO:  handle  bit-­‐fields  as  if  touching  the  whole  field.    */                              return;                          }                  }          }      /*  TODO:  handle  other  cases            (FIELD_DECL,  MEM_REF,  ARRAY_RANGE_REF,  TARGET_MEM_REF,  ADDR_EXPR).    */      if  (tcode  !=  ARRAY_REF              &&  tcode  !=  VAR_DECL  &&  tcode  !=  COMPONENT_REF              &&  tcode  !=  INDIRECT_REF  &&  tcode  !=  MEM_REF)          return;      func_mops++;      stmt  =  gsi_stmt  (gsi);      loc  =  gimple_location  (stmt);      rhs  =  is_vptr_store  (stmt,  expr,  is_write);      if  (rhs  ==  NULL)          gs  =  instr_memory_access  (expr,  is_write);      else          gs  =  instr_vptr_update  (expr,  rhs);      set_location  (gs,  loc);      /*  Instrumentation  for  assignment  of  a  function  result            must  be  inserted  after  the  call.    Instrumentation  for            reads  of  function  arguments  must  be  inserted  before  the  call.            That's  because  the  call  can  contain  synchronization.    */      if  (is_gimple_call  (stmt)  &&  is_write)          gsi_insert_seq_after  (&gsi,  gs,  GSI_NEW_STMT);      else          gsi_insert_seq_before  (&gsi,  gs,  GSI_SAME_STMT);   }
  • 40. Luk et al. Pin: Building Customized Program Analysis Tools w/ Dynamic Instrumentation PLDI ‘05 “Pin compiles from one ISA directly into the same ISA without going through an intermediate format and stored in a software-based code cache” “only code residing in the code cache is executed - the original code is never executed.”
  • 41. Luk et al. Pin: Building Customized Program Analysis Tools w/ Dynamic Instrumentation PLDI ‘05 “Pin compiles from one ISA directly into the same ISA without going through an intermediate format” movl        $0x7,  -­‐0x8(%rbp) addl        $0x1,  -­‐0x8(%rbp) mov          -­‐0x8(%rbp),  %eax sub          $0x3,  %eax mov          %eax,  -­‐0x4(%rbp) mov          $0x4(%rbp),  %eax add          %eax,  -­‐0x8(%rbp) recordMemWrite(%rip,  -­‐0x8(%rbp)) recordMemWrite(%rip,  -­‐0x8(%rbp)) recordMemWrite(%rip,  -­‐0x4(%rbp)) recordMemWrite(%rip,  -­‐0x8(%rbp)) movl        $0x7,  -­‐0x8(%rbp) addl        $0x1,  -­‐0x8(%rbp) mov          -­‐0x8(%rbp),  %eax sub          $0x3,  %eax mov          %eax,  -­‐0x4(%rbp) mov          $0x4(%rbp),  %eax add          %eax,  -­‐0x8(%rbp)
  • 42. code rewriting push      %rbp   mov        %rsp,%rbp   mov        $0x100,%edi   callq    0x400430  <malloc@plt>   mov        %rax,0x200ac8(%rip)   mov        $0x0,%eax   callq    0x400540  <bar>   pop        %rbp   retq push      %rbp   mov        %rsp,%rbp   sub        $0x10,%rsp   movq      $0x0,-­‐0x8(%rbp)   mov        -­‐0x8(%rbp),%rax   add        $0x1c,%rax   mov        %rax,0x200ae9(%rip)   mov        $0x0,%eax   callq    0x40052d  <baz>   leaveq   retq push      %rbp   mov        %rsp,%rbp   mov        0x200b10(%rip),%rax   movl      $0x2a,(%rax)   pop        %rbp   retq
  • 43. jump rewriting push      %rbp   mov        %rsp,%rbp   mov        $0x100,%edi   callq    0x400430  <malloc@plt>   mov        %rax,0x200ac8(%rip)   mov        $0x0,%eax   callq    0x400540  <bar>   pop        %rbp   retq push      %rbp   mov        %rsp,%rbp   sub        $0x10,%rsp   movq      $0x0,-­‐0x8(%rbp)   mov        -­‐0x8(%rbp),%rax   add        $0x1c,%rax   mov        %rax,0x200ae9(%rip)   mov        $0x0,%eax   callq    0x40052d  <baz>   leaveq   retq push      %rbp   mov        %rsp,%rbp   mov        0x200b10(%rip),%rax   movl      $0x2a,(%rax)   pop        %rbp   retq push      %rbp   mov        %rsp,%rbp   mov        $0x100,%edi   callq    0x400430  <malloc@plt>   mov        %rax,0x200ac8(%rip)   mov        $0x0,%wax   callq    0xdeadbeef   pop        %rbp   retq callq    0x400540  <bar>callq    0xdeadbeef
  • 44. jump rewriting push      %rbp   mov        %rsp,%rbp   mov        $0x100,%edi   callq    0x400430  <malloc@plt>   mov        %rax,0x200ac8(%rip)   mov        $0x0,%eax   callq    0x400540  <bar>   pop        %rbp   retq push      %rbp   mov        %rsp,%rbp   sub        $0x10,%rsp   movq      $0x0,-­‐0x8(%rbp)   mov        -­‐0x8(%rbp),%rax   add        $0x1c,%rax   mov        %rax,0x200ae9(%rip)   mov        $0x0,%eax   callq    0x40052d  <baz>   leaveq   retq push      %rbp   mov        %rsp,%rbp   mov        0x200b10(%rip),%rax   movl      $0x2a,(%rax)   pop        %rbp   retq push      %rbp   mov        %rsp,%rbp   mov        $0x100,%edi   callq    0x400430  <malloc@plt>   mov        %rax,0x200ac8(%rip)   mov        $0x0,%eax   callq    0x400540  <bar>   pop        %rbp   retq push      %rbp   mov        %rsp,%rbp   mov        $0x100,%edi   callq    0x400430  <malloc@plt>   mov        %rax,0x200ac8(%rip)   mov        $0x0,%eax   callq    0x400540  <bar>   pop        %rbp   retq push      %rbp   mov        %rsp,%rbp   sub        $0x10,%rsp   movq      $0x0,-­‐0x8(%rbp)   mov        -­‐0x8(%rbp),%rax   add        $0x1c,%rax   mov        %rax,0x200ae9(%rip)   mov        $0x0,%eax   callq    0xdeadbeef   leaveq   retq
  • 45. jump rewriting push      %rbp   mov        %rsp,%rbp   mov        $0x100,%edi   callq    0x400430  <malloc@plt>   mov        %rax,0x200ac8(%rip)   mov        $0x0,%eax   callq    0x400540  <bar>   pop        %rbp   retq push      %rbp   mov        %rsp,%rbp   sub        $0x10,%rsp   movq      $0x0,-­‐0x8(%rbp)   mov        -­‐0x8(%rbp),%rax   add        $0x1c,%rax   mov        %rax,0x200ae9(%rip)   mov        $0x0,%eax   callq    0x40052d  <baz>   leaveq   retq push      %rbp   mov        %rsp,%rbp   mov        0x200b10(%rip),%rax   movl      $0x2a,(%rax)   pop        %rbp   retq push      %rbp   mov        %rsp,%rbp   mov        $0x100,%edi   callq    0x400430  <malloc@plt>   mov        %rax,0x200ac8(%rip)   mov        $0x0,%eax   callq    0x400540  <bar>   pop        %rbp   retq push      %rbp   mov        %rsp,%rbp   mov        $0x100,%edi   callq    0x400430  <malloc@plt>   mov        %rax,0x200ac8(%rip)   mov        $0x0,%eax   callq    0x400540  <bar>   pop        %rbp   retq push      %rbp   mov        %rsp,%rbp   sub        $0x10,%rsp   movq      $0x0,-­‐0x8(%rbp)   mov        -­‐0x8(%rbp),%rax   add        $0x1c,%rax   mov        %rax,0x200ae9(%rip)   mov        $0x0,%eax   callq    0x40052d  <baz>   leaveq   retq push      %rbp   mov        %rsp,%rbp   mov        0x200b10(%rip),%rax   movl      $0x2a,(%rax)   pop        %rbp   retq
  • 47. Nethercote et al. Valgrind: A Framework for Heavyweight Dynamic Binary Instrumentation PLDI ‘07 “which values are undefined (i.e. uninitialised, or derived from undefined values) and can thus detect dangerous uses of undefined values.” “which values are tainted (i.e. from an untrusted source,) and can thus detect dangerous uses of tainted values.” “which word values are array pointers, and from this can detect bounds errors.”
  • 48. Nethercote et al. Valgrind: A Framework for Heavyweight Dynamic Binary Instrumentation PLDI ‘07 One interesting group of DBA tools are those that use shadow values. These tools shadow, purely in software, every register and memory value with another value that says something about it. We call these shadow value tools.
  • 51. Nethercote et al. Valgrind: A Framework for Heavyweight Dynamic Binary Instrumentation PLDI ‘07 One interesting group of DBA tools are those that use shadow values. These tools shadow, purely in software, every register and memory value with another value that says something about it. We call these shadow value tools.
  • 54. 0xc000000 memcheck/mc_main.c set? set? set? set? set? set? set? set?valid?
  • 55. 0xc000000 memcheck/mc_main.c set? set? set? set? set? set? set? set?valid?
  • 56. Nethercote et al. Valgrind: A Framework for Heavyweight Dynamic Binary Instrumentation PLDI ‘07
  • 57. Nethercote et al. Valgrind: A Framework for Heavyweight Dynamic Binary Instrumentation PLDI ‘07 disassemble-and- resynthesise: machine code is converted to an IR in which each instruction becomes one or more IR operations. This IR is instrumented and then converted back to machine code. copy-and-annotate: incoming instructions are copied through verbatim except for necessary control flow changes. Tools use the annotations to guide their instrumentation.
  • 58. Nethercote et al. Valgrind: A Framework for Heavyweight Dynamic Binary Instrumentation PLDI ‘07 “Pin provides no built-in support for [shadow memory], so tools must cope with the non-atomicity of loads/stores and shadow loads/stores themselves.”
 
 “Valgrind’s thread serialisation and asynchronous signal treatment frees shadow value tools from having to deal with this issue.”
  • 59. Luk et al. Pin: Building Customized Program Analysis Tools w/ Dynamic Instrumentation PLDI ‘05 “in Figure 7(b), Pin outperforms both DynamoRIO and Valgrind by a significant margin: on average, Valgrind slows the application down by 8.3 times […] and Pin by 2.5 times.”
  • 60. Pin: a “copy and annotate” system Lower overhead than the alternatives Close-to-the-metal instrumentation API Best for tracking control flow, rather than memory + + - Valgrind: a “disassemble and resynthsize” system Richer API and shadow memory allows for per-memory word metadata tracking Greater runtime overhead + -
  • 62. problem statement “What values did a piece of memory have over time?” “How does a value propagate through a running system?”
  • 63. Chow et al. Understanding Data Lifetime via Whole System Simulation USENIX Sec ‘04 TaintBochs tracks sensitive data by “tainting” it at the hardware level. Tainting information is then propagated across operating system, language, and application boundaries, permitting analysis of sensitive data handling at a whole system level.
  • 64. Chow et al. Understanding Data Lifetime via Whole System Simulation USENIX Sec ‘04 We have used TaintBochs to analyze sensitive data handling in several large, real world applications. Among these were Mozilla, Apache, and Perl, which are used to process millions of passwords, credit card numbers, etc. on a daily basis.
  • 65. Chow et al. Understanding Data Lifetime via Whole System Simulation USENIX Sec ‘04 “We must decide how operations in the system should affect shadow state. If two registers A and B are added, and one of them is tainted, is the register where the result are stored also tainted? We refer to the collective set of policies that decide this as the propagation policy.”
  • 66. Chow et al. Understanding Data Lifetime via Whole System Simulation USENIX Sec ‘04 “ Our basic propagation policy is simply that if any byte of any input value is tainted, then all bytes of the output are tainted. This policy is clearly conservative and errs on the side of tainting too much.”
  • 67. Chow et al. Understanding Data Lifetime via Whole System Simulation USENIX Sec ‘04 “ Sometimes tainted values are used by instructions as indexes into non-tainted memory (i.e. as an index into a lookup table).” For example, Linux routinely remaps keyboard device data through a lookup table before sending keystrokes to user programs. Thus, user programs never directly see the data read in from the keyboard device, only the non tainted values they index in the kernel’s key remapping table.”
  • 68. methodology shadow memory to track information flow time-traveling debugging to uncover relationship between tainted memory
  • 70. Slowinska & Bos: Pointless Tainting? Evaluating the Practicality of Pointer Tainting Eurosys ‘09
  • 71. Slowinska & Bos: Pointless Tainting? Evaluating the Practicality of Pointer Tainting Eurosys ‘09 “…in-depth analysis of the problems of pointer tainting on real systems which shows that it does not work against malware spying on users’ behaviour” “an analysis and evaluation of all known fixes to the problems that shows that they all have serious shortcomings.”
  • 72. Slowinska & Bos: Pointless Tainting? Evaluating the Practicality of Pointer Tainting Eurosys ‘09
  • 74. King et al. Debugging Operating Systems with Time-Traveling Virtual Machines Usenix ‘05 “Replay causes the virtual machine to transition through the same states as it went through during the original run” “A virtual machine can be replayed by starting from a checkpoint, then replaying all sources of nondeterminism […] the network, keyboard, clock, and timing of interrupts” Sequential
  • 75. problem statement “how to build a dynamic analysis tool that correctly runs in a concurrent environment?” “What challenges does concurrent software have that dynamic analysis could help with?”
  • 76. concurrent record & replay use locking operations as sequencing points use virtual memory page protection (come up with ideas for custom hardware)
  • 77. Nethercote et al. Valgrind: A Framework for Heavyweight Dynamic Binary Instrumentation PLDI ‘07 “Valgrind serialises thread execution with a thread locking mechanism. Only the thread holding the lock can run,” “The kernel still chooses which thread is to run next, but Valgrind dictates when thread-switches occur and prevents more than one thread from running at a time.” “How to best overcome this problem remains an open research question.”
  • 78. Savage et al: Eraser: A Dynamic Data Race Detector for Multithreaded Programs SOSP ‘97
  • 79. Savage et al: Eraser: A Dynamic Data Race Detector for Multithreaded Programs SOSP ‘97 “Eraser instruments each call to acquire or release a lock”
  • 80. Dunlap et al: Execution Replay for Multiprocessor Virtual Machines VEE ‘08
  • 81. Dunlap et al: Execution Replay for Multiprocessor Virtual Machines VEE ‘08 “if two memory instructions on different processors access the same page, and one of them is a write, there will be a CREW event between the instructions on each processor.” • concurrent-read: All cpus have read permission, but none have write permission. • exclusive-write: One cpu (called the owner) has both read and write permission; all virtual cpus have no permission.
  • 82. Dunlap et al: Execution Replay for Multiprocessor Virtual Machines VEE ‘08 “we use hardware page protections, enforced by the memory management unit (MMU), which will check each read and write as the instruction executes, and cause a fault to the hypervisor on any violation.”
  • 83. Dunlap et al: Execution Replay for Multiprocessor Virtual Machines VEE ‘08 “if two memory instructions on different processors access the same page, and one of them is a write, there will be a CREW event between the instructions on each processor.” • concurrent-read: All cpus have read permission, but none have write permission. • exclusive-write: One cpu (called the owner) has both read and write permission; all virtual cpus have no permission.
  • 84. CREW limitations virtual memory hardware only operates on 4k blocks DMA not implemented in the paper 10x slowdown in the worst case!
  • 87. race detection techiques Lockset algorithm Happens-before relation Hybrid techniques
  • 88. examples from https://github.com/google/sanitizers/wiki/ThreadSanitizerPopularDataRaces int  var;   void  Thread1()  {    //  Runs  in  one  thread.      var++;   }   void  Thread2()  {    //  Runs  in  another  thread.      var++;   }  
  • 89. examples from https://github.com/google/sanitizers/wiki/ThreadSanitizerPopularDataRaces //  Ref()  and  Unref()  may  be  called  from  several  threads.   //  Last  Unref()  destroys  the  object.   class  RefCountedObject  {    ...    public:      void  Ref()  {          ref_++;    //  Bug!      }      void  Unref()  {          if  (-­‐-­‐ref_  ==  0)    //  Bug!  Need  to  use  atomic  decrement!              delete  this;      }    private:      int  ref_;   };
  • 90. examples from https://github.com/google/sanitizers/wiki/ThreadSanitizerPopularDataRaces bool  done  =  false;   void  Thread1()  {      while  (!done)  {          do_something_useful_in_a_loop_1();      }        do_thread1_cleanup();   }   void  Thread2()  {      do_something_useful_2();      done  =  true;      do_thread2_cleanup();   }
  • 91. examples from https://github.com/google/sanitizers/wiki/ThreadSanitizerPopularDataRaces bool  done  =  false;   void  Thread1()  {      while  (!done)  {          do_something_useful_in_a_loop_1();      }        do_thread1_cleanup();   }   void  Thread2()  {      do_something_useful_2();      done  =  true;      do_thread2_cleanup();   }
  • 92. examples from https://github.com/google/sanitizers/wiki/ThreadSanitizerPopularDataRaces bool  done  =  false;   void  Thread1()  {      while  (!done)  {          do_something_useful_in_a_loop_1();      }        do_thread1_cleanup();   }   void  Thread2()  {      done  =  true;      do_something_useful_2();      do_thread2_cleanup();   }
  • 93. “Eraser instruments each call to acquire or release a lock” “In order to reconstruct the state of shared memory, each processor must view writes to shared memory by other processors as asynchronous events. We therefore need to preserve the order of execution between the processors.”
  • 94. Savage et al: Eraser: A Dynamic Data Race Detector for Multithreaded Programs SOSP ‘97
  • 95. Savage et al: Eraser: A Dynamic Data Race Detector for Multithreaded Programs SOSP ‘97
  • 96. Lamport et al: Time, Locks and the Ordering of Events in a Distributed System CACM ‘78
  • 97. Lamport et al: Time, Locks and the Ordering of Events in a Distributed System CACM ‘78
  • 98. Dunlap et al: Execution Replay for Multiprocessor Virtual Machines VEE ‘08
  • 99. Dunlap et al: Execution Replay for Multiprocessor Virtual Machines VEE ‘08 “In order to reconstruct the state of shared memory, each processor must view writes to shared memory by other processors as asynchronous events. We therefore need to preserve the order of execution between the processors.” “Only reads and writes to shared memory need to be ordered with respect to each other"
  • 100. Savage et al: Eraser: A Dynamic Data Race Detector for Multithreaded Programs SOSP ‘97
  • 101. O’Callahan & Choi: Hybrid Dynamic Data Race Detection PPoPP ‘03 “Unfortunately violations of the lockset hypothesis are not always programming errors. One common example is programs which use channels to pass objects between threads in the style of CSP [15]. In such programs thread synchronization and mutual exclusion are accomplished by explicit signaling between threads.”
  • 102. Lockset - ensure >1 lock always protects shared me Doesn’t need to observe a bug happening to find a race False positives if different synchronization techniques used + - Happens-Before - shared accesses must be separated by a sync Causality def’n doesn’t require locks: fewer false positives Observing races depends on execution order Slower to run in practice than Lockset + - -
  • 103. Serebryany & Iskhodzhanov: ThreadSanitizer: data race detection in practice WBIA ‘12
  • 104. a hybrid approach Full happens-before tracking for synchronize operations Lockset approach to determine whether causally-related locksets are non-empty
  • 105. Serebryany & Iskhodzhanov: ThreadSanitizer: data race detection in practice WBIA ‘12
  • 106. Serebryany & Iskhodzhanov: ThreadSanitizer: data race detection in practice WBIA ‘12
  • 107. what have we seen Time-Traveling Debugging for reconstructing previous program state JIT instrumentation for efficient control flow modification Shadow memory for efficient memory introspection
  • 108. the trace is out there Novel and experimental hardware Query languages and storage for large trace data Trace visualization techniques