时间片 线程切换 指令周期 流水线 TPS的初步了解


情况说明

Redis 单线程提供服务, 可以支撑十万级别的TPS
通过以个非常简单的测试
redis-benchmark -c 50 -n 50000 ping
Intel 8369HB 3.3Ghz 14万TPS
阿里 倚天710 2.7Ghz 16万TPS
AMD 9T34 3.4Ghz 22万TPS 可以推测, Redis执行一次ping到客户端, 在本地的情况下大概耗时
1S/20万 约等于 5微秒 认为: redis可以在 5 微秒之内 完成 客户端连接-命令执行-推送结果到客户端
如果是在不同机器上面, 那么时间差异可能会比较大一些. 因为有网络层的延迟与交互. 想基于这个数据, 进行一些简单的分析与判断.

CPU与操作系统时间片

在多核CPU之前,PC以及一些简单的服务器一般只有一颗CPU
这种情况下. 实现多用户,多任务的处理都是通过时间片的概念来进行. CPU将自己的处理时间分为一定大小的时间片,给不同的任务进行处理.
任务之间如果时间片到了需要让出时间片, 交由其他任务进行. linux的发行版的时间片是20ms到800ms不等.
时间片的让出有 主动让出, 也有被动让出.
不管哪种让出都需要考虑 线程切换, 上下文切换. 线程切换, 进程切换, 系统调用, 中断 都会导致上线文切换. 上下文切换 需要CPU 保存当前在运行进程的TLB,以及寄存器, 指令位置等信息
等待当前任务有了时间片时在加载进内存. 需要说明一点:
线程切换的成本比较高. 可能需要 1000-2000个质量周期, 耗时可能有1微秒甚至更多. 回到刚才的例子, redis 在执行时面对不同的client 可能需要进行一次上下文切换,用于返回给特定的client信息.
一进一出, 损耗可能就有 2微秒, 加上一些协议开销. 理论上 redis执行一条指令 核心进程只需要 1微秒左右. 理论上redis可以拿到百万级别的 TPS. 但是因为各种开销, 导致可能无法达到这个上限.

指令周期和流水线

CPU执行一条指令的时间, 可以大概的认为是指令周期.
一般2Ghz的CPU 他执行一条uop的时间可以简单理解为是 0.5纳秒. 但是需要注意的一点是: 虽然现在x86号称是CISC, 但是在x86CPU的指令解析和发射的部分其实是使用的RISC的技术.
他将复杂指令解析成一个一个微笑的 uop 才进入流水线进行调度. 虽然将macro的op拆解成了一个一个minor op, 看起来会导致指令使用的周期变多.
但是因为流水线和多发射超标量的存在, 一个周期可以发射6-8个指名. 并且多级流水线的存在同时运行的命令要更加多
会带来更多的性能收益. 流水线里面将复杂的命令拆解到不通的周期中去执行.
在遇到流水线毛线,或者是指令等待或者是冲突时, CPU会设计多种方式进行避免和提速. 国产信创CPU可以做到多核心高频率, 但是很难在流水线和指令集并行部分达到Intel和AMD的水平,
所以看机器的性能不能全看主频和核数, 还要看很细节的 指令流水和多发射相关信息. 看量化分析性能的书时, 最近这些年性能的提升很多在用乱序指令集的一些优化.
Intel有几百个OOB的缓存, 可以都执行指令后统一进行排序返回和回写, 尽可能的提升性能.

TPS

TPS = 工作线程数/响应时间
所以提高TPS的方法就是 提高工作线程数和降低响应时间. 但是提供了工作线程, 会导致上下文切换增多好耗费更多的寄存器和内存来保存线程的状态. 超过一定限度, 线程切换的成本会极具上升. 响应时间的提高不仅可以提升客户感受还能够尽快的完成任务.
现在我们发现, 国产设备不够优秀的地方就在于响应时间.
他的核心数足够多, 可以实现很多线程进行工作, 但是每个线程的相应时间却比较大, 到执客户反映不好用. 虽然很多国产CPU的主频和核心数较多, 但是他们的指令集, 流水线, 乱序,以及架构等部分不如国际厂商先进. 所以很多时候不能单纯看核心和主频,还要看厂商和型号.

