caladan

所属分类:嵌入式/单片机/硬件编程
开发工具:C
文件大小:0KB
下载次数:0
上传日期:2023-06-26 17:44:23
上 传 者sh-1993
说明:  干扰感知CPU调度,为数据中心服务器实现性能隔离和高CPU利用率,
(Interference-aware CPU scheduling that enables performance isolation and high CPU utilization for datacenter servers,)

文件列表:
CONTRIBUTING.md (1078, 2022-10-31)
LICENSE (11357, 2022-10-31)
Makefile (2817, 2022-10-31)
antagonist.config (198, 2022-10-31)
apps/ (0, 2022-10-31)
apps/bench/ (0, 2022-10-31)
apps/bench/Makefile (4987, 2022-10-31)
apps/bench/RpcManager.cc (3551, 2022-10-31)
apps/bench/RpcManager.h (2906, 2022-10-31)
apps/bench/callibrate.cc (1326, 2022-10-31)
apps/bench/efficiency.cc (4141, 2022-10-31)
apps/bench/efficiency_go.go (2667, 2022-10-31)
apps/bench/efficiency_linux.cc (4530, 2022-10-31)
apps/bench/fake_worker.cc (3468, 2022-10-31)
apps/bench/fake_worker.h (1866, 2022-10-31)
apps/bench/flash_client.cc (3256, 2022-10-31)
apps/bench/linux_mech_bench.cc (18224, 2022-10-31)
apps/bench/memcached_router.cc (5634, 2022-10-31)
apps/bench/netbench.cc (9094, 2022-10-31)
apps/bench/netbench2.cc (14714, 2022-10-31)
apps/bench/netbench_linux.cc (5792, 2022-10-31)
apps/bench/netbench_udp.cc (11242, 2022-10-31)
apps/bench/netperf.cc (5732, 2022-10-31)
apps/bench/proto.h (469, 2022-10-31)
apps/bench/storage_bench.cc (7896, 2022-10-31)
apps/bench/stress.cc (1708, 2022-10-31)
apps/bench/stress.config (206, 2022-10-31)
apps/bench/stress_linux.cpp (1498, 2022-10-31)
apps/bench/tbench.cc (2500, 2022-10-31)
apps/bench/tbench.config (202, 2022-10-31)
apps/bench/waking.config (156, 2022-10-31)
apps/dpdk_netperf/ (0, 2022-10-31)
apps/dpdk_netperf/Makefile (2408, 2022-10-31)
... ...

