两个示例分析系统优化的选择

news2024/9/30 19:38:57

这次找的工作,又一次与系统优化相关。还好,这算是我最熟悉的领域。多年来自己一直以系统工程自居。这类工作,困难,又难以出成绩。但却是不可或缺的。

多年来,我一直尝试,用一种科学的方式和语言来描述系统优化这类工作,一直坚信这种工作也是一种科学,也有最佳的答案。因为科学就一定隐含着重复性。

当然,如果我这次真失业了,搞不好,我也会开个专档,详细描述这个行当的一些要点。但这里我们只捞干的,不说费话,对有一定基础的人来说,也许还是有一定意义。

一定要相信自己所从事的工作是一种科学

分析成功与失败

这点是相当重要的。我们从事一份工作,可能总是需要经历一个埋头苦干,但却难以找到规律的阶段,这个阶段,最常见的特点是:活干完了,却想不清楚是如何实现,似乎即使是经验也很难复制到其它的任务中;更不要说从中提取可以写出来的知识了。

在这个时候,不要放弃,要努力去思考,特别要将重点放在失败的经验中,找到不能那么做的原因;分析一件事失败,有时确比这件事是如何成功的,要简单些。我是说,当你自己是主语去尝试实现 一个目标时。类似飞机失事后,事故分析之类这种,系统出了问题,又不是你导致的,但要你分析的这种,不在这段文字所描述的场景中。

总之,一定要相信自己所从事的事,不是一种玄学。如果是玄学,那就不要做了,不如去算命了,挣得还更多。更能得到人们尊重。

方法就是不断积累,不断分析。

相信世界有普遍规则

这点当然也是必要的。

系统工程师常说的一句话:世界只有一个系统。因为这就是这个世界所构建的模式。没有第二种。不论是宇宙,还是生物体,还是小宇宙,都拥有相同的模式。

你开发的东西不会例外。

系统工程师最后往往会沦为系统优化工程师

当然我这里不是贬义,因为系统优化工资可能会很高。而且活也不一定很累。

但好的系统其实是构建出来的,而不是优化出来的。

但是现实世界构建出来的好系统有,但不多。我们都是普通人,我们没有办法强求这个世界按我们的意志运转,世界就是一个大的草台班子。

所以,系统工程师,你要懂构建主义哲学;但不要耻于做一个系统优化工程师。尽管我们看起来像是帮人处理混乱局面的,但这就是这个世界。

系统的常见问题--根据具体实例

尽管最后系统优化要做许多琐碎的事,但系统性能出问题的原因,却往往非常少。

因为构建系统的法则非常少。

只要你懂得构建主义哲学,就会出现,所有出性能问题的系统,往往是由于相同的原因造成。

所以,构建主义哲学,要花些时间去学习学习。

比如,系统工程师,是从底向上构建,而不是像总工或者架构师那样从上向下造金字塔。

从底向上构建,有许多好处,也有许多要注意的点。

例如,忘记目标,目标是规则之上的目标,没有目标,只要满足规则,你的目标一定会实现,所以,要忘记目的性。至少不要过于关注做所谓正确的事;而要将重心放在提升最小粒度的质量(懂法、守法、参与),和确保最小粒度得到同样的机会(资源可以有优先级,但要得到相等的被调度的权力)。即责权对等,机会均等。

一个案例

例如在我正在处理通信相关的案例中,需要实时并行处理许多种上行和下行任务;这时,一般的调度系统都有优先级的设定;这种设定,在我来看,就是错误的,是违背了系统工程思想的。

最小的粒度,机会必须要均等,资源可以有多有少,但机会一定要均等。

你不能说哪个任务优先级低。例如接入(RACH),相对比较少,而且也比较随机,所以,架构师就认为它的优先级应该很低。

这显然是有问题的。

因为通信系统在压力大的情况下,所有的core都将是 100%的运行状态;在这样的情况,你对RACH这类任务的低优先级,作何种解释呢?

你很难解释,对吧?

所以,这是显然的错误:违背了机会均等原则。

那么有人说,如果这样,实时调度系统的优先级设置还有什么价值呢?

在通信系统中,微任务员的切换都是皮秒级别的,这种级别,通过利用操作系统和CPU的压栈机制是不可能实现的。相反,如果时间片很长,在ms级,现在的作业系统的一切理论当然是可以考虑的:高优先级到达后,可以强行中断正在执行的任务;

