2020-01-16 10:34:45 +01:00
`` rustup `` Toolchain
====================
2020-01-16 10:45:46 +01:00
We normally want to build with the `` rustc `` Debian package. To do that
you can set the following `` rustup `` configuration:
2020-01-16 10:34:45 +01:00
# rustup toolchain link system /usr
2020-01-16 10:45:46 +01:00
# rustup default system
2020-01-16 10:34:45 +01:00
2020-01-02 14:10:18 +01:00
Versioning of proxmox helper crates
===================================
To use current git master code of the proxmox* helper crates, add::
2020-10-12 10:34:52 +02:00
git = "git://git.proxmox.com/git/proxmox"
2020-01-02 14:10:18 +01:00
2020-01-03 09:40:33 +01:00
or::
path = "../proxmox/proxmox"
2020-01-02 14:10:18 +01:00
to the proxmox dependency, and update the version to reflect the current,
pre-release version number (e.g., "0.1.1-dev.1" instead of "0.1.0").
2020-10-09 11:34:55 +02:00
2020-01-03 09:40:33 +01:00
Local cargo config
==================
2020-01-02 14:10:18 +01:00
2020-01-03 09:40:33 +01:00
This repository ships with a `` .cargo/config `` that replaces the crates.io
registry with packaged crates located in `` /usr/share/cargo/registry `` .
2020-01-02 14:10:18 +01:00
2020-01-03 09:40:33 +01:00
A similar config is also applied building with dh_cargo. Cargo.lock needs to be
deleted when switching between packaged crates and crates.io, since the
2020-01-02 14:10:18 +01:00
checksums are not compatible.
2020-01-03 09:40:33 +01:00
To reference new dependencies (or updated versions) that are not yet packaged,
the dependency needs to point directly to a path or git source (e.g., see
example for proxmox crate above).
2020-10-09 11:34:55 +02:00
Build
=====
on Debian Buster
Setup:
2020-10-12 10:34:52 +02:00
1. # echo 'deb http://download.proxmox.com/debian/devel/ buster main' >> /etc/apt/sources.list.d/proxmox-devel.list
2. # sudo wget http://download.proxmox.com/debian/proxmox-ve-release-6.x.gpg -O /etc/apt/trusted.gpg.d/proxmox-ve-release-6.x.gpg
3. # sudo apt update
4. # sudo apt install devscripts debcargo clang
5. # git clone git://git.proxmox.com/git/proxmox-backup.git
6. # sudo mk-build-deps -ir
Note: 2. may be skipped if you already added the PVE or PBS package repository
2020-10-09 11:34:55 +02:00
You are now able to build using the Makefile or cargo itself.
2020-12-01 08:47:15 +01:00
Design Notes
============
Here are some random thought about the software design (unless I find a better place).
Large chunk sizes
-----------------
It is important to notice that large chunk sizes are crucial for
performance. We have a multi-user system, where different people can do
different operations on a datastore at the same time, and most operation
involves reading a series of chunks.
So what is the maximal theoretical speed we can get when reading a
series of chunks? Reading a chunk sequence need the following steps:
- seek to the first chunk start location
- read the chunk data
- seek to the first chunk start location
- read the chunk data
- ...
Lets use the following disk performance metrics:
:AST: Average Seek Time (second)
:MRS: Maximum sequential Read Speed (bytes/second)
:ACS: Average Chunk Size (bytes)
The maximum performance you can get is::
MAX(ACS) = ACS /(AST + ACS/MRS)
Please note that chunk data is likely to be sequential arranged on disk, but
this it is sort of a best case assumption.
For a typical rotational disk, we assume the following values::
AST: 10ms
MRS: 170MB/s
MAX(4MB) = 115.37 MB/s
MAX(1MB) = 61.85 MB/s;
MAX(64KB) = 6.02 MB/s;
MAX(4KB) = 0.39 MB/s;
MAX(1KB) = 0.10 MB/s;
Modern SSD are much faster, lets assume the following::
max IOPS: 20000 => AST = 0.00005
MRS: 500Mb/s
MAX(4MB) = 474 MB/s
MAX(1MB) = 465 MB/s;
MAX(64KB) = 354 MB/s;
MAX(4KB) = 67 MB/s;
MAX(1KB) = 18 MB/s;