25 1 月, 2026
上一篇总结了SONiC Switch Telemetry的方法:Sonic Telemetry Deployment,由于测试RDMA时不仅需要监控交换机,还要监控服务器,因此此篇就是在原有架构基础之上融入Server测的相关监控。Server测主要通过node exporter采集本地信息,然后吐给Prometheus,本地信息主要包含如下信息:
- 支持RDMA相关的各种硬件Counter信息(CNP/ECN、重传、QP 状态等),专有计数
- 支持Ethtools中Per-Priority相关的counter,这个是通用计数
另外更新之前自动生成配置的shell脚本,覆盖服务器这边的配置。
完整阅读
10 1 月, 2026
之前在老东家做TME时,整理过IOS XR相关的Telemetry,比如:Telemetry Solution Demo with IOS XR,也研究过 Telemetry Receiver by UDP+KV-GPB。但对Sonic Switch一直没搞过,一是Sonic是基于redis数据库的,对openconfig支持的不好,另外之前用的思科开源的pipeline很久没更新了,应该是被废弃了。2024年整理过Sonic + Telemetry,那时用的是Telegraf作为中间件,而且为了灵活,在SONiC上安装Telegraf的container,但这个方案真正实施起来有些繁琐,不如直接在服务器上部署Telegraf,当时很忙,也没时间整理,时间长了,细节就忘记了。
这次正好又面临可视化需求,因此重新梳理了架构,这次不再使用Telegraf+influxdata,而是采用gnmic + prometheus的方案,gnmic是openconfig开发的,而且在github上更新频繁。代码内容,可以查看:https://github.com/yongpro/sonic-telemetry
另外更新了Server Telemetry,具体看这篇总结:Server Telemetry Deployment,是在现有架构基础之上扩充的。
注意:整个方案会不断迭代和优化,因此文章原始内容我可能不一定会跟着优化而修正,我只是给自己作总结。如果需要参考,请过完整个文档。另外部署Telemetry平台,建议在本地局域网,避免数据传输延迟导致数据不正确。
完整阅读
25 3 月, 2025
本机跑Ollma很容易,分开跑同样很容易 ~ 也就是如下Topology:
MacBook pro(web) ——– (openwebui)synology 918+ ——–(ollama)MacStudio
为什么这么繁琐,主要是不想在Mac上安装docker,另外也不想把openwebui直接安装到host上,正好利用这种方式测试下交互,所以才有了这篇文章
Ollama设置 – Mac Studio
创建 launchd 配置文件
在下面文件夹中增加一个配置文件,默认应该没有这个文件夹,我是安装过NAS的drive应用,所以就不用新建了。确保ollama路径是正确的,通过which命令验证,以及打开局域网访问OLLAMA_HOST 0.0.0.0:
yong@yongdeMac-Studio ~ % more ~/Library/LaunchAgents/com.ollama.ollama.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.ollama.ollama</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/ollama</string>
<string>serve</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>EnvironmentVariables</key>
<dict>
<key>OLLAMA_HOST</key>
<string>0.0.0.0</string>
</dict>
<key>StandardOutPath</key>
<string>/tmp/ollama.log</string>
<key>StandardErrorPath</key>
<string>/tmp/ollama.err</string>
</dict>
</plist>
yong@yongdeMac-Studio ~ % which ollama
/usr/local/bin/ollama
加载并启用服务
完整阅读
29 2 月, 2024
Check attribute is standard or Customize ?
问题是这样的,我们需要确认一个ECMP的attribute是否是标准的Sonic Sai。具体步骤如下:
root@Franks-MacBook-Pro Documents # git clone -b v1.11 https://github.com/opencomputeproject/SAI
root@Franks-MacBook-Pro Documents # cd SAI
root@Franks-MacBook-Pro SAI # cd inc
root@Franks-MacBook-Pro inc # grep -rn 'SAI_SWITCH_ATTR_ECMP'
./saiswitch.h:185: * @brief Attribute data for #SAI_SWITCH_ATTR_ECMP_DEFAULT_HASH_ALGORITHM
./saiswitch.h:697: SAI_SWITCH_ATTR_ECMP_MEMBERS,
./saiswitch.h:1226: SAI_SWITCH_ATTR_ECMP_HASH,
./saiswitch.h:1433: SAI_SWITCH_ATTR_ECMP_DEFAULT_HASH_ALGORITHM,
./saiswitch.h:1442: SAI_SWITCH_ATTR_ECMP_DEFAULT_HASH_SEED,
./saiswitch.h:1454: SAI_SWITCH_ATTR_ECMP_DEFAULT_HASH_OFFSET,
./saiswitch.h:1468: SAI_SWITCH_ATTR_ECMP_DEFAULT_SYMMETRIC_HASH,
./saiswitch.h:1479: SAI_SWITCH_ATTR_ECMP_HASH_IPV4,
./saiswitch.h:1490: SAI_SWITCH_ATTR_ECMP_HASH_IPV4_IN_IPV4,
./saiswitch.h:1501: SAI_SWITCH_ATTR_ECMP_HASH_IPV6,
./saiswitch.h:2771: * @brief Number of ECMP Members configured. SAI_SWITCH_ATTR_ECMP_MEMBER_COUNT takes precedence over SAI_KEY_NUM_ECMP_GROUPS string. Default value is same as SAI_SWITCH_ATTR_ECMP_MEMBERS.
./saiswitch.h:2777: SAI_SWITCH_ATTR_ECMP_MEMBER_COUNT,
How to check SAI Attribute meaning
可以通过这个link进行社区SAI Attributes的检索以及确认其含义:https://sonic.software/sai/globals_s.html;
How to check SAI Attribute
梳理过SAI Attribute:社区+自定义
如果梳理过自己需要的SAI Attribute,这里包含自定义和社区SAI。对于社区部分的SAI,按社区开发就好。对于自定义的部分,需要梳理需求文档,让厂商根据需求文档进行开发。
没有梳理过SAI Attribute
此时两个步骤,其一是使用sairec文件来确认使用的sai attributes,但这里有局限性,最好从现网使用的设备上获取sairec文件,这样被调用的attributes都会被记录在sairec文件中(如果某些特性在这台设备上没有启用,那么sairec文件中也是没有记录的),可以直接从下面路径中获取:
root@sonic:/var/log/swss# ls
sairedis.rec sairedis.rec.2.gz sairedis.rec.5.gz sairedis.rec.8.gz
sairedis.rec.1 sairedis.rec.3.gz sairedis.rec.6.gz sairedis.rec.9.gz
sairedis.rec.10.gz sairedis.rec.4.gz sairedis.rec.7.gz swss.rec
其次,可以从下面目录中找到对应的sai头文件,然后与社区的头文件进行对比,可以统计出哪些是自定义sai:
xxxx@Franks-MacBook-Pro SAI % ls -l
total 248
-rw-r--r-- 1 root staff 106691 2 28 2024 Doxyfile
-rw-r--r-- 1 root staff 2700 2 28 2024 LICENSE.txt
-rw-r--r-- 1 root staff 1785 2 28 2024 Makefile
-rw-r--r-- 1 root staff 463 2 28 2024 README.md
-rw-r--r-- 1 root staff 731 2 28 2024 azure-pipelines.yml
drwxr-xr-x 9 root staff 288 2 28 2024 bm
drwxr-xr-x 3 root staff 96 2 28 2024 data
drwxr-xr-x 14 root staff 448 2 28 2024 debian
drwxr-xr-x 80 root staff 2560 2 28 2024 doc
drwxr-xr-x 6 root staff 192 2 28 2024 experimental
drwxr-xr-x 3 root staff 96 2 28 2024 flexsai
drwxr-xr-x 54 root staff 1728 2 28 2024 inc
drwxr-xr-x 35 root staff 1120 2 28 2024 meta
drwxr-xr-x 41 root staff 1312 2 28 2024 ptf
drwxr-xr-x 10 root staff 320 2 28 2024 test
24 1 月, 2024
之前一直想自行编译下Sonic,但总是没时间。这次正好赶上准备Sonic培训,所以就尝试了下,虽然官方文档介绍的很简单,但编译过一遍才发现,还是有些麻烦的。本篇总结会从干净的Ubuntu系统入手,从头搭建编译环境,以及通过PNET加载编译好的Sonic-VS;下面是官方编译Guide:https://github.com/sonic-net/sonic-buildimage;
文档内标注了不同版本的编译情况,这个可以点进去看编译状态,看时间应该是一直在更新以验证社区代码是Ok的:
完整阅读