diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8403905ae..20b1ffe50 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -54,3 +54,5 @@ jobs: - name: Building release version run: cargo build -Z build-std=std,core,alloc,panic_abort --target x86_64-unknown-hermit --release + env: + RUSTFLAGS: -Clinker-plugin-lto diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 88f510ebc..97b4729de 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -62,6 +62,8 @@ jobs: - name: Building release version run: cargo build -Z build-std=std,core,alloc,panic_abort --target x86_64-unknown-hermit --release + env: + RUSTFLAGS: -Clinker-plugin-lto - name: Build loader (unix) working-directory: loader run: make diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ff4129215..cf6ca500f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -24,7 +24,7 @@ build: stage: build script: - cargo build -Z build-std=std,core,alloc,panic_abort --target x86_64-unknown-hermit - - cargo build -Z build-std=std,core,alloc,panic_abort --target x86_64-unknown-hermit --release + - RUSTFLAGS="-Clinker-plugin-lto" cargo build -Z build-std=std,core,alloc,panic_abort --target x86_64-unknown-hermit --release image: ${IMAGE} cache: paths: diff --git a/.travis.yml b/.travis.yml index 6198a7e6a..94382b996 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,7 +30,7 @@ jobs: - sudo -E sudo -u $USER -E bash -c "HERMIT_VERBOSE=1 HERMIT_CPUS=2 $HOME/.cargo/bin/uhyve target/x86_64-unknown-hermit/debug/rusty_demo" - name: "Test Release Build" script: - - cargo build -Z build-std=std,core,alloc,panic_abort --target x86_64-unknown-hermit --release + - RUSTFLAGS="-Clinker-plugin-lto" cargo build -Z build-std=std,core,alloc,panic_abort --target x86_64-unknown-hermit --release - sudo -E sudo -u $USER -E bash -c "HERMIT_VERBOSE=1 $HOME/.cargo/bin/uhyve target/x86_64-unknown-hermit/release/rusty_demo" - sudo -E sudo -u $USER -E bash -c "HERMIT_VERBOSE=1 HERMIT_CPUS=2 $HOME/.cargo/bin/uhyve target/x86_64-unknown-hermit/release/rusty_demo" diff --git a/Cargo.lock b/Cargo.lock index c6bce1ddc..fc406fe82 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -21,7 +21,7 @@ version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ - "hermit-abi 0.1.13", + "hermit-abi 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", "libc", "winapi 0.3.8", ] @@ -52,9 +52,12 @@ checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" [[package]] name = "bytes" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "130aac562c0dd69c56b3b1cc8ffd2e17be31d0b6c25b61c96b76231aa23e39e1" +checksum = "118cf036fbb97d0816e3c34b2d7a1e8cfc60f68fcf63d550ddbe9bd5f59c213b" +dependencies = [ + "loom", +] [[package]] name = "cc" @@ -80,9 +83,9 @@ dependencies = [ [[package]] name = "chunked_transfer" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b89647f09b9f4c838cb622799b2843e4e13bff64661dab9a0362bb92985addd" +checksum = "1d29eb15132782371f71da8f947dba48b3717bdb6fa771b9b434d645e40a7193" [[package]] name = "clap" @@ -101,9 +104,9 @@ dependencies = [ [[package]] name = "compiler_builtins" -version = "0.1.28" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439a6fab343b1dab347823537734a5cd4ae6ae2000b465ab886f64cdb723bd14" +checksum = "7bc4ac2c824d2bfc612cba57708198547e9a26943af0632aff033e0693074d5c" dependencies = [ "rustc-std-workspace-core", ] @@ -158,12 +161,13 @@ dependencies = [ [[package]] name = "crossbeam-queue" -version = "0.2.1" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c695eeca1e7173472a32221542ae469b3e9aac3a4fc81f7696bcad82029493db" +checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570" dependencies = [ "cfg-if", "crossbeam-utils", + "maybe-uninit", ] [[package]] @@ -183,6 +187,19 @@ version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3" +[[package]] +name = "generator" +version = "0.6.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "add72f17bb81521258fcc8a7a3245b1e184e916bfbe34f0ea89558f440df5c68" +dependencies = [ + "cc", + "libc", + "log", + "rustc_version", + "winapi 0.3.8", +] + [[package]] name = "hdrhist" version = "0.5.0" @@ -191,20 +208,20 @@ checksum = "51b22edfb537aaffec56e77d3116a1dd0a0fa8bb5a8bd7d6d4a522132c9bb383" [[package]] name = "hermit-abi" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91780f809e750b0a89f5544be56617ff6b1227ee485bcb06ebe10cdf89bd3b71" +version = "0.1.14" dependencies = [ + "compiler_builtins", "libc", + "rustc-std-workspace-core", ] [[package]] name = "hermit-abi" version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9586eedd4ce6b3c498bc3b4dd92fc9f11166aa908a914071953768066c67909" dependencies = [ - "compiler_builtins", "libc", - "rustc-std-workspace-core", ] [[package]] @@ -257,9 +274,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.70" +version = "0.2.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3baa92041a6fec78c687fa0cc2b3fae8884f743d672cf551bed1d6dac6988d0f" +checksum = "9457b06509d27052635f90d6466700c65095fdf75409b3fbdd903e988b886f49" dependencies = [ "rustc-std-workspace-core", ] @@ -279,11 +296,22 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "loom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ecc775857611e1df29abba5c41355cdf540e7e9d4acfdf0f355eefee82330b7" +dependencies = [ + "cfg-if", + "generator", + "scoped-tls", +] + [[package]] name = "managed" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdcec5e97041c7f0f1c5b7d93f12e57293c831c646f4cc7a5db59460c7ea8de6" +checksum = "c75de51135344a4f8ed3cfe2720dc27736f7711989703a0b43aadf3753c55577" [[package]] name = "matches" @@ -308,9 +336,9 @@ dependencies = [ [[package]] name = "num-integer" -version = "0.1.42" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba" +checksum = "8d59457e662d541ba17869cf51cf177c0b5f0cbf476c66bdc90bf1edac4f875b" dependencies = [ "autocfg", "num-traits", @@ -318,9 +346,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096" +checksum = "ac267bcc07f48ee5f8935ab0d24f316fb722d7a1292e2913f0cc196b29ffd611" dependencies = [ "autocfg", ] @@ -331,7 +359,7 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" dependencies = [ - "hermit-abi 0.1.13", + "hermit-abi 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", "libc", ] @@ -343,27 +371,27 @@ checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" [[package]] name = "proc-macro2" -version = "1.0.13" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53f5ffe53a6b28e37c9c1ce74893477864d64f74778a93a4beb43c8fa167f639" +checksum = "beae6331a816b1f65d04c45b078fd8e6c93e8071771f41b8163255bbd8d7c8fa" dependencies = [ "unicode-xid", ] [[package]] name = "quote" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54a21852a652ad6f610c9510194f398ff6f8692e334fd1145fed931f7fbe44ea" +checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" dependencies = [ "proc-macro2", ] [[package]] name = "raw-cpuid" -version = "8.0.0" +version = "8.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e9c0f2091b865a94bc3c9d34896cc4bbda04453453c391f7eb224491be9ae1d" +checksum = "5ab01b333691cd32fa882476c0fd735e98a85bf080853728936210562d0cdca6" dependencies = [ "bitflags", "cc", @@ -372,10 +400,11 @@ dependencies = [ [[package]] name = "rayon" -version = "1.3.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db6ce3297f9c85e16621bb8cca38a06779ffc31bb8184e1be4bed2be4678a098" +checksum = "62f02856753d04e03e26929f820d0a0a337ebe71f849801eea335d464b349080" dependencies = [ + "autocfg", "crossbeam-deque", "either", "rayon-core", @@ -383,9 +412,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.7.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08a89b46efaf957e52b18062fb2f4660f8b8a4dde1807ca002690868ef2c85a9" +checksum = "e92e15d89083484e11353891f1af602cc661426deb9564c298b270c726973280" dependencies = [ "crossbeam-deque", "crossbeam-queue", @@ -438,6 +467,12 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "scoped-tls" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "332ffa32bf586782a3efaeb58f127980944bbc8c4d6913a86107ac2a5ab24b28" + [[package]] name = "scopeguard" version = "1.1.0" @@ -461,18 +496,18 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.110" +version = "1.0.113" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99e7b308464d16b56eba9964e4972a3eee817760ab60d88c3f86e1fecb08204c" +checksum = "6135c78461981c79497158ef777264c51d9d0f4f3fc3a4d22b915900e42dac6a" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.110" +version = "1.0.113" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "818fbf6bfa9a42d3bfcaca148547aa00c7b915bec71d1757aa2d44ca68771984" +checksum = "93c5eaa17d0954cb481cdcfffe9d84fcfa7a1a9f2349271e678677be4c26ae31" dependencies = [ "proc-macro2", "quote", @@ -481,21 +516,15 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd02c7587ec314570041b2754829f84d873ced14a96d1fd1823531e11db40573" +checksum = "2dc6b7951b17b051f3210b063f12cc17320e2fe30ae05b0fe2a3abb068551c76" dependencies = [ "proc-macro2", "quote", "syn", ] -[[package]] -name = "smallvec" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7cb5678e1615754284ec264d9bb5b4c27d2018577fd90ac0ceb578591ed5ee4" - [[package]] name = "smoltcp" version = "0.6.0" @@ -504,7 +533,6 @@ checksum = "0fe46639fd2ec79eadf8fe719f237a7a0bd4dac5d957f1ca5bbdbc1c3c39e53a" dependencies = [ "bitflags", "byteorder", - "log", "managed", ] @@ -516,9 +544,9 @@ checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" [[package]] name = "syn" -version = "1.0.22" +version = "1.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1425de3c33b0941002740a420b1a906a350b88d08b82b2c8a01035a3f9447bac" +checksum = "a994520748611c17d163e81b6c4a4b13d11b7f63884362ab2efac3aa9cf16d00" dependencies = [ "proc-macro2", "quote", @@ -557,6 +585,12 @@ dependencies = [ "url", ] +[[package]] +name = "tinyvec" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53953d2d3a5ad81d9f844a32f14ebb121f50b650cd59d0ee2a07cf13c617efed" + [[package]] name = "unicode-bidi" version = "0.3.4" @@ -568,11 +602,11 @@ dependencies = [ [[package]] name = "unicode-normalization" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5479532badd04e128284890390c1e876ef7a993d0570b3597ae43dfa1d59afa4" +checksum = "6fb19cf769fa8c6a80a162df694621ebeb4dafb606470b2b2fce0be40a98a977" dependencies = [ - "smallvec", + "tinyvec", ] [[package]] @@ -660,9 +694,9 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "x86" -version = "0.33.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2786ac694ed572ab5d2bbcd9e188805dba26b3501973dd69718914fb3d4a5a69" +checksum = "c146cbc47471e076987378c159a7aa8fa434680c6fbddca59fe6f40f1591c819" dependencies = [ "bit_field", "bitflags", diff --git a/Cargo.toml b/Cargo.toml index 9b3b53128..983704811 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,7 @@ exclude = ["target", "loader", "libhermit-rs"] opt-level = 3 debug = false rpath = false -lto = false +lto = "thin" debug-assertions = false [profile.dev] diff --git a/README.md b/README.md index a54aba009..0f634a1da 100644 --- a/README.md +++ b/README.md @@ -180,6 +180,21 @@ The resulting "hypervisor-ready" binary then can be found in `target/x86_64-unkn A simple example is published at [rusty-demo](https://github.com/hermitcore/rusty-demo). +To enable *Link Time Optimization* (LTO), please extend the release configuration in *Cargo.toml* as follows: + +```toml +[profile.release] +opt-level = 3 +lto = "thin" +``` + +In addition, the [Linker-plugin LTO](https://doc.rust-lang.org/rustc/linker-plugin-lto.html) have to be enabled by setting the compiler flag `linker-plugin-lto`. +In this case, the release version have to build as follows: + +```sh +RUSTFLAGS="-Clinker-plugin-lto" cargo build -Z build-std=std,core,alloc,panic_abort --target x86_64-unknown-hermit --release +``` + ## Network support To enable an ethernet device, we have to setup a tap device on the diff --git a/demo/Cargo.toml b/demo/Cargo.toml index b7be027a9..4cd2726a9 100644 --- a/demo/Cargo.toml +++ b/demo/Cargo.toml @@ -9,7 +9,7 @@ publish = false rayon = "1.3.0" [target.'cfg(all(any(target_arch = "x86_64", target_arch = "aarch64"), target_os = "hermit"))'.dependencies] -hermit-sys = { path = "../hermit-sys", default-features = false, features = ["smoltcp", "with_submodule"] } +hermit-sys = { path = "../hermit-sys", default-features = false, features = ["with_submodule"] } [target.'cfg(target_os = "linux")'.dependencies] syscalls = { version = "0.2", default-features = false } diff --git a/demo/src/main.rs b/demo/src/main.rs index 2f94417d8..1237755e8 100644 --- a/demo/src/main.rs +++ b/demo/src/main.rs @@ -58,11 +58,6 @@ fn main() { stringify!(threading), test_result(threading()) ); - /*println!( - "Test {} ... {}", - stringify!(random_number), - test_result(random_number()) - );*/ println!( "Test {} ... {}", stringify!(pi_sequential), @@ -103,9 +98,4 @@ fn main() { stringify!(bench_syscall), test_result(bench_syscall()) ); - println!( - "Test {} ... {}", - stringify!(test_http_request), - test_result(test_http_request()) - ); } diff --git a/demo/src/tests/mod.rs b/demo/src/tests/mod.rs index faedf68a3..aa01eaf06 100644 --- a/demo/src/tests/mod.rs +++ b/demo/src/tests/mod.rs @@ -346,29 +346,3 @@ pub fn matrix_setup(size_x: usize, size_y: usize) -> vec::Vec> { matrix } - -fn send_http_rquest() -> Result, std::io::Error> { - let mut stream = TcpStream::connect("10.0.5.1:7878")?; - let buf = - b"GET / HTTP/1.1\r\nHost: 10.0.5.1\r\nUser-Agent: hermit/0.3.16\r\nAccept: */*\r\n\r\n"; - stream.write_all(buf)?; - - let mut buf = Vec::new(); - stream.read_to_end(&mut buf)?; - - Ok(buf) -} - -pub fn test_http_request() -> Result<(), std::io::Error> { - let buf = send_http_rquest()?; - let data = str::from_utf8(&buf).unwrap().to_owned(); - - //println!("Receive {}", data); - - match data.starts_with("HTTP/1.1 200 OK") { - true => println!("Check http response... ok"), - _ => println!("Check http response... failed!"), - }; - - Ok(()) -} diff --git a/hermit-sys/Cargo.toml b/hermit-sys/Cargo.toml index 4c3223a9d..c0f286c63 100644 --- a/hermit-sys/Cargo.toml +++ b/hermit-sys/Cargo.toml @@ -35,7 +35,9 @@ default-features = false version = "0.6.0" optional = true default-features = false -features = ["log", "verbose", "std", "ethernet", "socket-udp", "socket-tcp", "proto-ipv4", "proto-ipv6"] +features = ["std", "ethernet", "socket-udp", "socket-tcp", "proto-ipv4", "proto-ipv6"] +# to increase the output the features log and verbose should be enabled +#features = ["log", "verbose", "std", "ethernet", "socket-udp", "socket-tcp", "proto-ipv4", "proto-ipv6"] [dependencies.crossbeam-channel] version = "0.4" diff --git a/libhermit-rs b/libhermit-rs index e4212aa3b..bc1d5d866 160000 --- a/libhermit-rs +++ b/libhermit-rs @@ -1 +1 @@ -Subproject commit e4212aa3b368a44ab4281037edb067fe803bbde2 +Subproject commit bc1d5d8665003efb4594ffff35857883e54c6ee2 diff --git a/loader b/loader index 8d6047a43..23e217d92 160000 --- a/loader +++ b/loader @@ -1 +1 @@ -Subproject commit 8d6047a43646a09d927c563e1433b67d9d67df78 +Subproject commit 23e217d925ef57892792fb384d49596485c5e6df