HackMD
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights
    • Engagement control
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Versions and GitHub Sync Note Insights Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       owned this note    owned this note      
    Published Linked with GitHub
    Subscribed
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    Subscribe
    BSDCam Transport Session ======================== * Agenda Bashing * Linux NetDev Report from thj@ * Co-located with IETF event * Not especially useful for FreeBSD people * Things they are doing: * tight vendor intergration for switch ASICs * switchdev API, switch configurations * Mellanox, Barefoot, and Cumulous * FreeBSD likely to lag behind * Barefoot: Intellectual Property in compiler * Would be willing to open source spec for configuring ASIC * Librification of netfilter tools (firewall rules in JSON) * Write firewall config tools in higher level languages * What do sysadmins want to have libs/JSON etc * Demo of netfilter implemented in eBPF * Have a "Tell developers what you think/want" session at MeetBSD * Getting more feedback from users and sysadmins * Have a FreeBSDCon, a devsummit focused on getting users to tell us about their needs/pains/desires * Making IPv6 Suck Less * Perform Better * Missing RFCs * thj is implementing RFC7112 * Roaming WiFi: ipv4 renegotiates DHCP, but SLAAC doesn't get reset * jtl's concern: the complexity of headers, cases where host may be instructed to do work. * There are some measurements of what % of traffic gets dropped if it has extension headers. Cisco is apparently doing fresh stats on this. * jtl would like a sysctl bitmask to ignore extension specific types of headers * A bug with v6 fragments, if RSS enabled, counter of how many headers have been processed gets reset to 0 * Optimizations that have only been done to v4, may need to be replicated for v6 * v4 may be more strictly compliant, v6 is often less complaint * v4 would not accept more than 16 fragments * bz would liken us to be RFC8200 complaint * Who wants to actually work on v6: thj, bz, gallatin@, left 1/2 of rrs@, right 1/2 of tuexen@ * Old ipv6 todo page: https://wiki.freebsd.org/IPv6/ToDo * An equiv to the v4 RFC page: https://wiki.freebsd.org/TransportProtocols/tcp_rfc_compliance * We need more test cases, both for things that work (so we don't break them), and for things that are broken (so we know when it is fixed) * OpenBSD has a python based v6 test suite that works on FreeBSD * tuexen@ has a set of test packages that are ready to be hooked up to CI * Take Away: status reports on the bi-weekly transport call * IP[46]/TCP Reassembly Bugs/Stuff * Researcher found that 'walking linked list is slow, and bad' * The kernel created long linked lists for out-of-order TCP segments and fragment chains. * IPv6: Used to limit resources in very differently than v4, now uses the same vocabularity * IPv6 fragments were not hashed into buckets, now they are * Performance suffers too much when the list exceeds 100, this is the new limit * Mostly just a workaround, papers over the problem. Needs an algorithmic fix * If more than a trivial number of fragments, needs a better solution. glebius@ is working on an implementation of fragment processing code using red-black tree. Needs a security review. Is the performance impact acceptable. * TCP: rrs@ working on collescing code * Updated version coming to phabricator soon * tuxen@ wrote test cases for reassmbly * jhb@ and jtl@ have a todo list * use queue.h * v6 code requires changes in many places * Need a modernization pass, remove #ifdef KAME etc * Too much noise in the code, harder to read and reason about * Need a regression suite * Give it the FreeBSD stink(tm) * bz@ may have old project in perforce that does some cleanup, likely applies fairly well * Todo: pf * brooks@ would prefer a cleanup of the IOCTLs * TFO (TCP Fast Open) * Who might have patches? * Known interop problem with Windows * TCP option alignment * tuexen@ has test cases for this, need to extract them from him (with pliers) * Limelight extension with shared secret * Alternate Stacks * Infrastructure * Allow different TCP stacks concurrently (side-by-side) * Use setsockopt() to assign individual sockets to the alternative stacks * Requires that when you switch stacks you must update the common TCPcb * A/B test stacks, route n% of traffic to the new stack, compare stats from the two stacks * Can be used to different workloads * Live-patching by loading newer version of stack without rebooting * Allows much more active development, frees development from usual requirements (work across low cpu/ram count to high cpu/ram count) * RACK * IETF draft: https://tools.ietf.org/html/draft-ietf-tcpm-rack-04 * Our code only supports draft -02. * Netflix not driven to update at this time * Recent ACK + Tail loss probe * use RTT to predict when to try to keep transmitting * use SACK to use RTT to predict when to retransmit * PRR Proportional Rate Reduction (https://tools.ietf.org/html/rfc6937), keep sending more data as you get ACKs instead of waiting for 1/2 of window * Burst mitigation, high percision timing system * Much better quality of experience * Keeps a send map, how many times each segment has been sent, better than old SACK * robert@ asks about reducing diff between base stack and RACK * Improved recovery * In head, higher cost to use * Most all video traffic at Netflix uses RACK * Even fill traffic will use RACK eventually * Head is a bit different than what Netflix is using right now, head is considered far better * Doing new tests to compare 2017 to 2018 stack * BBR * Experimental congestion control, but actually a different stack * Builds on RACK * Even higher than cost than RACK * BBR v1.0 is controversial * Netflix has enhanced this for their implementation * In router small buffer scenarios it is unfair to newreno/cubic * BBR v2.0 looks to improve this * Netflix not necessarily sold on Google's ideas * Assumes loss is not congestion based * "Policer detection" to notice when you are being rate limited by a middlebox * "Blackbox Recorder" * Volunteer to make ports? :-) * Came from Netflix * Log state of TCPcb, the packet, timers, other data to ring buffer * Can be dumped out to userspace * Tooling exists, needs ports * Writes out pcapng files * Traceviewer provides visual interface * Analysis daemon that runs continuously and runs tests againsts the data, in the form of assertions * After panic, can extract the data from the ring buffer * RACK and BBR development depended upon blackbox * Extend wireshark to understand the metadata * Attend SharkFest to present FreeBSD work * RCU "Locking" * mmacy@ applied RCU to IP stack * Requires a mindset change * read-locks are not always "locks" * Register your intention to read the data structure * ConcurrencyKit will not garbage collect the data while you are using it * In 13 we should shift to using these more * To date we only have a first pass * More though about which data structures requires "full" locks * Make engineering decisions to use the new CK features more * Avoid "lock chains" that require acquiring many locks in a sequence * Rethink locking from a more fundamental prespective * Used to allow add/remove from list, while another process is walking through the list * Netflix is committed to upstreaming and being good community citizens *

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully