KeyarchOS(浪潮信息云峦操作系统,KOS) | SPECCPU在RSICV环境下的适配和测试问题整理

麒麟系统下specCPU2017性能测试全解析 本文详细解析了在麒麟系统下进行SpecCPU2017性能测试的全过程。从测试环境搭建、核心概念(SPECspeed与SPECrate)解析,到配置文件深度定制与运行命令详解,旨在帮助用户在飞腾、鲲鹏等国产平台上获得准确、可重复的CPU性能基准数据,为服务器选型与性能评估提供专业指导。 阅读详情

目录

1 简介

2 编译内部工具并安装时遇到的问题

2.1 编译SPEC CPU中的make工具

2.2 编译某个tool

2.3 编译perl

2.4 build TimeDate

3 SPEC CPU 2017跑测试时遇到的问题


1 简介

当用户得到的SEPC CPU2017版本小于1.1.9时,此工具对RISC-V的支持存在很多不足。在RISC-V架构的环境下,当得到SPEC CPU的安装镜像并挂载后,运行install.sh脚本,会出现toolset相关的报错,提示当前没有适配RISC-V架构的tools,需要我们自己重新编译。自己编译这些SPEC CPU2017内部的工具集时,以及启动测试时,都会遇到一些问题,在此作一个整理,希望能帮到有相关需求的人。

参考资料:

https://zhuanlan.zhihu.com/p/425497845

https://gitee.com/lvxiaoqian/memo/blob/master/%E5%9C%A8unmatched%20Ubuntu21.04%E4%B8%8A%E8%B7%91cpu2017.md

SPEC CPU 2017快速使用指南:

https://www.spec.org/cpu2017/Docs/quick-start.html

2 编译内部工具并安装时遇到的问题

替换掉工具集目录中一些项目源码中的config.guess和config.sub文件

要替换的文件的路径大致如下:

./specinvoke/config.guess./specsum/build-aux/config.guess./tar-1.28/build-aux/config.guess./make-4.2.1/config/config.guess./rxp-1.5.0/config.guess./expat-2.1.0/conftools/config.guess./xz-5.2.2/build-aux/config.guess

需要替换成下面两个较新的文件:

http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess

http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub

2.1 编译SPEC CPU中的make工具

问题:出现”undefined reference to __alloca”以及”undefined reference to __stat”

解决方法:

在make-*/glob/glob.c文件中,顶部(包含头文件之后)加上:

#include <alloca.h>#define __alloca alloca#define __stat stat

2.2 编译某个tool

问题:出现“you should not run configure as root….”

解决方法:

export FORCE_UNSAFE_CONFIGURE=1

问题:出现“can’t locate test_driver.pl…..”

解决方法:

在make-*顶层源码目录下执行:

export PERL5LIB=$(pwd)/tests

这样Perl在加载模块时就会先在tests/目录里找得到test_driver.pl。

2.3 编译perl

问题:build perl 在 gcc10 环境下会报错。

解决方法:

由于build perl在gcc10上面有bug,修改Configure和cflags.SH文件中case "$gccversion" in相关1* 改为 1.*

2.4 build TimeDate

问题:构建TimeDate时,会报错:”error running TimeDate-2.30 test suite”

解决方法:

原因为在2020年之后,跑test就会出现此类错误,修改TimeDate-2.30/t/getdate.t

require Time::Local;-my $offset = Time::Local::timegm(0,0,0,1,0,70);+my $offset = Time::Local::timegm(0,0,0,1,0,1970);

编译成功:

编译完成内在工具集后,执行./install.sh脚本来安装SPEC CPU2017,安装成功显示如下:

3 SPEC CPU 2017跑测试时遇到的问题

问题一:

运行SPEC CPU2017的intrate测试集时,在502.gcc_r基准测试中遇到了一个非零退出码(exit code=137),导致runcpu没能完成。

原因分析:

在Linux系统中,退出码137表示:

128 + 9 = 137

即:进程被信号9(SIGKILL)杀死。

这通常是由于系统资源不足(尤其是内存不足)导致操作系统OOM Killer杀死了该进程。

运行命令:

journalctl | grep -i 'out of memory'

确实可以看到内核OOM Killer杀死了cpugcc_r_base.m进程。

解决方法:

方法一:减少并行副本数

即修改config/…cfg文件中的设置:

copies = xxxx #改小

方法二:启用并扩大Swap空间