# Caladan Caladan is a system that enables servers in datacenters to simultaneously provide low tail latency and high CPU efficiency, by rapidly reallocating cores across applications. ### Contact For any questions about Caladan, please email . ## How to Run Caladan 1) Clone the Caladan repository. 2) Install dependencies. ``` sudo apt install make gcc cmake pkg-config libnl-3-dev libnl-route-3-dev libnuma-dev uuid-dev libssl-dev libaio-dev libcunit1-dev libclang-dev libncurses-dev meson python3-pyelftools ``` 3) Set up submodules (e.g., DPDK, SPDK, and rdma-core). ``` make submodules ``` 4) Build the scheduler (IOKernel), the Caladan runtime, and Ksched and perform some machine setup. Before building, set the parameters in build/config (e.g., `CONFIG_SPDK=y` to use storage, `CONFIG_DIRECTPATH=y` to use directpath, and the MLX4 or MLX5 flags to use MLX4 or MLX5 NICs, respectively, ). To enable debugging, set `CONFIG_DEBUG=y` before building. ``` make clean && make pushd ksched make clean && make popd sudo ./scripts/setup_machine.sh ``` 5) Install Rust and build a synthetic client-server application. ``` curl https://sh.rustup.rs -sSf | sh rustup default nightly ``` ``` cd apps/synthetic cargo clean cargo update cargo build --release ``` 6) Run the synthetic application with a client and server. The client sends requests to the server, which performs a specified amount of fake work (e.g., computing square roots for 10us), before responding. On the server: ``` sudo ./iokerneld ./apps/synthetic/target/release/synthetic 192.168.1.3:5000 --config server.config --mode spawner-server ``` On the client: ``` sudo ./iokerneld ./apps/synthetic/target/release/synthetic 192.168.1.3:5000 --config client.config --mode runtime-client ``` ## Supported Platforms This code has been tested most thoroughly on Ubuntu 18.04 with kernel 5.2.0 and Ubuntu 20.04 with kernel 5.4.0. ### NICs This code has been tested with Intel 82599ES 10 Gbits/s NICs, Mellanox ConnectX-3 Pro 10 Gbits/s NICs, and Mellanox Connect X-5 40 Gbits/s NICs. If you use Mellanox NICs, you should install the Mellanox OFED as described in [DPDK's documentation](https://doc.dpdk.org/guides/nics/mlx4.html). If you use Intel NICs, you should insert the IGB UIO module and bind your NIC interface to it (e.g., using the script `./dpdk/usertools/dpdk-setup.sh`). To enable Jumbo Frames for higher throughput, first enable them in Linux on the relevant interface like so: ``` ip link set eth0 mtu 9000 ``` Then use the (`host_mtu`) option in the config file of each runtime to set the MTU to the value you'd like, up to the size of the MTU set for the interface. #### Directpath Directpath allows runtime cores to directly send packets to/receive packets from the NIC, enabling higher throughput than when the IOKernel handles all packets. Directpath is currently only supported with Mellanox ConnectX-5 using Mellanox OFED v4.6 or newer. NIC firmware must include support for User Context Objects (DEVX) and Software Managed Steering Tables. For the ConnectX-5, the firmware version must be at least 16.26.1040. Additionally, directpath requires Linux kernel version 5.0.0 or newer. To enable directpath, set `CONFIG_DIRECTPATH=y` in build/config before building and add `enable_directpath` to the config file for all runtimes that should use directpath. Each runtime launched with directpath must currently run as root and have a unique IP address. ### Storage This code has been tested with an Intel Optane SSD 900P Series NVMe device. If your device has op latencies that are greater than 10us, consider updating the device_latency_us variable (or the known_devices list) in runtime/storage.c. ## More Examples #### Running a simple block storage server Ensure that you have compiled Caladan with storage support by setting the appropriate flag in build/config, and that you have built the synthetic client application. Compile the C++ bindings and the storage server: ``` make -C bindings/cc make -C apps/storage_service ``` On the server: ``` sudo ./iokerneld sudo spdk/scripts/setup.sh sudo apps/storage_service/storage_server storage_server.config ``` On the client: ``` sudo ./iokerneld sudo apps/synthetic/target/release/synthetic --config=storage_client.config --mode=runtime-client --mpps=0.55 --protocol=reflex --runtime=10 --samples=10 --threads=20 --transport=tcp 192.168.1.3:5000 ``` #### Running with interference Ensure that you have built the synthetic application on client and server. Compile the C++ bindings and the memory/cache antagonist: ``` make -C bindings/cc make -C apps/netbench ``` On the server, run the IOKernel with the interference-aware scheduler (ias), the synthetic application, and the cache antagonist: ``` sudo ./iokerneld ias ./apps/synthetic/target/release/synthetic 192.168.1.8:5000 --config victim.config --mode spawner-server ./apps/netbench/stress antagonist.config 20 10 cacheantagonist:4090880 ``` On the client: ``` sudo ./iokerneld ./apps/synthetic/target/release/synthetic 192.168.1.8:5000 --config client.config --mode runtime-client ``` You should observe that you can stop and start the antagonist and that the synthetic application's latency is not impacted. In contrast, if you use Shenango's default scheduler (`sudo ./iokerneld`) on the server, when you run the antagonist with the synthetic application, the synthetic application's latency degrades.

近期下载者

相关文件


收藏者