V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  kyonn  ›  全部回复第 5 页 / 共 18 页
回复总数  353
1  2  3  4  5  6  7  8  9  10 ... 18  
@gancl 看地区的
269 天前
回复了 yihy8023 创建的主题 NAS PCIE 拆分后的 SR-IOV 问题
@yihy8023 恭喜.
271 天前
回复了 yihy8023 创建的主题 NAS PCIE 拆分后的 SR-IOV 问题
@yihy8023 预祝成功, 另外 SRIOV 有 2 个小坑, 提前说下.

1. sriov 虚拟的 VF 网卡没办法直接跟宿主机的 桥接网卡互通, 解决办法参考:
https://www.chiphell.com/thread-2630794-1-1.html

2. sriov 使用的物理网卡必须接网线到交换机或另一台实体机上, 才能激活 VF 虚拟网卡, 不然内部的 VF 之间不互通. 举个例子, 起了 2 个虚拟机分配了 2 个 VF, 设置了静态 ip, 这两台虚拟机是无法互通的, 除非把物理网卡接交换机. 之前有次调试忘记接网线了, 死活不通, 定位了好久, 本来以为都是内部的虚拟网卡, 外部网线接不接没影响.
271 天前
回复了 kyonn 创建的主题 Docker 关于非 root 运行 docker 的问题.
已解决, dev container 可以自动替换 UID/GID, 之前一直保持 1000 UID 的原因是 GID 是 sudo, 跟容器内已有 GID 冲突, 导致替换逻辑未生效.
271 天前
回复了 kyonn 创建的主题 Docker 关于非 root 运行 docker 的问题.
@kaichun 那个跟 rootless docker 差不多, 有些限制.
271 天前
回复了 kyonn 创建的主题 Docker 关于非 root 运行 docker 的问题.
@tinytoadd 看文档意思是会自动更新容器内的 UID/GID, 我再改改配置看.

> While the remoteUser property tries to automatically update the UID/GID as appropriate on Linux when using a Dockerfile or image, you can use this snippet in your Dockerfile to manually change the UID/GID of a user instead. Update the ARG values as appropriate.
271 天前
回复了 kyonn 创建的主题 Docker 关于非 root 运行 docker 的问题.
@yinmin 原本想直接通过 宿主机 samba 统一接入的想法是想利用 域用户鉴权, 统一管理, 用户也不用去管 samba 和 ssh 账户的不同. 如果更换为这种方案的话, 那就是 ssh 和 samba 密码分离, 用户可以修改自己宿主机用户的 ssh 密码, 无法修改 samba 密码. 好像也能接受.
271 天前
回复了 kyonn 创建的主题 Docker 关于非 root 运行 docker 的问题.
@yinmin ssh 好说, dev container 自动处理了 ssh 的端口问题, 不用单独去记 ssh 端口. 统一部署个 samba 容器, 创建的文件所属都是 1000:1000, 透过 remote ssh 操作的开发容器, 创建的文件权限也是 1000:1000, 看上去方案不错.

那么唯一的瑕疵应该是每次新增用户需要维护 samba 映射目录(这个透过脚本也能方便处理), 以及宿主机上不能操作文件, 会创建出跟 容器 权限不兼容的文件.

不知道分析的对不对?
271 天前
回复了 kyonn 创建的主题 Docker 关于非 root 运行 docker 的问题.
@tinytoadd 使用 // "remoteUser" 和 "containerUser" 强行设置用户为宿主机用户, 则会在 dev container 创建时提示无法在 /etc/passwd 找到用户. 也好理解, 容器的 dockefile 应该只创建了 1000 作为 uid 的用户.
271 天前
回复了 kyonn 创建的主题 Docker 关于非 root 运行 docker 的问题.
@tinytoadd 是我设置问题? 微软的开发容器镜像默认内建了 uid/gid 1000 的用户, 好像并不会自动映射宿主机的用户?
271 天前
回复了 kyonn 创建的主题 Docker 关于非 root 运行 docker 的问题.
@yinmin 容器里部署完整的 sshd+samba 是可以的, 需要每个容器单独 ip, 这样管理就麻烦了(容器数量*用户数量). 我的想法是 宿主机统一管理 samba, 容器只提供开发环境. 相当于代码都在宿主机的家目录下, bind mount 到容器内, 容器内可以修改, 提交代码. 一些其他需求也可以通过 samba 直接从 windows 访问家目录的代码.
272 天前
回复了 yihy8023 创建的主题 NAS PCIE 拆分后的 SR-IOV 问题
@plko345 没问题,linux kvm 之前搞个 sriov ,windows 虚拟机随便哪个版本都行
272 天前
回复了 kyonn 创建的主题 程序员 有没有开源靠谱的青龙平替选择?
@btdwv
@Ploter
@duzhuo
@ztmzzz
@programApe
@512357301
@JerryYuan
@512357301

