Slipstream: Automatic Interprocess Communication Optimization

关键词:容器本地TCP通信
实验源代码

0

TCP endpoint: A 2-tuple,<local IP address,TCP port number>

shim:In computer programming, a shim is a small library that transparently intercepts an API, changing the parameters passed, handling the operation itself, or redirecting the operation elsewhere

1 背景

本地应用之间的TCP交互成本过高而且没必要,在OS上的优化将导致失去TCP的通用型和移植性优点,在应用上改代码更不用提。

2 主要目标&基本思路

2.1 主要目标

基于识别和优化本机TCP通信,在不改动kernel(含kernel module)和application的基础上减少延迟,增加吞吐。同时,对于一方使用slim另一方不使用也要兼容

2.2 基本思想

在libc之上插入一个optional shim library ,仅依赖TCP的可观察这一特性来检测本地TCP通信。

a backwards-compatible algorithm for classifying communication between two end point

检测到之后,将替换为一种更快的本地通信来模拟所有的TCP操作,难点在于在user-level中replicate kernel-level TCP state,以及对上层调用保留TCP接口语义以及可靠性保证,失败重传等机制

replace TCP with Unix domain sockets as the transport layer

3 挑战&架构

3.1 挑战

  • 不同namespace中(如虚拟网络)会在网络中出现。一对相同的IP/port pair属于不同的流(tcp endpoint in kernel不一样)的情况

  • 内核可以把一个TCP endpoint映射在不同进程上;一个kernel-level TCP endpoint可以与多个userspace file descriptors映射。slipstream需要检测应用在kernel的交互(如对endpoint instance的创建和删除)

  • Inband && outband

    TCP协议不支持在端点之间“outband”传输额外数据的任何可靠机制(有TCP紧急数据功能,但用于传输大量数据的方法不可靠);

    另一方面,将任何此类数据“inbound”注入流中会破坏未使用Slip stream的应用,因此无法过滤额外数据。 这使检测两个tcp endpoint在同一台主机以及确保Slipstream可用性变得复杂。

  • POSIX文件描述符通过大量系统调用实现大量的功能,必须正确地实现它们才能透明地保留应用程序功能。

3.2 架构

截屏2020-10-18 下午2.37.35.png

slipstream构造了一个shim library: libipc,负责跟踪所有与TCP相关的系统调用中的tcp endpoint,并向系统范围的进程ipcd报告所有TCP流标识信息。 ipcd收集并记录所有流信息,并使用流匹配算法分析所有现有流。

一旦Slipstream检测到流的两个端点都是本地的,libipc就会修改信道以使用本地IPC传输(在我们的实现中为UDS)

4 实现

  • 识别两个端点都在本地的TCP通信流;

  • 用替代的本地传输代替TCP;

  • 模拟TCP套接字接口的大多数功能

拦截:通过LD_PRELOAD的方法拦截应用的socket调用

追踪:为了追踪跟踪TCP流,Slipstream为应用程序创建和使用的每个TCP endpoint分配一个unique endpoint ID(EPid),libipc会给每个EPid分配一个状态

Pre-opt: 没有尝试优化

No-opt:尝试优化失败

Opt:优化成功

Libipc通过跟踪关键的系统调用(例如fork/TCP modifying operations)来复制在user-level的endpoint state;

  • Libipc在跟踪这些调用的时候,维护着一个持有这个endpoint至少一个fd的进程的计数;而且将fd EPid这些细节尽可能详细的存放在libipc而不是频繁与ipcd交互增加额外开销

  • 实现上,libipc维护着两张表

    • Track file descriptors:做到和kernel一个粒度,并包含了fd到endpoint的关系映射

    • Track endpoints:EPid->state

  • 通过观察 the initial TCP conversation(由流的前N bytes的哈希值和连接创建调用的精确timing组成)来被动识别本地的流,当这些信息不足以提供判断,不优化

step1:When a new TCP socket is connected,libipc immediately records the time of the connection attemptand forwards it toipc dalong with the IP and port information.

step2:Ipcd uses this information to identify endpoints that are likely candidates for pairing.

step3:Ipcd can eagerly detect if multiple pairings are possible due to overlapping address/port pairs and timing information.

step4:After Nbytes have been sent in one direction on the stream,libipc contacts ipcd to attempt to find a matching endpoint.

step5: If a single matching endpoint is found,ipcd initiatesthe optimization procedure

5 实验结果

服务器应用程序的吞吐量提高了16-100%,Docker的吞吐量提高了100-200%,微基准测试表明延迟减少了一半

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343