实际措施:

两方面下手:减少copies(=6)以及启用swap(8g)。

swap操作参考:

https://blog.youkuaiyun.com/frdevolcqzyxynjds/article/details/131464777

sudo fallocate -l 8G /swapfilesudo chmod 600 /swapfilesudo mkswap /swapfilesudo swapon /swapfile

将以下内容加入/etc/fstab以开机自动挂载:

/swapfile none swap defaults 0 0 (这是qwen3给的内容)
echo "/swapfile swap swap defaults 0 0" >> /etc/fstab (这是参考给的)

问题二:

在运行fprate测试集时,遇到错误:

解决方法:

取消config文件中“%define GCCge10 # EDIT: remove the '#' from column 1 if using GCC 10 or later”这一行的注释,让GCCge10变量有效。因为开发板环境中的gcc >= 10。

问题三:

在运行fprate测试集时,遇到错误:

解决方法:

503.bwaves_r,这是一个基于 Fortran 的流体动力学模拟程序,通常涉及大量数组运算和局部变量分配,非常容易受到栈大小限制的影响。

建议在运行 SPEC 测试前执行:

ulimit -s unlimited

麒麟V10 SP3下specCPU2017性能测试全攻略:从安装到跑分避坑指南 本文提供了在麒麟V10 SP3操作系统上运行SPEC CPU 2017基准测试的完整实战指南。内容涵盖从环境准备、编译器优化配置、NUMA内存绑定到测试执行与结果分析的详细步骤,并针对飞腾平台常见问题提供解决方案,旨在帮助用户获得准确、可比的性能数据,为国产服务器性能评估提供可靠依据。 阅读详情

相关推荐

benchmark系列——常用的CPU Benchmark介绍(2)

本文介绍了一些系统级的benchmark工具。

Bluetangos的博客 2780

speccpu2017安装与使用

(2)测试完后会在speccpu2017/result下生成测试结果,本例中output_format默认,因此输出格式包含5种,可在具体文件中查看测试分数,如本例中intspeed分数如下。(1)测试时间较长,本例在kylin2203中运行runcpu –c x86.cfg all –n 1,设置测试次数为1,累计耗时8h左右,通常标准测试要求次数为3,预计耗时24h。注:若安装不上,需替换/etc/apt下的sources.list源,执行sudo apt-get update,再执行安装以上依赖包。

ljh_mm的博客 7674

PCIe-4.2.3.2 Processing of Ordered Sets During Flit Mode Data Stream

动态门控检测(Gated Detection):绝不能在非预定时钟周期进行全时段 OS 匹配。这能节省大量动态功耗。并行容错比较器:必须实现 64-bit 宽的容错匹配器(5/8 表决),这对时序(Timing)要求较高,需要考虑多级流水线(Pipeline)设计。变长状态机(Variable Length FSM):SKP 子状态机必须具有Count_8B计数器,并且要有上限强退保护(Max Count = 6)。控制信号广播。

weixin_44700185的博客 66

关于16路及以上的X86服务器架构

关于16路及以上的X86服务器架构          INTELX86架构的CPU,很少有16路以上的。HP之前有基于安腾(非X86架构) CPU的32路服务器,但是安腾架构的软件后来HP自己也不支持了。接着 华为、浪潮也在国家项目里 搞了 基于安腾的32路 服务器。由于INTEL ,HP 都放弃对安腾的支持,所以这国家项目也仅仅是技术的一些积累,很难在生态圈有很好的成长。

badman250的专栏 3万+

QT实现串口通信

要实现串口通信,需要知道串口通信需要的信息 主要参数有:波特率、校验位、数据位、停止位、控制流 主要操作有:串口的打开和关闭、刷新设备串口、接发数据、开关显示灯等。 实现效果如图: 最后附赠完整源码。 第一步:在头文件中引入 QtSerialPort 类的两个头文件(必须引入) // 引入串口通信的两个头文件(第一步) #include <QtSerialPort/QSerialPort> // 提供访问串口的功能 #include <QtSerialPo

m0_49456900的博客 6万+

PPPoE上网配置不求人:华为路由器命令行操作指南(2023最新版)

本文提供2023年最新的华为路由器PPPoE上网配置命令行操作指南。通过详细的步骤讲解,从连接设备、创建拨号接口、绑定PPPoE客户端到配置内网与NAT,手把手教你完成配置,并附有验证排错方法,助你轻松实现稳定上网。