感谢各位推荐, 最后用了 qdtoday .
272 天前
回复了 kyonn 创建的主题 程序员 关于 remoteapp 的问题
@coldle 我用户的 windows server 应该是 win10 版本的内核。那有空我装个 11 的试试。
272 天前
回复了 kyonn 创建的主题 程序员 关于 remoteapp 的问题
@coldle 感谢。问题 1 其实还能忍受,大不了单独开个 windows 桌面放微信。问题 2 确实很难受,没有规避方案。
272 天前
回复了 kyonn 创建的主题 程序员 咨询下消息推送框架的问题
@janus77 那有靠谱的办法判断一个 app 集成了哪些推送吗
272 天前
回复了 yihy8023 创建的主题 NAS PCIE 拆分后的 SR-IOV 问题
这是之前搞 I350 SRIOV 时的记录, 供你参考. 我的建议是没啥特殊需求, 老老实实用网桥转发就行了, SRIOV 依赖特殊网卡和宿主机的 PCIE 桥, 维护起来太麻烦(尤其是迁移机器时, 还要挑平台), 而且还有跟宿主机网桥之间的互通问题, 那么些效率提升不值当, 除非是专门的虚拟机集群.



### sr-iov 理论基础

- [SR-IOV——在私有云环境中的应用与实践_weixin_30265103 的博客-CSDN 博客]( https://blog.csdn.net/weixin_30265103/article/details/99916338)
- [Why using Single Root I/O Virtualization (SR-IOV) can help improve I/O performance and Reduce Costs]( https://www.design-reuse.com/articles/32998/single-root-i-o-virtualization.html)

### iommu group 分组查看

```BASH
#!/bin/bash
for d in $(find /sys/kernel/iommu_groups/ -type l | sort -n -k5 -t/); do
n=${d#*/iommu_groups/*}; n=${n%%/*}
printf 'IOMMU Group %s ' "$n"
lspci -nns "${d##*/}"
done;
```



### PCI 设备直通

1. BIOS 开启 vt-d.

2. linux 内核开启 iommu 和 passthrough.

```BASH
# 编辑 grub 文件, 添加内核启动参数.
# bios 没有 sr-iov 功能时必须添加 pci=assign-busses pci=realloc, 强制要求内核重新分配 PCI 空间
# 否则在启用 VF 时会出现 write error: Cannot allocate memory 报错
sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX="intel_iommu=on iommu=pt pci=assign-busses pci=realloc"

# 根据新 grub 文件重新生成 initrd.img
sudo update-grub

sudo reboot
```

3. 检查 iommu 分组, 确保 i350 4 个网卡处于不同分组.

```BASH
#!/bin/bash
# 查看 iommu 分组

for d in $(find /sys/kernel/iommu_groups/ -type l | sort -n -k5 -t/); do
n=${d#*/iommu_groups/*}; n=${n%%/*}
printf 'IOMMU Group %s ' "$n"
lspci -nns "${d##*/}"
done;
```

4. 如果 4 个网卡处于同一分组, 查看网卡 upstream 的 PCIE 桥的能力, 它可能没有 acs 能力.

```BASH
# 假如 01:00.0 是其中一个 i350 网卡, 查看其 PCIE 能力, 会打印 Capabilities: [1d0 v1] Access Control Services
sudo lspci -vvv -s 01:00.0 | grep "Access Control"

# 假如 00:01.0 是 i350 upstream 的 PCIE 桥, 查看其 PCIE 能力, 不会打印任何内容
# 因为大部分 intel PCIE bridge 不支持 ACS, 这时候需要打 ACS override patch
# ACS 补丁没有进入 linux 内核 upstream, 原因参考
# [LKML: Alex Williamson: Re: [PATCH] pci: Enable overrides for missing ACS capabilities]
# ( https://lkml.org/lkml/2013/6/18/738)
sudo lspci -vvv -s 00:01.0 | grep "Access Control"
```

5. 打 ACS 补丁需要修改 grub 和 kernel.

- 标准内核不支持 ACS 补丁, 需要自己重新编译内核并安装. Debian OS 参考 `debian/内核编译.md` .
- 部分非标准 Linux 发行版可能已经打上 ACS 补丁, 比如 Proxmox, OMV.
- 内核代码支持 ACS 功能后增加 grub pcie_acs_override 参数, 参考下面.

```BASH
# 继续修改 grub, 增加 pcie_acs_override 参数
# pcie_acs_override 参数有几种写法:
# 写法 1: pcie_acs_override=id:[vendor/device IDs]
# 写法 2: pcie_acs_override=downstream,multifunction
# 第 2 种写法会强行将所有 downstream 和 mutilfunction PCIE 分组, 建议使用第 1 种写法只对目标 PCIE 设备分组
# 下面的命令中增加了 pcie_acs_override=id:8086:1901 参数, 8086:1901 是 i350 upstream 的 PCIE bridge 的 id
sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX="intel_iommu=on iommu=pt pci=assign-busses pci=realloc pcie_acs_override=id:8086:1901"

# 根据新 grub 文件重新生成 initrd.img
sudo update-grub

# 重启
sudo reboot
```

6. 验证 i350 VF 功能是否可用, **建议用第一种方法**.

- 第一种方法: 针对 4 个 i350 网卡单独设置 VF 数量.

```bash
# 查看一个网卡最多支持的 VF 数量
cat /sys/class/net/enp1s0f0/device/sriov_totalvfs

# enp1s0f0 是要设置的 i350 网卡设备名, 重启丢失. 其他 3 个 i350 网卡设置方法相同
echo 7 > /sys/class/net/enp1s0f0/device/sriov_numvfs

# 下面两个命令应该能看到新增加的 VF 网卡
# 因为此时还未屏蔽 VF 网卡驱动 igbvf, ip a 命令能直接看到加载驱动后的 VF 网卡
# 如果后续屏蔽了主机的 igbvf 驱动, 则只有 ip l 命令能看到没加载驱动的 VF 网卡信息
ip a
ip l
```

- 第二种方法: 支持直接设置 igb 驱动加载参数, 让 4 个 i350 网卡全部启用 N 个 VFs.

```BASH
# 如果不知道 i350 驱动名字, 可以通过下面命令查看
ethtool -i enp1s0f0 | grep ^driver

# 设置 igb 驱动启用加载参数, 需要重新生成 initrd, 重启永久生效
echo "options igb max_vfs=7" >>/etc/modprobe.d/igb.conf
sudo depmod -ae
sudo update-initramfs -u
sudo reboot

# 卸载驱动重新加载, VF 个数设置为 7, 重启丢失
modprobe -r igb
modprobe igb max_vfs=7
```

7. 为了让单独针对 i350 4 个网卡的 VF 设置永久生效, 又有两种办法.

- 第一种办法: 使用 systemd service 开机自动调用 echo 命令.
创建 SR-IOV 配置脚本并**添加可执行权限**: `sudo vi /usr/local/bin/cfg_sriov.sh`.

```BASH
#!/bin/bash

echo 1 > /sys/class/net/enp1s0f0/device/sriov_numvfs
echo 1 > /sys/class/net/enp1s0f1/device/sriov_numvfs
echo 4 > /sys/class/net/enp1s0f2/device/sriov_numvfs
echo 7 > /sys/class/net/enp1s0f3/device/sriov_numvfs

echo "config igb vf function ok ..."
```

将配置脚本加入 systemd 启动: `sudo systemctl edit --force --full sriov` .

```BASH
[Unit]
Description=config VF for sr-iov
After=networking.service NetworkManager.service
Before=libvirtd.service

[Service]
Type=oneshot
ExecStart=/usr/local/bin/cfg_sriov.sh

[Install]
WantedBy=multi-user.target
```

启动服务.

```BASH
sudo chmod +x /usr/local/bin/cfg_sriov.sh
sudo systemctl daemon-reload
sudo systemctl enable sriov
sudo systemctl start sriov
ip l
```

- 第二种办法: 使用 udev 规则. **注意!!!! 暂时还未成功, 下面的规则针对所有 igb 驱动网卡, 没有指定某个网口.**

为每个 i350 网卡增加 udev 规则: `sudo vim /etc/udev/rules.d/70-sriov-net.rules` .

```BASH
ACTION=="add", SUBSYSTEM=="net", ENV{ID_NET_DRIVER}=="igb", ATTR{device/sriov_numvfs}="7"
```

设置 udev 规则立即生效.

```BASH
# 可能需要插拔网线, 实在不行就重启设备
sudo udevadm control --reload-rules && sudo udevadm trigger
```

8. 通过前面的步骤 VF 网卡设备已生成. 在分配 VF 给 VM 使用前还需要屏蔽宿主机的 VF 网卡驱动, 否则 VF 设备会被宿主机占用.

```BASH
# 新增驱动加载文件 sriov-blacklist.conf, 屏蔽 VF 网卡驱动 igbvf
# 可以发现 VF 网卡驱动名字一般是开启 SR-IOV 功能之前的网卡驱动名加上"vf"
# 比如 x710 万兆网卡驱动名是 i40e, 对应 VF 网卡驱动名是 i40evf
sudo vi /lib/modprobe.d/sriov-blacklist.conf
blacklist igbvf

sudo reboot

# 重启后 ip a 命令已不再能看到 VF 网卡, 因为驱动没有加载
# ip l 命令还能看到每个 PF 下有若干 VF 设备, mac 地址可能都是 FF 或 0
ip a
ip l
```

9.
273 天前
回复了 kyonn 创建的主题 程序员 有没有开源靠谱的青龙平替选择?
@512357301 这个是自动化平台吧,还有 nodered ,感觉不是专门用来做定时任务的,生态方面也以生产力和智能家居为主。
273 天前
回复了 kyonn 创建的主题 程序员 有没有开源靠谱的青龙平替选择?
@ztmzzz https://v2ex.com/t/1019544
而且 github issue 里出现过有人提出资源消耗异常,作者直接关闭 issue 的情况。
273 天前
回复了 kyonn 创建的主题 程序员 求助个透明网关问题
@yinmin 我把之前在主机上添加的路由规则删了, 去主路由上加了你说的规则, 不起作用, 还是不通.
1  2  3  4  5  6  7  8  9  10 ... 18  
关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2513 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 21ms · UTC 04:00 · PVG 12:00 · LAX 20:00 · JFK 23:00
♥ Do have faith in what you're doing.