V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  kyonn  ›  全部回复第 1 页 / 共 14 页
回复总数  275
1  2  3  4  5  6  7  8  9  10 ... 14  
14 小时 8 分钟前
回复了 Stevi16 创建的主题 问与答 未连接显示器时, windows 无法正常运行
1. kvm 断掉 mac mini, 先排除这边的干扰.
2. 直接去掉 kvm 切换器, 排除 切换器的干扰.
3. 更换显示器线缆.
4. 检查主机供电情况.
5. 检查下 windows 可靠性日志, 看下风扇狂转期间有什么异常日志.
域控下发组策略禁止 chrome 更新, 一劳永逸
@gancl 看地区的
6 天前
回复了 yihy8023 创建的主题 NAS PCIE 拆分后的 SR-IOV 问题
@yihy8023 恭喜.
8 天前
回复了 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, 这两台虚拟机是无法互通的, 除非把物理网卡接交换机. 之前有次调试忘记接网线了, 死活不通, 定位了好久, 本来以为都是内部的虚拟网卡, 外部网线接不接没影响.
9 天前
回复了 kyonn 创建的主题 Docker 关于非 root 运行 docker 的问题.
已解决, dev container 可以自动替换 UID/GID, 之前一直保持 1000 UID 的原因是 GID 是 sudo, 跟容器内已有 GID 冲突, 导致替换逻辑未生效.
9 天前
回复了 kyonn 创建的主题 Docker 关于非 root 运行 docker 的问题.
@kaichun 那个跟 rootless docker 差不多, 有些限制.
9 天前
回复了 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.
9 天前
回复了 kyonn 创建的主题 Docker 关于非 root 运行 docker 的问题.
@yinmin 原本想直接通过 宿主机 samba 统一接入的想法是想利用 域用户鉴权, 统一管理, 用户也不用去管 samba 和 ssh 账户的不同. 如果更换为这种方案的话, 那就是 ssh 和 samba 密码分离, 用户可以修改自己宿主机用户的 ssh 密码, 无法修改 samba 密码. 好像也能接受.
9 天前
回复了 kyonn 创建的主题 Docker 关于非 root 运行 docker 的问题.
@yinmin ssh 好说, dev container 自动处理了 ssh 的端口问题, 不用单独去记 ssh 端口. 统一部署个 samba 容器, 创建的文件所属都是 1000:1000, 透过 remote ssh 操作的开发容器, 创建的文件权限也是 1000:1000, 看上去方案不错.

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

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

感谢各位推荐, 最后用了 qdtoday .
10 天前
回复了 kyonn 创建的主题 程序员 关于 remoteapp 的问题
@coldle 我用户的 windows server 应该是 win10 版本的内核。那有空我装个 11 的试试。
10 天前
回复了 kyonn 创建的主题 程序员 关于 remoteapp 的问题
@coldle 感谢。问题 1 其实还能忍受,大不了单独开个 windows 桌面放微信。问题 2 确实很难受,没有规避方案。
10 天前
回复了 kyonn 创建的主题 程序员 咨询下消息推送框架的问题
@janus77 那有靠谱的办法判断一个 app 集成了哪些推送吗
10 天前
回复了 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.
10 天前
回复了 kyonn 创建的主题 程序员 有没有开源靠谱的青龙平替选择?
@512357301 这个是自动化平台吧,还有 nodered ,感觉不是专门用来做定时任务的,生态方面也以生产力和智能家居为主。
1  2  3  4  5  6  7  8  9  10 ... 14  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1005 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 24ms · UTC 21:49 · PVG 05:49 · LAX 14:49 · JFK 17:49
Developed with CodeLauncher
♥ Do have faith in what you're doing.