uv包安装网络超时解决

$ uv add numpy pandas torch scikit-learn matplotlib Resolved 45 packages in 21ms × Failed to download `nvidia-cufft-cu12==11.3.3.83` ├─▶ Failed to fetch: │ `https://files.pythonhosted.org/packages/1f/13/ee4e00f30e676b66ae65b4f08cb5bcbb8392c03f54f2d5413ea99a5d1c80/nvidia_cufft_cu12-11.3.3.83-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl` ├─▶ Request failed after 3 retries ├─▶ error sending request for url │ (https://files.pythonhosted.org/packages/1f/13/ee4e00f30e676b66ae65b4f08cb5bcbb8392c03f54f2d5413ea99a5d1c80/nvidia_cufft_cu12-11.3.3.83-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl) ╰─▶ operation timed out help: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing. 这个错误是因为 uv 在尝试从官方源下载 NVIDIA 的 CUDA 组件包(nvidia-cufft-cu12)时网络超时了。 ...

发布于2025-12-12  ·  Kerolt

Windows修改默认文件夹名为英文

系统路径 内的文件夹不仅有图标还显示中文名称,但是打开路径的时候显示的却是英文,如何修改呢? 修改文件夹图标的步骤 选中文件夹点击鼠标右键>选择属性>选择自定义>选择更改图标>选择应用>选择确定 设置文件夹别名 先要显示受保护的操作系统文件,设置完成之后将会看到 desktop.ini 文件( desktop.ini 在每个文件夹内都有一个) 如果要设置哪个文件夹的别名就找到哪个文件夹内的 desktop.ini 文件,并编辑其内容如下: [.ShellClassInfo] LocalizedResourceName=@%SystemRoot%\system32\shell32.dll,-9227 IconResource=C:\Windows\\System32\SHELL32.dll,1 设置完成之后保存 刷新就 OK 了,设置完成注意要 隐藏受保护的操作系统文件。 好像不同版本后面的数字不同,在修改前记得保存。

发布于2025-11-27  ·  Kerolt

Linux修改IP

首先确定网络是用什么工具管理: $ systemctl is-active NetworkManager active 说明 网络由 NetworkManager 管理,这种情况修改 IP 通常使用 nmcli: 修改静态 IP 看当前连接名 nmcli connection show 输出类似: NAME UUID TYPE DEVICE Wired connection 1 2d3e1f6a-4e87-4a76-8f23-2f459c8c112b ethernet enp60s0 这里的 NAME(如 Wired connection 1)就是连接名,后面命令要用到。 修改为静态 IP 假设你想把 IP 设置为: IP:192.168.1.100/24 网关:192.168.1.1 DNS:8.8.8.8, 1.1.1.1 执行: sudo nmcli con mod "Wired connection 1" ipv4.addresses 192.168.1.100/24 sudo nmcli con mod "Wired connection 1" ipv4.gateway 192.168.1.1 sudo nmcli con mod "Wired connection 1" ipv4.dns "8.8.8.8,1.1.1.1" sudo nmcli con mod "Wired connection 1" ipv4.method manual 注意 "Wired connection 1" 需要替换为你自己的连接名。 如果名字里有空格,必须加引号。 ...

发布于2025-11-09  ·  Kerolt

Linux中的veth与bridge

容器网络最典型的基础模型 —— 两个不同的命名空间通过 bridge 通信 。 Docker 默认的 bridge 模式就是基于此原理,创建 docker0 bridge,容器 veth 对一端连接容器,一端连接 docker0,提供 NAT 功能让容器可以访问外网。 一个简单的结构如下👇: +---------------------+ | root NS | (宿主机 / default netns) | bridge: br0(10.0.0.254/24) | | | veth0 ─────────┐ | <- veth0 在 root,master=br0 | │ | | veth2 ─────────┴──┘ <- veth2 在 root,master=br0 +---------------------+ │ ┌─────────────────┴─────────────────┐ │ │ veth0 <-> veth1 veth2 <-> veth3 (root, peer) (in ns1) (root, peer) (in ns2) ns1 namespace ns2 namespace ┌───────────────┐ ┌───────────────┐ │ veth1 │ │ veth3 │ │ 10.0.0.1/24 │ │ 10.0.0.2/24 │ └───────────────┘ └───────────────┘ veth (Virtual Ethernet Device) 虚拟以太网设备,总是成对出现,类似管道两端 ...

发布于2025-11-08  ·  Kerolt

Linux校准时间

服务器是用旧笔记本装的 Debian13,然后用 ddns-go 做动态域名解析,但是装好之后貌似由于时钟没有校准因此 ddns-go 无法更新域名解析(使用的 aliyun),以下是解决方法。 首先我使用 timedatectl 的结果如下: ~ $ timedatectl Local time: 六 2025-11-08 00:20:49 CST Universal time: 五 2025-11-07 16:20:49 UTC RTC time: 五 2025-11-07 16:20:49 Time zone: Asia/Shanghai (CST, +0800) System clock synchronized: no NTP service: n/a RTC in local TZ: no 使用 systemd-timesyncd 可以让系统自动校时: sudo timedatectl set-ntp true 如果显示: Failed to set ntp: NTP not supported 说明当前系统里没有可用的 NTP 同步服务(比如 systemd-timesyncd、chronyd 或 ntpd)被启用或支持,可以执行: sudo apt install systemd-timesyncd sudo systemctl enable --now systemd-timesyncd.service 之后再执行 timedatectl 可以看到: ...

发布于2025-11-07  ·  Kerolt

如何理解内核态与用户态切换的上下文开销

一、什么是“用户态”和“内核态” CPU 有不同的 特权级(Privilege Level): 用户态(User Mode): 应用程序在这里运行,权限受限,比如不能直接访问硬件、不能修改页表等。 内核态(Kernel Mode): 操作系统内核运行在这里,拥有完全的访问权限,可以管理内存、设备、中断等。 二、什么是“上下文切换(Context Switch)” “上下文”就是 CPU 当前正在执行的任务的所有状态,包括: 寄存器内容(RIP、RSP、RAX 等) 程序计数器(Program Counter) 栈指针 内存映射(页表) 调度信息(优先级、时间片等) 上下文切换指的是 CPU 从一个执行上下文切换到另一个(比如进程 A → 进程 B)。 三、内核态与用户态切换 ≠ 进程切换,但都属于“上下文切换” 这两种是不同层次的“切换”: 类型 示例 是否涉及调度 开销大小 备注 用户态 → 内核态 系统调用、I/O、中断 否 小(几十到几百纳秒) 同一线程,只是 CPU 特权级变化 进程上下文切换 从进程 A → 进程 B 是 大(微秒级) 不仅换栈,还要换虚拟内存上下文 四、为什么内核/用户态切换有“开销” 内核态切换的代价来自几个部分: 1. CPU 特权级变化 切换时 CPU 会: 保存当前寄存器状态; 改变特权级(从 ring3 → ring0); 切换到内核栈(每个线程有独立内核栈); 执行系统调用入口代码(syscall、sysenter 指令); 执行完后再反向恢复回用户态。 这些过程虽然不是“线程切换”,但都需要 CPU 做额外操作。 ...

发布于2025-11-06  ·  Kerolt

在开发一个CNI插件时需要定义的几个配置文件

在开发一个 CNI(Container Network Interface)插件 时,一般需要定义几个关键配置文件,它们共同决定插件的行为、网络配置方式、以及与 Kubernetes 的集成。 一、CNI 网络配置文件 位置: 通常位于 /etc/cni/net.d/ 目录下(可以通过 kubelet 参数 --cni-conf-dir 修改)。 文件名: 一般以 .conf、.conflist 结尾,例如: /etc/cni/net.d/10-myplugin.conf /etc/cni/net.d/10-myplugin.conflist 内容: JSON 格式,描述网络的类型、IPAM 配置、路由等。 示例:10-simplecni.conf { "cniVersion": "0.4.0", "name": "simple-network", "type": "simple-cni", "ipam": { "type": "host-local", "subnet": "10.10.0.0/16", "rangeStart": "10.10.0.10", "rangeEnd": "10.10.255.254", "routes": [ { "dst": "0.0.0.0/0" } ], "gateway": "10.10.0.1" } } 其中: type:对应你编译出的插件二进制名,比如 /opt/cni/bin/simple-cni。 ipam:IP 地址分配方式。可以是 host-local、dhcp 或你自己实现的插件。 .conflist 文件可以包含多个 CNI 插件链,用于组合执行(比如 Flannel + Portmap)。 二、CNI 插件的内部配置文件(插件自定义) 除了标准 CNI 配置外,大多数插件都会定义自己独立的配置文件目录,用来保存运行时信息或持久化状态。 常见位置: ...

发布于2025-11-04  ·  Kerolt

K8s中的单一职责和对象组合

Kubernetes 的设计理念是: 用单一职责的组件,通过对象组合的方式,构建出复杂且可扩展的分布式系统。 什么是“单一职责”和“对象组合”? 这两个概念来自软件设计原则(尤其是微服务与面向对象设计),Kubernetes 只是将它们贯彻得非常彻底: 概念 含义 在 K8s 中的体现 单一职责(Single Responsibility) 每个组件、对象、控制器只做一件事情,并把它做到极致 API Server 只提供 API;Scheduler 只负责调度;Controller 只负责某个资源的控制循环 对象组合(Object Composition) 复杂功能通过多个简单对象的组合实现,而不是通过单个复杂对象 Pod 由多个 Container 组成;Deployment 由多个 ReplicaSet 组成;Service 与 Pod 组合形成负载均衡能力 Kubernetes 的单一职责原则 K8s 的每个核心组件都有明确且边界清晰的职责: 组件 职责 kube-apiserver 提供 REST API,是所有操作的入口,不做任何业务逻辑,只负责一致性与认证授权 kube-scheduler 只负责选择 Pod 要运行在哪个 Node 上 kube-controller-manager 负责运行各种控制循环(ReplicaSetController、NodeController、ServiceController 等),每个控制器专注一种资源类型 kubelet 只负责本节点 Pod 的生命周期管理 etcd 只负责存储状态,不参与逻辑 👉 这就像一个分布式的微内核系统——每个模块专注于自己的“单一职责”,彼此通过 API 协作。 对象组合的体现(K8s 的“积木哲学”) Kubernetes 的对象设计体现出非常强的组合思想(composition over inheritance): Pod 是容器的组合 ...

发布于2025-11-01  ·  Kerolt

利用kubeadm搭建集群

环境:在 VMWare 上,启动了两个 Ubuntu 24.04.3 LTS,配置都为 2C2G。一台作为 master,一台作为 worker,需要为两台机器设置不同的 hostname。 Prepare 安装好 Docker 后,设置一下 cgroup 的驱动: cat <<EOF | sudo tee /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } EOF 然后重启 docker: sudo systemctl enable docker sudo systemctl daemon-reload sudo systemctl restart docker 为了让 Kubernetes 能够检查、转发网络流量,需要修改 iptables 的配置,启 用 br_netfilter 模块: cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf br_netfilter EOF cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward=1 # better than modify /etc/sysctl.conf EOF sudo sysctl --system 修改“/etc/fstab”,关闭 Linux 的 swap 分区,提升 Kubernetes 的性能: ...

发布于2025-10-31  ·  Kerolt

eBPF中何时使用字节序转换函数

在 eBPF 中,什么时候应该用 bpf_htons、bpf_htonl、bpf_ntohs、bpf_ntohl? 这些 bpf_* 函数是 eBPF 程序中用于字节序转换的辅助函数。它们的作用与标准的 C 库中的 htons、htonl、ntohs、ntohl 类似,但针对 BPF 环境进行了优化或封装。它们用于在主机字节序(Host Byte Order)和网络字节序(Network Byte Order)之间进行转换。 简而言之,当在 BPF 程序中处理网络协议头部(如 IP、TCP、UDP)中的多字节字段时,就需要使用这些函数。 网络协议标准(例如,IPv4、TCP、UDP)规定所有多字节数值(如端口号、IP 地址、校验和等)都必须以网络字节序(大端序,Big-Endian)传输。 Note bpf_ntohs (Network To Host Short) & bpf_ntohl (Network To Host Long) ...

发布于2025-10-23  ·  Kerolt