时间片 线程切换 指令周期 流水线 TPS的初步了解的更多相关文章

  1. Day035--Python--管道, Manager, 进程池, 线程切换

    管道 #创建管道的类: Pipe([duplex]):在进程之间创建一条管道,并返回元组(conn1,conn2),其中conn1,conn2表示管道两端的连接对象,强调一点:必须在产生Process ...

  2. 浅谈linux线程切换问题

    http://www.jb51.net/article/102059.htm 处理器总处于以下状态中的一种: 1.内核态,运行于进程上下文,内核代表进程运行于内核空间 2.内核态,运行于中断上下文,内 ...

  3. linux线程切换问题

    处理器总处于以下状态中的一种: 1.内核态,运行于进程上下文,内核代表进程运行于内核空间: 2.内核态,运行于中断上下文,内核代表硬件运行于内核空间: 3.用户态,运行于用户空间:   一个进程的上下 ...

  4. EventBus 线程切换原理

    主要问题其实只有两个,其一:如何判断当前发送事件的线程是否是主线程:其二:如何在接收事件时指定线程并执行: 一个一个来看. 1.如何判断是否在主线程发送 EventBus在初始化的时候会初始化一个Ma ...

  5. RxJava学习;数据转换、线程切换;

    Observable(被观察者,发射器)发送数据: just:发送单个的数据: Observable.just("cui","chen","bo&qu ...

  6. RxJava 操作符 on和doOn 线程切换 调度 Schedulers 线程池 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  7. linux线程切换和进程切换

    进程切换分两步: 1.切换页目录以使用新的地址空间 2.切换内核栈和硬件上下文 对于linux来说,线程和进程的最大区别就在于地址空间,对于线程切换,第1步是不需要做的,第2是进程和线程切换都要做的. ...

  8. java中线程切换的开销

    思路: 开三个线程A,B,C 线程A不断的调用LockSupport.park()阻塞自己,一旦发现自己被唤醒,调用Thread.interrupted()清除interrupt标记位,同时增加自增计 ...

  9. EventBus 消息的线程切换模型与实现原理

    一. 序 EventBus 是一个基于观察者模式的事件订阅/发布框架,利用 EventBus 可以在不同模块之间,实现低耦合的消息通信. EventBus 因为其使用简单且稳定,被广泛应用在一些生产项 ...

  10. Java线程切换(一)

    (本文由言念小文原创,转载请注明出处) 一  前言有Android开发经验的同学都清楚,UI的更新必须在主线程中进行,且主线程不能被阻塞,否则系统ANR异常.我们往往做一些数据处理是耗时操作,必须要在 ...

随机推荐

  1. 密码加密处理MD5与Salt

    作用:一般用来加密或者签名(校验和) 特点: MD5算法不可逆如何内容相同无论执行多少次md5生成结果始终是一致 生成结果:始终是一个16进制32位长度字符串 //使用MD5 + salt +hash ...

  2. 解锁华为云AI如何助力无人车飞驰“新姿势”,大赛冠军有话说

    摘要:在2020年第二届华为云人工智能大赛•无人车挑战杯赛道中,"华中科技大学无人车一队"借助华为云一站式AI开发与管理平台ModelArts及HiLens端云协同AI开发应用平台 ...

  3. 让数据库无惧灾难,华为云GaussDB同城双集群高可用方案正式发布!

    摘要:在华为全联接2021期间,华为云GaussDB(for openGauss)正式推出重大内核新特性--同城双集群高可用方案,提供金融级高可用服务,支持RPO=0 .RTO<60s的同城双集 ...

  4. 从java到JavaScript(1),看Dart:对比Java/Go/Swift/Rust

    关于 JIT与AOT,之前整理过<JIT-动态编译与AOT-静态编译:java/ java/ JavaScript/Dart乱谈>,一文不足以概括dart. 从编程语言生态看Dart 大多 ...

  5. 火山引擎DataLeap一站式数据治理解决方案及平台架构

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 在字节跳动内部,DataLeap数据平台数据治理团队致力于建立一站式.全链路的数据治理解决方案平台. 数据治理的概 ...

  6. python 提供一段文本和关键词列表进行标红处理

    def highlight_keywords_html(text, keywords): for keyword in keywords: text = text.replace(keyword, ' ...

  7. Grafana--Min step与Resolution

    问题: 今天在统计机房请求量的时候,发现时间选择12 hours时还是正常的,但是选择24 hours时就有一些线条出不来,数据也有缺失,如下: 12 hours 24 hours 问了同事,说是数据 ...

  8. Mysql--日期,时间相关

    一.日期,时间戳格式转换 在数据库中,时间的存储格式一般为时间戳,但这样对于使用人员不太方便,故在查询时可以先转换格式 1.1.FROM_UNIXTIME() 将时间戳转换为日期格式 > sel ...

  9. PS CJ37/CJ38 增加和返回预算

    一.预算补充CJ37/预算返回CJ38 二.补充预算CJ37,点击保存 预算返回CJ38,点击保存 三.代码示例 预算补充代码 "------------------------------ ...

  10. 彻底搞懂 IO 底层原理

    武侠小说里有很多的"心法"和"招式".计算机技术里的"心法"和"招式"呢,我们可以简称为"道"和&q ...