ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

forkd命令行速查手册:snapshot、fork、eval、pack等10个核心命令入门教程

forkd命令行速查手册:snapshot、fork、eval、pack等10个核心命令入门教程 forkd命令行速查手册snapshot、fork、eval、pack等10个核心命令入门教程【免费下载链接】forkd高性能Agent沙箱预热虚拟机可以在约 100 毫秒内派生出 100 个独立实例运行过程中约 150 毫秒“分叉”出一个新的运行环境。底层使用 KVM 隔离并利用快照写时复制降低资源开销。项目地址: https://gitcode.com/deeplethe/forkdforkd 是一款基于 KVM 的高性能 Agent 沙箱预热虚拟机可在约 100 毫秒内派生出 100 个独立 microVM 实例运行中还能在约 150 毫秒分叉出一个全新环境。本文带你速查 forkd CLI 最常用的 10 个核心命令——quickstart、doctor、snapshot、fork、eval、exec、pack、pull、spawn、bench一页掌握 forkd 命令行操作。上图forkd fork一次性分叉 100 个 microVM 沙箱的真实终端录制100/100 存活约 200 毫秒完成。一、先看数字为什么值得学 forkd 命令forkd 的核心卖点是像 fork 进程一样 fork 虚拟机父 VM 只启动一次、把运行时Python 依赖、JIT 预热、模型权重全部导入内存后暂停到磁盘每个子沙箱用mmap MAP_PRIVATE共享父 VM 的内存镜像内核按页做写时复制CoW直到子沙箱发生修改才产生新内存。在 N100每个沙箱跑import numpy的场景下方案100 个沙箱总耗时单沙箱内存增量forkd101 ms0.12 MiBFirecracker 冷启动759 ms84 MiBDocker (runc)335 s4 MiB更多实测数据见 bench/ 目录完整背景阅读 README.md。二、forkd 命令全景图forkd 的二进制只有一个forkd入口所有能力都在子命令里定义见 crates/forkd-cli/src/main.rs命令一句话说明quickstart一条命令从零完成预检主机 → 烘焙快照 → fork 子沙箱doctor主机环境体检KVM、tap、netns、内核、守护进程等 17 项snapshot启动父 VM 并做快照或用--from-sandbox分支运行中的沙箱fork从快照一次性 fork N 个子沙箱eval在子沙箱里对已预热的 PID-1 Python 求值表达式exec在子沙箱里运行任意命令pack/unpack/pull/push快照打包、解包、拉取、上传Snapshot Hubfrom-image从任意 Docker 镜像一步构建 forkd 快照spawn/ls/kill守护进程模式下管理沙箱生命周期bench对本地安装做一轮 spawn→exec→branch→fanout 延迟实测rmi/images/where删除快照、列出本地快照、显示存储目录cleanup清理残留的/tmp/forkd-*工作目录run一次性沙箱build → snapshot → fork → exec → shutdownworkspace可挂起/恢复的长生命周期工作区 快照默认存放在~/.local/share/forkd/snapshots/tag/forkd where可随时确认。三、第 1 步一条命令打通环境quickstart doctor3.1quickstart从 0 到第一次 fork装好二进制后x86_64 Linux KVM只需sudo -E forkd quickstart它会依次完成预检主机KVM、Firecracker、内核镜像→ 征得你同意后补齐缺失项下载 guest 内核、创建 tap 设备、准备 per-child netns→ 从python:3.12-slim烘焙 Python 快照无 Docker 时直接从 Hub 拉取预制包→ fork 出 10 个子 microVM 并打印每个子沙箱的耗时。可重复执行已完成的步骤会自动跳过。常用参数sudo -E forkd quickstart -n 5 --yes # fork 5 个--yes 跳过所有交互确认如果不想走 quickstart手动路径是sudo bash scripts/setup-host.shsudo bash scripts/netns-setup.sh N脚本在 scripts/setup-host.sh 与 scripts/netns-setup.sh。3.2doctor环境不对劲时先跑它forkd doctor共 17 项检查KVM、硬件虚拟化、cgroup v2、IP 转发、tap 设备、netns、Firecracker 版本、Docker、快照目录与磁盘空间、内核镜像、守护进程可达性外加 v0.4 live-fork 路径的uffd_wp/memfd_create/ hugepages 探测。每项失败都会给出具体修复建议且无需 root 也能安全运行。四、核心工作流snapshot → fork → eval4.1snapshot创建预热父快照从现成内核 rootfs 启动父 VM、等它预热、暂停并登记 tagsudo forkd snapshot --tag pyagent \ --kernel ./vmlinux-6.1.141 \ --rootfs ./python-rootfs.ext4 \ --tap forkd-tap0更省事的是forkd from-image把 Docker 镜像 → ext4 → 启动预热 → 暂停 → 登记 tag 整条流水线收进一个动词sudo -E forkd from-image python:3.12-slim --tag py-numpy --extra python3-numpysnapshot还有两个高阶用法直接分支正在运行的沙箱docs/design/branching.mdforkd snapshot --from-sandbox sb-id --diff # Diff 模式源暂停约 200 ms forkd snapshot --from-sandbox sb-id --live --no-wait # Live 模式暂停 50 ms立即返回Diff 模式只记录脏页暂停窗口从 Full 模式的数秒降到约 200 msLive 模式v0.4要求源沙箱以--live-fork创建把暂停压到 50 ms 以内内存拷贝在源恢复后异步进行。4.2fork一次性 fork N 个独立沙箱sudo -E forkd fork --tag pyagent -n 100 --per-child-netns --memory-limit-mib 256关键参数速记参数作用-n Nfork 的子沙箱数量--per-child-netns每个子沙箱独立网络命名空间需先跑scripts/netns-setup.sh N--memory-limit-mibcgroup v2 内存上限超限即 OOM防止单个沙箱拖垮主机--live-fork子沙箱改用 memfd 承载内存为其后的 live BRANCH 做准备--settle-secs子沙箱运行多久后统一汇报并关闭演示用100 个子沙箱共享父 VM 的常驻内存实测每子沙箱只多出 0.12 MiB——这就是为什么它能撑住大规模 Agent 扇出。4.3eval1 毫秒求值直接复用预热的 Pythonsudo forkd eval --child forkd-child-42 -- numpy.zeros(100).sum()eval不是新开子进程再import numpy而是把表达式交给 guest 里 PID-1 那个已经 import 完所有依赖的 Python 解释器单沙箱实测约 1 ms对比python3 -c冷启动同表达式约 96 ms。4.4exec跑任意命令sudo forkd exec --child forkd-child-3 -- python3 -c import numpy; print(numpy.zeros(3)) sudo forkd ping --child forkd-child-3 # 只需确认 agent 存活时eval与exec默认都指向 guest agent 地址10.42.0.2:8888可用--child netns指定具体子沙箱。guest 内的 agentping/exec/eval 三个端点实现见 rootfs-init/forkd-agent.py。上图LangGraph Agent 在思考中被 BRANCH 分叉三个后代各自带不同的提示继续推理——fork 的不只是进程还有完整的运行态。完整剧本见 recipes/langgraph-react/。五、快照分享pack 与 pullforkd 的快照可以打包成一个带 manifest 逐文件 sha256 的.forkd-snapshot.tar.zst在主机之间像镜像一样流转。5.1pack把本地快照打成便携文件forkd pack --tag pyagent --out pyagent.forkd-snapshot.tar.zst # 512 MiB 的 memory.bin 通常能压到 20 多 MiB约 23× 压缩5.2pull一行命令拉取预制快照forkd pull deeplethe/python-numpy # 从 Hub 按 owner/name 拉取 forkd pull deeplethe/langgraph-react # 拉 LangGraph 演示包 sudo -E forkd fork --tag langgraph -n 3 --per-child-netnspull会自动校验 sha256、解包到本地快照目录也可以直接给一个 HTTPS 包地址。相关命令forkd unpack file本地解包、forkd push上传到预签名 URL、forkd images列出本地快照及体积、forkd rmi tag删除快照。注册表模型详见 docs/HUB.md。六、守护进程模式spawn、ls、kill、bench生产部署建议跑forkd-controller守护进程systemd 单元在 packaging/systemd/forkd-controller.service此时沙箱生命周期由守护进程跟踪CLI 只是它的客户端forkd spawn --tag pyagent -n 5 --prewarm # 生成受守护进程跟踪的沙箱 forkd ls # 表格列出所有存活沙箱 forkd kill sb-abc-0000 # 按 ID 杀 forkd kill --tag pyagent # 杀该快照 fork 出的全部沙箱spawn相比fork多出的价值沙箱被守护进程登记之后可以ls、kill、exec也能用snapshot --from-sandbox对它做 BRANCH。bench在你自己的机器上验证延迟forkd bench --tag py-numpy --n 5 # spawn (n1) 61 ms # exec round-trip 22 ms # branch (diff) 287 ms # fanout (n5) 65 ms 13ms/child # total 571 ms一条命令跑完 spawn → exec → branch → fanout → cleanup 完整回路适合新装完自检、改配置后回归验证。七、高频参数与实用贴士连接守护进程所有 daemon 侧命令默认读FORKD_URL默认http://127.0.0.1:8889与FORKD_TOKEN环境变量也可用--daemon-url/--daemon-token显式指定。tag 命名1–64 字符仅字母、数字、.、_、-且不能以.或-开头防路径穿越。多沙箱网络--per-child-netns需先执行sudo bash scripts/netns-setup.sh N预建网络命名空间。临时目录forkd fork/snapshot会在/tmp留工作目录崩溃可能残留用forkd cleanup --yes清扫。想从脚本自动化Python SDK 是 CLI 的平替pip install forkdfrom forkd import Sandbox, Controller即可REST 端点完整参考 docs/API.md运维排障看 docs/RUNBOOK.md。八、写在最后记住这条主链路就能覆盖 90% 的日常使用doctor → from-image/snapshot → fork → eval/exec → pack/pull想继续上手的场景化模板CI 并行 pytest、Playwright 浏览器、Postgres fixture、Jupyter kernel 等都在 recipes/ 目录里每个配方自带 demo 脚本挑一个跑通即可。【免费下载链接】forkd高性能Agent沙箱预热虚拟机可以在约 100 毫秒内派生出 100 个独立实例运行过程中约 150 毫秒“分叉”出一个新的运行环境。底层使用 KVM 隔离并利用快照写时复制降低资源开销。项目地址: https://gitcode.com/deeplethe/forkd创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表