cd2064a1322/p12_1.jpg)
2.7 (Old) Startup
CPU Usage

2.8 (New) Startup
CPU Usage
## Startup Breakdown
Enumerate asset 60110a4e5decd2064a1322/p17_1.jpg)
## High
CPU Time
Single threaded code
Inefficient algorithms
Branch misprediction, cache misses
Spin locks
## High
CPU Time
Single threaded code
Inefficient algorithms rouping:
Function / Call Stack | | Function / Call Stack | CPU Time | Wait Time by Utilization ▼ | Wait Count | Module | | | 0 码力 |
76 页 |
2.22 MB
| 1 年前 3
technical details and surprising conclusions that virtual functions can be actually faster. Since CPU architectures are mentioned, I'd expect to see deep assembly profiling.
## Ok, some assembly is But I have another computer
## Different CPUs
## Laptop:
Model name: Intel(R) Core(TM) i5-10310U CPU @ 1.70GHz
Thread(s) per core: 2
Core(s) per socket: 4
Stepping: 12
## Desktop:
Thread(s) per core: /9/2/1092c89fc888067fdbc59ca7369237f9/p14_1.jpg)
## Conclusions
## Relevant factors
• CPU manufacturer
• CPU version
• Precise code path
• Temperature(?)
• OS interrupts(?)
- Compiler optimization
0 码力 |
20 页 |
1.19 MB
| 1 年前 3
TVM@AliOS
## PRESENTATION AGENDA
☑ TVM @ AliOS Overview
TVM @ AliOS ARM CPU
TVM @ AliOS Hexagon DSP
TVM @ AliOS Intel GPU
☑ Misc
## PART ONE TVM @ AliOS Overview
## AliOS Overview
• AliOS (www.alios 驱动万物智能
## PART TWO AliOS TVM @ ARM CPU
## AliOS TVM@ARM CPU
• Support TFLite (Open Source and Upstream Master)
• Optimize on INT8 & FP32
## AliOS TVM @ ARM CPU INT8
Convolution
• NHWC layout
• AliOS TVM @ ARM CPU INT8
TVM / QNNPACK Speed Up @ Mobilenet V2 @ rasp 3b+ AARCH64

## AliOS TVM @ ARM CPU INT8
Depthwise
0 码力 |
27 页 |
4.86 MB
| 1 年前 3
经过这么多年大流量服务端架构设计的沉淀,go-zero 在保护服务的稳定性上下足了功夫,不管是 CPU 密集型还是 IO 密集型服务,go-zero 都能很好的保护服务在如下场景不被拖垮或卡死:
远超服务容量的突发大流量
CPU 打满
• 上下游故障或者超时
• MySQL、MongoDB、Redis 等中间件故障或者超负载(典型的是 CPU 飙高)

那我们想想,如果我们的服务 CPU 被打满了,是不是后面所有的请求也都被卡住了?等服务处理 不懂的话,可以来 go-zero 群里讨论讨论。。。
### 2.1 模拟 CPU 密集型服务
有人可能会问 CPU 密集型服务怎么定义?你的服务 CPU 会打满吗?处理请求会包含复杂的计算逻辑吗?你经常需要通过 cpu profiling 来优化性能吗?可以理解为服务的 IO 比较快,或者比较少,瓶颈是在 CPU 消耗上。
你可以直接用 goctl quickstart -t mono 命令生成一个
0 码力 |
13 页 |
1.68 MB
| 2 年前 3
benchmark::DoNotOptimize(a);
}
测试结果(均为 gcc-03)
|Benchmark|Time|CPU|Iterations|
|---|---|---|---|
|testSorted<upperTernary>|547329 ns|546965 ns|1279|
|testSorte 排序为什么对有分支的版本影响那么大
## 为什么需要流水线
- 为了高效,CPU 的内部其实是一个流水线 (pipeline)。流水线的目的是能把原本串行的一系列指令并行化。为了理解为什么需要流水线,我们先反过来,假设没有流水线,会有什么坏处。
例如,右边你今天早上的任务清单。
• 请问你这些任务总共需要多少时间?
|任务|时间|占用资源|
|---|---|---|
|洗脸|5 分钟|眼睛,嘴巴,手| 分钟嘛!可以,不过这是在你每次只做一件事的情况下,例如你烧开水时就站在旁边干瞪眼,什么也不做,其实完全可以在烧开水的同时洗脸刷牙呀!原始的 CPU 也是这样,ALU 在运算的时候指令解码单元就在旁边干瞪眼,要等 ALU 跑完写回寄存器来指令解码单元才开始继续工作,很低效。
|任务|时间|占用资源|
|---|---|---|
|洗脸|5 分钟|眼睛,嘴巴,手|
|烧开水|10 分钟|煤气灶|
|刷牙|5 分钟|嘴巴,手|
0 码力 |
47 页 |
8.45 MB
| 2 年前 3
store:手动执行下线操作 TiKV 节点数量
。Store Status – Tombstone store:下线成功的 TiKV 节点数量
。Current storage usage : TiKV 集群存储空间占用率
超过 80% 应考虑添加 TiKV 节点
。99% completed_cmds_duration_seconds : 99% pd-server 请求完成时间
小于 5ms
。average 。Pending task:累积的任务数量
除了 pd worker,其他任何偏高都属于异常
。stall:RocksDB Stall时间
大于 0,表明 RocksDB 忙不过来,需要注意 IO 和 CPU 了
。channel full:channel 满了,表明线程太忙无法处理
如果大于 0,表明线程已经没法处理了
。95% send_message_duration_seconds:95% join-currency
• join-concurrency 并发执行 join 的 goroutine 数量
• 默认:5
- 看数据量和数据分布情况,一般情况下是越多越好,数值越大对 CPU 开销越大
## query-log-max-len
• 日志中记录最大 sql 语句长度
• 默认:2048
• 过长的请求输出到 log 时会被截断
## slow-threshold
0 码力 |
444 页 |
4.89 MB
| 1 年前 3