s4t5u6v的博客 680

告别规则黑盒:基于JVS-Rules的风控规则治理实践——可视化决策编排+血缘追踪+版本快照

可读’——通过决策流图谱与业务语义节点,让非技术人员理解逻辑;‘可溯’——依赖规则版本快照与执行日志,实现任意交易的全链路回放;‘可担责’——基于血缘追踪与权限基线,清晰界定业务定义、技术实现、合规验证三方责任。这三者共同构成风控规则治理的三角支柱,将隐性经验转化为可版本化、可审计、可协同的组织级数字资产。

weixin_42054392的博客 423

基于STM32的智能水温控制系统设计

智能水温控制系统广泛应用于家庭、工业、农业等多个场景,尤其在热水器、恒温泳池和地暖系统中,通过实时监测和调节水温,提高设备的效率和用户的舒适度。本文基于STM32微控制器设计了一个智能水温控制系统,能够实时监测水温、用户设置温度,并根据需要控制加热器或冷却装置,确保水温维持在设定范围内。系统能够根据用户设定自动控制加热和冷却设备,确保水温维持在舒适的范围内,并通过OLED屏实时显示水温信息。在生成的项目基础上,编写水温监测、目标温度设定、加热器和冷却装置控制、OLED数据显示以及超温报警的代码。

2401_88410555的博客 2475

git checkout 与 git switch 的区别

git checkout 与 git switch 的区别

choumin的专栏 195

【gcc】跨版本兼容实战:高版本编译程序在低版本glibc环境下的部署方案

本文针对高版本gcc编译的程序在低版本glibc环境下部署的兼容性问题,提供了四种实战解决方案:静态编译的局限性、容器化部署的优雅方案、使用Devtoolset工具链的官方支持,以及最通用灵活的打包依赖SO发布方案。重点剖析了通过设置RPATH和Interpreter或使用patchelf工具,实现程序与自带库的独立部署,有效解决glibc版本鸿沟。

weixin_29237635的博客 362

非洲秃鹫优化算法(AVOA)详解:从原理到实战

非洲秃鹫优化算法(AVOA)是一种模拟秃鹫觅食行为的元启发式算法。该算法通过数学建模秃鹫的群体分工、饥饿感知和食物竞争等行为,将优化问题转化为智能觅食过程。AVOA包含四个关键阶段:(1)种群初始化与最佳秃鹫选择;(2)饥饿率控制探索与开发平衡;(3)探索阶段模拟远距离飞行搜索;(4)开发阶段模拟食物源附近的竞争行为。算法采用饥饿率函数实现自适应搜索,初期偏向全局探索,后期转向局部开发。实验表明AVOA在标准测试函数和工程设计问题上表现出优越性能,其创新性在于将秃鹫独特的生物学特性转化为高效的优化机制。

qq_42212808的博客 228

如何“无视“模型的上下文长度

本文阐述了在有限上下文窗口下实现“无限”对话体验的五层机制:分层窗口管理(保留近期对话、摘要早期内容)、跨会话记忆结构化存储与定期整理、按需加载技能目录、子代理隔离处理长任务、检索代替记忆。核心原则为“压流水不压事实”“检索即拉取”“写少读准”,通过压缩、迁移、按需注入与审计日志,实现高效、可追溯、低污染的长程交互。

m0_63486540的博客 356

YOLOv11 TensorRT极致加速:C++部署性能优化完全指南

购买即可解锁300+YOLO优化文章,并且还有海量深度学习复现项目,价格仅需两杯奶茶的钱,别人有的本专栏也有!

LXY_LOVE36的博客 118

CommonJS 和 ES Module 区别,前端模块化一次讲透

模块化是 JS 工程化的基石。和。Node.js 早期默认用 CommonJS,也就是我们熟悉的require;而 ES Module 是 ES6 官方推出的标准模块方案,使用importexport。很多初学者容易混淆:什么时候用 require?什么时候用 import?两者能不能互相混用?导出导入的值有什么差别?本篇从语法、加载机制、值引用、使用场景、底层差异逐个拆解。适合人群:刚接触工程化、学习 Node、准备面试的前端同学。老 Node 项目、后端脚本、工具脚本。

2603_95923710的博客 192

AI智能体在化学中的伦理问题:7个案例,架构师如何应对?

