一键导入
fabric-benchmarking
Run iPerf3 network performance benchmarks with optional CPU pinning and SmartNIC optimization
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Run iPerf3 network performance benchmarks with optional CPU pinning and SmartNIC optimization
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
Generate FABRIC testbed environment setup, configuration validation, and SSH key management code
Deploy Docker containers and Kubernetes clusters on FABRIC nodes
Connect FABRIC to external testbeds via facility ports and set up port mirroring
Provision and flash Xilinx U280 FPGAs on FABRIC nodes
Provision GPU nodes on FABRIC with driver installation and CUDA setup
Show available FABRIC testbed skills and which one to use
基于 SOC 职业分类
| name | fabric-benchmarking |
| description | Run iPerf3 network performance benchmarks with optional CPU pinning and SmartNIC optimization |
| allowed-tools | ["Read","Grep","Glob","Write","Edit","Bash"] |
When invoked, generate code for network performance benchmarking on FABRIC using iPerf3. Three tiers:
Help the user choose the right level and generate complete code.
node.pin_cpu(component_name='nic1') # Pin vCPUs to NIC's NUMA node
node.numa_tune() # Pin memory to same NUMA node
node.os_reboot() # Reboot to apply
slice.wait_ssh()
for node in slice.get_nodes():
node.config() # Re-configure network interfaces
from fabrictestbed_extensions.fablib.fablib import FablibManager
fablib = FablibManager()
[site1, site2] = fablib.get_random_sites(count=2)
slice = fablib.new_slice(name="iperf3-basic")
node1 = slice.add_node(
name="server",
site=site1,
cores=4,
ram=16,
disk=50,
image="default_rocky_9",
)
node1.add_fabnet()
node1.add_post_boot_upload_directory('node_tools', '.')
node1.add_post_boot_execute('sudo node_tools/host_tune.sh')
node1.add_post_boot_execute('node_tools/enable_docker.sh {{ _self_.image }}')
node1.add_post_boot_execute(
'docker pull fabrictestbed/slice-vm-rocky8-multitool:0.0.2'
)
node2 = slice.add_node(
name="client",
site=site2,
cores=4,
ram=16,
disk=50,
image="default_rocky_9",
)
node2.add_fabnet()
node2.add_post_boot_upload_directory('node_tools', '.')
node2.add_post_boot_execute('sudo node_tools/host_tune.sh')
node2.add_post_boot_execute('node_tools/enable_docker.sh {{ _self_.image }}')
node2.add_post_boot_execute(
'docker pull fabrictestbed/slice-vm-rocky8-multitool:0.0.2'
)
slice.submit()
server = slice.get_node(name="server")
client = slice.get_node(name="client")
server_addr = server.get_interface(
network_name=f"FABNET_IPv4_{server.get_site()}"
).get_ip_addr()
# Start iPerf3 server (single test mode)
server.execute(
"docker run -d --rm --network host "
"fabrictestbed/slice-vm-rocky8-multitool:0.0.2 iperf3 -s -1"
)
# Run iPerf3 client (4 parallel streams, 30 sec, 10 sec omit)
stdout, stderr = client.execute(
f"docker run --rm --network host "
f"fabrictestbed/slice-vm-rocky8-multitool:0.0.2 "
f"iperf3 -c {server_addr} -P 4 -t 30 -i 10 -O 10"
)
print(stdout)
[site1, site2] = fablib.get_random_sites(count=2)
slice = fablib.new_slice(name="iperf3-optimized")
for name, site in [("server", site1), ("client", site2)]:
node = slice.add_node(
name=name,
site=site,
cores=8,
ram=32,
disk=50,
image="docker_rocky_8",
)
node.add_fabnet()
node.add_post_boot_upload_directory('node_tools', '.')
node.add_post_boot_execute('sudo node_tools/host_tune.sh')
node.add_post_boot_execute('node_tools/enable_docker.sh {{ _self_.image }}')
slice.submit()
# Apply CPU pinning and NUMA tuning
for node in slice.get_nodes():
node.pin_cpu(component_name='nic1')
node.numa_tune()
# Reboot to apply
for node in slice.get_nodes():
node.os_reboot()
slice.wait_ssh()
# Re-configure network interfaces after reboot
for node in slice.get_nodes():
node.config()
node.execute("sudo systemctl enable docker && sudo systemctl start docker")
server = slice.get_node(name="server")
client = slice.get_node(name="client")
server_addr = server.get_interface(
network_name=f"FABNET_IPv4_{server.get_site()}"
).get_ip_addr()
# Run optimized benchmark
server.execute(
"docker run -d --rm --network host "
"fabrictestbed/slice-vm-rocky8-multitool:0.0.2 iperf3 -s -1"
)
stdout, _ = client.execute(
f"docker run --rm --network host "
f"fabrictestbed/slice-vm-rocky8-multitool:0.0.2 "
f"iperf3 -c {server_addr} -P 8 -t 60 -i 10 -O 10"
)
print(stdout)
[site1, site2] = fablib.get_random_sites(
count=2,
filter_function=lambda x: x['nic_connectx_5_available'] > 0,
)
slice = fablib.new_slice(name="iperf3-smartnic")
net = slice.add_l3network(name="data-net", type="IPv4")
for name, site in [("server", site1), ("client", site2)]:
node = slice.add_node(
name=name,
site=site,
cores=16,
ram=32,
disk=50,
image="docker_rocky_8",
)
node.add_fabnet()
iface = node.add_component(model="NIC_ConnectX_5", name="nic1").get_interfaces()[0]
iface.set_mode("auto")
net.add_interface(iface)
node.add_post_boot_upload_directory('node_tools', '.')
node.add_post_boot_execute('sudo node_tools/host_tune.sh')
node.add_post_boot_execute('node_tools/enable_docker.sh {{ _self_.image }}')
slice.submit()
# Apply hardware optimization
for node in slice.get_nodes():
node.pin_cpu(component_name='nic1')
node.numa_tune()
node.os_reboot()
slice.wait_ssh()
for node in slice.get_nodes():
node.config()
node.execute("sudo systemctl enable docker && sudo systemctl start docker")
server = slice.get_node(name="server")
client = slice.get_node(name="client")
# Use dedicated NIC interface for benchmark
server_addr = server.get_interface(network_name="data-net").get_ip_addr()
server.execute(
"docker run -d --rm --network host "
"fabrictestbed/slice-vm-rocky8-multitool:0.0.2 iperf3 -s -1"
)
stdout, _ = client.execute(
f"docker run --rm --network host "
f"fabrictestbed/slice-vm-rocky8-multitool:0.0.2 "
f"iperf3 -c {server_addr} -P 16 -t 60 -i 10 -O 10"
)
print(stdout)
pin_cpu() aligns vCPUs with NIC's NUMA node for lowest latencynuma_tune() pins memory to same NUMA node as vCPUsslice.wait_ssh() then node.config() to restore interfaces-P parallel streams, -t duration, -O omit warmup seconds, -i interval