Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dev/rackscale benchmark framework #324

Merged
merged 22 commits into from
Jul 20, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
f90a473
Add rackscale ethernet multiclient integration test
hunhoffe Jul 6, 2023
c98f9bb
refine config for rackscale fxmark bench
hunhoffe Jul 16, 2023
bf62486
Remove debug statements
hunhoffe Jul 16, 2023
c2265e6
Revert unnecessary changes
hunhoffe Jul 16, 2023
b3ee39c
Add mode field to runner args
hunhoffe Jul 17, 2023
9fcc15e
Add rackscale transport to runner args
hunhoffe Jul 17, 2023
7760fbd
Created rackscale runner framework for rackscale integration tests
hunhoffe Jul 17, 2023
622f083
Add rackscalerunstate constructor, port another integration test
hunhoffe Jul 17, 2023
88acb91
Port more rackscale integration tests to use rackscale test runner
hunhoffe Jul 17, 2023
1bff716
Add documenting comments to the rackscalerunstate struct, finish port…
hunhoffe Jul 17, 2023
f632157
Use rackscale runner in rackscale fxmark bench
hunhoffe Jul 17, 2023
04af3c7
Use rackscale runner in rackscale vmops benches
hunhoffe Jul 17, 2023
a26845e
Add rackscale baseline runner, use it in rackscale fxmark bench
hunhoffe Jul 17, 2023
cb1742e
Remove unnecessary setting in rackscale baseline runner
hunhoffe Jul 17, 2023
bbb5fc6
Use runner for vmops baseline, found and fixed bug in vmops baseline …
hunhoffe Jul 18, 2023
6ceb249
Made more object oriented, benchmarks are a work in progress
hunhoffe Jul 18, 2023
fdc1831
Rename rackscale runner structs
hunhoffe Jul 18, 2023
2a81aff
Update vmops bench to use new bench runner struct
hunhoffe Jul 18, 2023
3d688bd
Just build ivshmem-server for rackscale, fix documentation formatting
hunhoffe Jul 19, 2023
082fa0b
prepare to port leveldb bench to runner framework
hunhoffe Jul 19, 2023
902efc7
Leveldb smoke test working
hunhoffe Jul 19, 2023
6bc643f
Fix documentation
hunhoffe Jul 20, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 12 additions & 10 deletions doc/src/environment/Environment.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,27 +13,29 @@ in the package repository.
First, make sure to uncomment all #deb-src lines in /etc/apt/sources.list if not
already uncommented. Then, run the following commands:

For any build:
```bash
sudo apt update
sudo apt install build-essential libpmem-dev libdaxctl-dev ninja-build flex bison
apt source qemu
sudo apt build-dep qemu

For non-rackscale mode, execute the following:
```

For non-rackscale:
```bash
wget https://download.qemu.org/qemu-6.0.0.tar.xz
tar xvJf qemu-6.0.0.tar.xz
cd qemu-6.0.0
```

For rackscale mode, instead run:
```
git clone https://github.com/hunhoffe/qemu.git qemu-6.0.0.tar.xz
For non-rackscale OR rackscale:
```bash
git clone https://github.com/hunhoffe/qemu.git qemu-6.0.0
cd qemu-6.0.0
git checkout --track origin/dev/ivshmem-numa
```

For either option, build and install with:
For any build:
```bash
./configure --enable-rdma --enable-libpmem
make -j 28
Expand All @@ -48,7 +50,7 @@ You can also add `--enable-debug` to the configure script which will add debug
information (useful for source information when stepping through qemu code in
gdb).

Note that if you are only updating the ```ivshmem-server```, it may not install
correctly with the ```make install``` command above. Instead, you can use
```which ivshmem-server``` to find the current location and then overwrite it
with ```qemu-6.0.0/build/contrib/ivshmem-server/ivshmem-server```.
Note that sometimes ```make install``` doesn't actually replace the
```ivshmem-server```. Use ```which ivshmem-server``` to find the current
location and then overwrite it with
```qemu/build/contrib/ivshmem-server/ivshmem-server```.
2 changes: 1 addition & 1 deletion kernel/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ fn main() {
}

let output = Command::new("git")
.args(&["rev-parse", "HEAD"])
.args(["rev-parse", "HEAD"])
.output()
.expect("Could not determine git hash");
let git_hash = String::from_utf8(output.stdout).expect("Could not parse the git hash");
Expand Down
3 changes: 2 additions & 1 deletion kernel/src/arch/x86_64/rackscale/client_state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ use rpc::client::Client;
use rpc::rpc::RPCError;

use crate::arch::kcb::try_per_core_mem;
use crate::arch::rackscale::controller::CONTROLLER_PORT_BASE;
use crate::arch::rackscale::fileops::rw::{RW_SHMEM_BUF, RW_SHMEM_BUF_LEN};
use crate::arch::rackscale::FrameCacheBase;
use crate::arch::MAX_MACHINES;
Expand Down Expand Up @@ -47,7 +48,7 @@ impl ClientState {
Arc::new(Mutex::new(
crate::transport::ethernet::init_ethernet_rpc(
smoltcp::wire::IpAddress::v4(172, 31, 0, 11),
6970,
CONTROLLER_PORT_BASE + (*crate::environment::MACHINE_ID as u16 - 1),
true,
)
.expect("Failed to initialize ethernet RPC"),
Expand Down
28 changes: 15 additions & 13 deletions kernel/src/arch/x86_64/rackscale/controller.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ use crate::transport::shmem::create_shmem_transport;

use super::*;

const PORT: u16 = 6970;
pub(crate) const CONTROLLER_PORT_BASE: u16 = 6970;

/// Controller main method
pub(crate) fn run() {
Expand Down Expand Up @@ -51,19 +51,21 @@ pub(crate) fn run() {
.get()
.map_or(false, |c| c.transport == Transport::Ethernet)
{
if num_clients > 1 {
panic!("Ethernet transport only supports on client, currently");
}

let transport = Box::try_new(
TCPTransport::new(None, PORT, Arc::clone(&ETHERNET_IFACE))
for mid in 0..num_clients {
let transport = Box::try_new(
TCPTransport::new(
None,
CONTROLLER_PORT_BASE + mid as u16,
Arc::clone(&ETHERNET_IFACE),
)
.expect("Failed to create TCP transport"),
)
.expect("Out of memory during init");
let mut server: Box<dyn RPCServer<ControllerState>> =
Box::try_new(Server::new(transport)).expect("Out of memory during init");
register_rpcs(&mut server);
servers.push(server);
)
.expect("Out of memory during init");
let mut server: Box<dyn RPCServer<ControllerState>> =
Box::try_new(Server::new(transport)).expect("Out of memory during init");
register_rpcs(&mut server);
servers.push(server);
}
} else if crate::CMDLINE
.get()
.map_or(false, |c| c.transport == Transport::Shmem)
Expand Down
Loading
Loading