원클릭으로
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 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
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
| 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