这在复杂的实时性高的并行系统中,是无法成立的。

为什么呢?因为其本质违背了分布式系统基本构建法则。

导致机会不均等和系统无法给当前场景对于某个最小粒度的需求,作出合法合理的解释。

经如,反过来,将RACH任务作为最高优先级,是不是就能正确呢?也不能。因为RACH其随时性就意味着不确定性,如果某一时刻太多用户接入怎么办?

所以,如果你作为系统工程师,将全部的精力放在法则这一边,你的生活才能简单下来,只要坚持最基本原因,就可以不去考虑这类场景下的是非对错,你是法律的维护者,不是裁判官。

对我来说,这里的改进,就是将它们的优先级平级。并且,给PRACH和一些这类相对而言不确定性高,但算力要求低的任务绑在一个不被大业务干扰的核上即可。

关于流水线

pipeline这件事,是DSP的概念,对于DSP是没有太大问题的。

但对于CPU来说,有很大问题。

流水线像是工厂的生产线,比如月饼的生产线;电子厂的SPI+SMT+烘烤+AOI的流水线。

DSP程序如果设计好,是可以借鉴的。

但对于通用CPU,这种是不行的。

因为通用CPU的核往往是有限的,也就几个到几十个。

pipeline,意味着任务pipeline的头部得到调度之后,后面的一大堆任务,都鸡犬升天了,占了一个CPU不释放。

这不是好的设计。是违背的最小粒度的机会均等原则的。是典型的法则的破坏者。

改进的办法是,pipeline还保留,但每个task需重新送到调度器,重新调度。

后记

今天就写这么多。国庆了。祝大家国庆快乐。

本文相当于自己的笔记,表达了作为系统工程师如保去分析复杂系统的问题:只要坚持基本法则,不要过于看重具体的业务与实现。你的生活就会变得简单。

今天讲了两条:(1)最小粒度的机会均等和资源可以不均等;(2)不允许有pipeline(一串连续的最小粒度占据一个CPU core)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2180526.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

兴业周报|十一黄金周即将到来~楼市利好政策重磅来袭

黄金地段:社区位于东三环核心位置,定位于CBD商务圈旁的纯居住区,容积率不足2.8,绿化率达到50%以上,树种超过80余种,实现“每个楼座都在园林中”的效果。 配套成熟:周边配套齐全,富力…

Error和Exception

1.异常体系结构 (1)Java把异常当作对象处理,定义一个基类java.lang.Throwable作为所有异常的超类。 (2)Java API中定义了许多异常类,这些异常类分为两大类,错误Error和异常Exception 2.什么是…

湿气缠身不用愁,拔罐疗法助你轻松“祛湿”!

在这个快节奏的时代,我们常常忽略了身体发出的微妙信号,其中,“湿气重”便是许多现代人面临的隐形健康挑战。湿气,中医理论中的一个重要概念,它像无形的枷锁,悄悄影响着我们的体态、精神状态乃至生活质量。…

react-问卷星项目(3)

项目实战 React Hooks 缓存,性能优化,提升时间效率,但是不要为了技术而优化,应该是为了业务而进行优化 内置Hooks保证基础功能,灵活配合实现业务功能,抽离公共部分,自定义Hooks或者第三方&am…

鸿蒙开发(NEXT/API 12)【穿戴设备信息查询】手机侧应用开发

// 在使用Wear Engine服务前,请导入WearEngine与相关模块 import { wearEngine } from kit.WearEngine; import { BusinessError } from kit.BasicServicesKit;查询穿戴设备是否支持某种WearEngine能力集 注意 该接口的调用需要在开发者联盟申请设备基础信息权限。…

Java 异常处理机制