AI在化学中的应用早已不是新鲜事:药物发现中用AI预测分子活性(比如AlphaFold预测蛋白质结构)、化工生产中用AI优化合成路线(降低成本30%+)、材料研发中用AI设计新型电池材料(缩短研发周期5年)……但随着AI从“辅助工具”升级为“自主决策智能体”(比如能自动调整反应条件的“化学机器人”),伦理风险开始从“潜在隐患”变成“真实事故”。AI在化学中会踩哪些伦理“坑”?(用案例具象化)这些“坑”的底层逻辑是什么?(从技术到价值观的链条)架构师能做什么?

AI 算法实战派 1363

PyCharm 怎么不升级直接使用Jupyter Notebook

在PyCharm 中需要升级到 PyCharm Professional 版本,才能直接使用 Jupyter Notebook。从截图来看,Jupyter Notebook 已经成功启动,并且正在运行。这将在默认网络浏览器中打开一个新的标签页,显示文件浏览器界面。可以在这里创建和编辑。文件添加到 PyCharm 项目中,并使用纯文本编辑功能进行修改。支持与外部工具集成,可以配置它以调用命令行工具或脚本来启动。,参数可以根据需要设置,工作目录设置为项目根目录。,你仍然可以在本地环境中安装和运行。

Davina_yu的博客 996

【Git】从入门到精通(十)—— 撤销与恢复:git checkout与git restore

本文系统讲解Git中撤销与恢复的核心命令,重点对比git checkout与新命令git restore的使用场景。针对“改错、add错、提交错”等常见问题,提供清晰解决方案:未暂存修改用git restore <file>,误暂存用git restore --staged,历史版本恢复用--source。强调git restore语义更清晰,推荐优先使用。同时提醒撤销操作不可逆,建议先git status、git diff确认,不确定时用git stash保底。最后总结速查表,帮助初学者安全高

m0_67393827的博客 463

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

第1章第1节:什么是Elasticsearch

在传统数据库里搜"一句话中包含某个词",我们通常会写出%关键词%这样的 LIKE 查询——数据一多就慢得无法忍受,而且完全不懂"分词"和"相关度"。本节从全文检索的真实需求出发,讲清楚倒排索引这一核心思想,再介绍 Elasticsearch 是什么、能干什么,以及它在 ELK/EFK 生态中的位置。

啊渊的专栏 173

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Claude Code做Unity项目移植(三): 使用SKILL进行自动化Git提交

本文介绍基于ClaudeCodeSkill的Unity自动化Git提交助手——unity-git-commit,通过四大模块实现提交前的智能检查与安全修复:1)校验Git仓库状态;2)验证Unity项目文件(如排除Library/Temp,确保.meta文件完整);3)依据可配置的C#命名规范自动识别并安全修复命名问题(避免序列化、反射等高危场景误改);4)生成精准提交注释,但强制人工确认。全程仅本地commit,不自动推送或破坏性操作,保障安全。核心思想为“机械化工作交AI,关键决策留人工”,显著提升提交

Aman1984的博客 644

【Git】从入门到精通(九)—— git diff:查看文件差异

本文全面解析Git的gitdiff命令,详解其三大核心场景:工作区vs暂存区、暂存区vs版本库、工作区vs版本库,涵盖输出格式、常用选项(如--stat、--name-only、-w)、版本比较、文件差异及外部工具集成。通过实战案例演示代码审查、提交自查、调试定位等应用场景,强调gitdiff--staged作为提交前检查的关键作用,并总结记忆口诀与常见问题解决方案,助力开发者精准掌握代码变更细节。

m0_67393827的博客 286

多存储协同架构:JPA + MyBatis + Elasticsearch + Redis 的职责分工与通用实现

本文阐述了在高并发订单系统中,通过JPA、MyBatis、Elasticsearch与Redis的多存储协同架构实现职责分离:JPA负责事务性写操作与简单查询;MyBatis处理复杂联查与报表统计;Elasticsearch承载海量数据下的多维检索与聚合;Redis用于缓存、防回滚暂存及分布式锁。各存储分工明确,通过异步同步机制联动,兼顾一致性、性能与扩展性,构建高效稳定的系统架构。

BADAO_LIUMANG_QIZHI的博客 248
上一篇: Linux内核进程调度Deadline调度器的解析与实践
下一篇: 浪潮信息云峦操作系统(KeyarchOS, KOS) | virtio-net故障运维
KeyarchOS
博客等级 码龄3年 1312粉丝 339原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值