From 406ed8c4937bbea8ffb2a7a98f4f163c5689def4 Mon Sep 17 00:00:00 2001 From: huang-xiaoquan Date: Wed, 3 Dec 2025 16:30:55 +0800 Subject: [PATCH] [golang] Add golang docs --- docs/zh/golang/_toc.yaml | 6 ++++ docs/zh/golang/golang_user_guide.md | 38 +++++++++++++++++++++ docs/zh/golang/images/sizeclasses_span.png | Bin 0 -> 32891 bytes 3 files changed, 44 insertions(+) create mode 100644 docs/zh/golang/_toc.yaml create mode 100644 docs/zh/golang/golang_user_guide.md create mode 100644 docs/zh/golang/images/sizeclasses_span.png diff --git a/docs/zh/golang/_toc.yaml b/docs/zh/golang/_toc.yaml new file mode 100644 index 0000000..90e45ce --- /dev/null +++ b/docs/zh/golang/_toc.yaml @@ -0,0 +1,6 @@ +label: Go用户指南 +isManual: true +description: Go for openEuler 编译器基于开源 Go 开发,聚焦于golang语言的优化 +sections: + - label: Go优化介绍 + href: ./golang_user_guide.md diff --git a/docs/zh/golang/golang_user_guide.md b/docs/zh/golang/golang_user_guide.md new file mode 100644 index 0000000..cc8a4b5 --- /dev/null +++ b/docs/zh/golang/golang_user_guide.md @@ -0,0 +1,38 @@ +# Go优化介绍 + +## 介绍 + +GO编译器是Go语言(又称Golang)的核心工具之一,负责将可读的Go源代码转换为计算机可以执行的机器码。它以高效、简洁和集成度高而著称。 + +## 新增特性列表 + +| 序号 | 特性名称 | 描述 | 使用说明 | +| ---- | ----------------- | ------------------ | --------------------- | +| 1 | span page数量优化 | 增加span中page数量 | GOEXPERIMENT=pagenum | +| 2 | step优化方案2 | 优化step函数的实现 | GOEXPERIMENT=stepopt2 | + +## 特性使用说明 + +### span page数量优化 + +内存页分区扩展优化方案的核心在于67种不同sizeclasses的生成与优化。这些sizeclasses在编译业务代码之前生成,随后与runtime库和内存管理器的内容结合进行编译,最终与业务代码链接形成执行文件。当需要分配内存时,内存管理器会依据sizeclasses信息变量,确定对象所需的页表数据量,从而有效减少在大量小对象分配上的耗时。 + +![sizeclasses_span.png](images/sizeclasses_span.png) + +该设计的改进,扩大了单个mspn可以容纳的对象个数,如上图所示,对于24B的对象类型,从8192B中可划分出314个24B空闲对象,而从8 * 8192B中可划分出高达2730个空闲的对象空间,比原生空间扩展多倍。在大量的使用小对象的场景下,能够有效的减少申请和操作mspn的次数。 + +选项使能:在编译业务时通过参数进行开关控制。 + +```bash +# 进行业务编译或单例测试 +GOEXPERIMENT="pagenum" GOMAXPROCS=1 go test -bench=BenchmarkMalloc -v -run=^$ runtime/ +``` + +### step函数优化 + +step中的readvarint函数,循环次数集中在1次到2次(占比超99.9%),针对此现象对循环进行展开,讨论1次循环和2次循环的场景,并使用ldp指令优化读取。 + +```bash +# 进行业务编译或单例测试 +GOEXPERIMENT="stepopt2" GOMAXPROCS=1 go test -bench=BenchmarkMalloc -v -run=^$ runtime/ +``` diff --git a/docs/zh/golang/images/sizeclasses_span.png b/docs/zh/golang/images/sizeclasses_span.png new file mode 100644 index 0000000000000000000000000000000000000000..9f25e6fb351c8127a3809a3dd86aed448f94e6c1 GIT binary patch literal 32891 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 literal 0 HcmV?d00001 -- Gitee