目录 1.异常处理的五个关键字 测试一:理解try catch finally 的作用 测试二:设置想要捕获的异常类型 测试三:可以写多个catch。 2.异常快捷键 3.在方法体中抛出异常用throw;在方法参数后面抛出异常用throws (1&…

Ubuntu 手动安装 ollama

官方linux安装ollama命令: curl -fsSL https://ollama.com/install.sh | sh 运行结果: 由于官方提供的ollama安装命令老是安装中断,所以我选择手动安装。 手动安装步骤: 官网链接:ollama/docs/linux.md at main ollama/ollama…

盛事启幕 | 第三届OpenHarmony技术大会重磅官宣,邀您共绘智联未来

未来已来,科技何向? ——10月12日-13日众多大咖齐聚上海 聚焦OpenHarmony生态前沿 与您一同解码技术的下一片蓝海

【STM32单片机_(HAL库)】4-1【定时器TIM】定时器中断点灯实验

1.硬件 STM32单片机最小系统LED灯模块 2.软件 timer驱动文件添加定时器HAL驱动层文件添加GPIO常用函数定时器中断配置流程main.c程序 #include "sys.h" #include "delay.h" #include "led.h" #include "timer.h"int main(void) {H…

seata服务端部署

1.下载seata 官网下载地址:http://seata.io/zh-cn/blog/download.html 或者下载 作者已经下载的压缩包1.4.0 注意!!! 要参考对应的版本,否则可能出现无法正常启动的情况。 参考文档 下载完毕后解压压缩文件 2.修改配…

6个Android ANR面试题和优化方案

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 面试题 1、 解释什么是ANR以及它在Android中是如何产生的? ANR是指应用程序未响应,通常是因为主线程被阻塞导致无法及…

【性能测试】jmeter工具核心组件说明手册

前言 Apache JMeter 是一个用于压力测试和性能测量的开源工具,它被设计用来测试静态和动态资源(例如静态文件、CGI接口、Java 对象、数据库和 FTP 服务器),以及分析整体系统性能。JMeter提供了丰富的组件集,使得用户可…

国内邮件推送防拦截秘籍与内容优化技巧详解

企业需优化邮件内容、选择优质服务商、配置域名验证,避免垃圾邮件特征,控制发送频率和策略,以提高邮件送达率和用户互动率。ZohoCampaigns等平台提供多项功能助力邮件营销。 一、了解邮件拦截的常见原因 在讨论如何避免邮件被拦截之前&#…

Cookie Session Token的各种知识

Session 1、为什么有session? 因为HTTP是无状态协议,每次请求服务器并不知道历史请求的记录,Session和Cookie主要就是为了弥补无状态的特性 2、Session是什么 客户端请求时,服务端开辟一块内存空间存放Session对象,存…

(二)大模型调用

一、基本概念 1.1、Prompt 大模型的所有输入,即,我们每一次访问大模型的输入为一个 Prompt, 而大模型给我们的返回结果则被称为 Completion。 1.2、Temperature LLM 生成是具有随机性的,在模型的顶层通过选取不同预测概率的预测结…

SOLIDWORKS 2025 PDM 更新亮点:效率与性能的提升!

SOLIDWORKS PDM 持续致力于为用户提供更加高效、直观且灵活的数据管理解决方案。SOLIDWORKS 2025 也对PDM功能进行了多方面的改进,旨在提高工作效率,并增强系统性能。 以下是SOLIDWORKS 2025 PDM中的几项关键功能的详细介绍。 1经过改进的材料明细表可…

【C++】面向对象编程的三大特性:深入解析多态机制

C语法相关知识点可以通过点击以下链接进行学习一起加油!命名空间缺省参数与函数重载C相关特性类和对象-上篇类和对象-中篇类和对象-下篇日期类C/C内存管理模板初阶String使用String模拟实现Vector使用及其模拟实现List使用及其模拟实现容器适配器Stack与QueuePriori…

这次PostgreSQL事故后,我把表膨胀清理工具撸了一遍

📢📢📢📣📣📣 作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验, Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、My…

预训练技巧:在训练末尾对领域数据上采样

1. 简介 介绍了一种在模型训练结尾对领域数据上采样能够提升在benchmark上的指标。通过实验表明上采样比例在10-20%是能够在通用语言能力与目标benchmark保持权衡的最好比例。 2. 实验 数据:1T模型:decoder-only结构,7B大小,具…

Linux:进程间通信之共享内存

我们无论使用命名管道还是匿名管道,都是在文件层面上实现的通信,实际上还有基于系统层面的system v标准的进程间通信方式。 因为操作系统不相信用户,所以用户使用的时候只能通过调用的方式 进程间通信的本质:先让不同的进程看到…