<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Systems on Nikhil&#39;s blog</title>
    <link>https://master--suspicious-stonebraker-7d2d21.netlify.app/tags/systems/</link>
    <description>Recent content in Systems on Nikhil&#39;s blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-US</language>
    <lastBuildDate>Sat, 24 Nov 2018 14:05:00 -0700</lastBuildDate>
    <atom:link href="https://master--suspicious-stonebraker-7d2d21.netlify.app/tags/systems/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Sampling Profiler Internals: Suspending Threads</title>
      <link>https://master--suspicious-stonebraker-7d2d21.netlify.app/post/2018/sampling-profiler-internals-suspending-threads/</link>
      <pubDate>Sat, 24 Nov 2018 14:05:00 -0700</pubDate>
      <guid>https://master--suspicious-stonebraker-7d2d21.netlify.app/post/2018/sampling-profiler-internals-suspending-threads/</guid>
      <description>This is part 2 of the Sampling Profilers Internals series.&#xA;Introduction Suspending threads Stack unwinding Symbolication Presenting profile output Extending the profiler to managed languages As described in the introduction, a sampling profiler captures the stack of each thread every few milliseconds. To do this, it is preferable to suspend the thread 1. We don&amp;rsquo;t want the stack changing under us as we are profiling. Even worse, a thread could just terminate while we were attempting to profile it and invalidate all the memory we want to read.</description>
    </item>
    <item>
      <title>Sampling Profiler Internals: Introduction</title>
      <link>https://master--suspicious-stonebraker-7d2d21.netlify.app/post/2018/sampling-profiler-internals-introduction/</link>
      <pubDate>Sat, 24 Nov 2018 14:00:00 -0700</pubDate>
      <guid>https://master--suspicious-stonebraker-7d2d21.netlify.app/post/2018/sampling-profiler-internals-introduction/</guid>
      <description>Sampling profilers are useful tools for performance analysis of programs. I&amp;rsquo;ve spent a lot of time over the past several months digging into various implementations of sampling profilers and reading a lot about symbolication, threads, stack unwinding and other gory operating system details. This series of posts attempts to summarize my understanding.&#xA;Introduction Suspending threads Stack unwinding Symbolication Presenting profile output Extending the profiler to managed languages Background High CPU usage is a problem that comes up often in widely used software.</description>
    </item>
    <item>
      <title>CppCon 2017 Talks I enjoyed</title>
      <link>https://master--suspicious-stonebraker-7d2d21.netlify.app/post/2017/cppcon-2017-talks/</link>
      <pubDate>Sat, 09 Dec 2017 08:56:04 -0800</pubDate>
      <guid>https://master--suspicious-stonebraker-7d2d21.netlify.app/post/2017/cppcon-2017-talks/</guid>
      <description>I spent a recent holiday listening to several CppCon talks. I&amp;rsquo;m hooked!&#xA;I was impressed by the generally high quality of the talks. The lack of &amp;ldquo;use my/my company&amp;rsquo;s framework which is so awesome!&amp;rdquo; talks was refreshing. In addition, the use cases where C++ trumps most competition are often either performance sensitive, or correctness sensitive under strong constraints. Of course, this means contending with the syntactic and semantic complexities C++ throws at you.</description>
    </item>
    <item>
      <title>Canceling socket operations using I/O multiplexing.</title>
      <link>https://master--suspicious-stonebraker-7d2d21.netlify.app/post/2017/cancellable-select/</link>
      <pubDate>Wed, 29 Mar 2017 07:49:03 -0700</pubDate>
      <guid>https://master--suspicious-stonebraker-7d2d21.netlify.app/post/2017/cancellable-select/</guid>
      <description>I spent the last couple of months diving into networking code at work. This led to some interesting discoveries, including how to allow an in-progress network operation to be canceled on demand. This can be an attempt to establish a connection, or a socket read or write. The standard use case is to allow the user to cancel an operation or to allow a clean shutdown when multiple threads are operating on sockets.</description>
    </item>
  </channel>
</rss>
