Compare commits
154 Commits
0201de0332
...
master
Author | SHA1 | Date | |
---|---|---|---|
e618a72861 | |||
d518705898 | |||
a86c295ccd | |||
e8806a63ad | |||
d7bd47dd9a | |||
8ea2e78240 | |||
cff2e8bc22 | |||
940aa6b1b8 | |||
7bb725c95a | |||
b1e3000ae7 | |||
e92955c517 | |||
17fd5b1608 | |||
bf0e5bd3c1 | |||
673a53331a | |||
53593e4ab4 | |||
2cc5e727e4 | |||
7c518abd82 | |||
c684fcc281 | |||
a50ffef486 | |||
b47a966aed | |||
e25df4998f | |||
81437d3315 | |||
25accaf691 | |||
d32cfb8623 | |||
50b82f466c | |||
0e0cc322a1 | |||
0501a70b84 | |||
9c2b30e387 | |||
2fdf4c5f72 | |||
3c5cc84ed0 | |||
1f8db62abf | |||
f319961933 | |||
d01e7bd751 | |||
b0b5b3865f | |||
ccdaaec4d5 | |||
c694d8599d | |||
7565b9f5db | |||
4cdc633f16 | |||
616ff5ba1c | |||
1bcc63a906 | |||
c21df2afec | |||
6bb764755b | |||
a28067001d | |||
7c63bbd19d | |||
cb00bb57ec | |||
96ba650c29 | |||
c7ee4f112d | |||
974bc443fb | |||
8f0ecc425b | |||
b583caa8b6 | |||
6739be79d9 | |||
346c70f364 | |||
262470f935 | |||
cbf51c7d28 | |||
2100ee6e33 | |||
4ef7684e55 | |||
e607173f9f | |||
35a30ad21c | |||
bdef531589 | |||
18ebb4d59d | |||
56d59cbe3c | |||
db40b9c4ab | |||
3bb5694614 | |||
29ab0b6f76 | |||
75041a17c2 | |||
c5bbf6746f | |||
e3342f0c37 | |||
6c16864add | |||
0cb9a5df89 | |||
3703290004 | |||
d2166a32e5 | |||
a728189ea5 | |||
f4a8668ced | |||
f816df413d | |||
7fa632f30e | |||
f5c2d4fd5a | |||
fa8af73671 | |||
ff64ca341b | |||
a95229b080 | |||
95b3161325 | |||
d025cc9c0d | |||
56a203a35a | |||
b860b32564 | |||
8455ab1ca2 | |||
8dcd2c3388 | |||
f6bbc8954c | |||
a2c7fb5590 | |||
94972f8b8c | |||
fbe4f809d6 | |||
d00954c284 | |||
fd3f09a537 | |||
09359c21cf | |||
3f98498413 | |||
62d10b97e0 | |||
31fabee805 | |||
67625675a5 | |||
736bca8d81 | |||
ae416c5f4e | |||
8d463f77e3 | |||
363d634215 | |||
9e9e340957 | |||
7089038ca6 | |||
a841a9a26a | |||
2a63a235ed | |||
045e35083a | |||
d5f00eb1a3 | |||
b2cf92c0b0 | |||
bb5004d3cd | |||
f90930518b | |||
d2ca728a4a | |||
35edb2a7e4 | |||
9d3592ffd2 | |||
b7c7ecdda6 | |||
8d2a3066e0 | |||
8bf5ef4cb0 | |||
8eec0d432b | |||
ea938ab17a | |||
e267456952 | |||
2eabd6e748 | |||
60d5db6870 | |||
0f8189601b | |||
aae7cebfc5 | |||
15c19fc5c3 | |||
97bd9c15d1 | |||
2c735c1ae9 | |||
7fee835ecf | |||
d7cc0a0719 | |||
2b49f51f82 | |||
3765db181e | |||
1695ff9a0c | |||
972038a1a1 | |||
341033b817 | |||
cf674aec70 | |||
ef119677d7 | |||
b7d57e0bd9 | |||
5e5175b639 | |||
5c026de95e | |||
21a41cb1a4 | |||
b4fa762f86 | |||
6799e37994 | |||
c0300285fd | |||
3cc3a5dd29 | |||
3e7eb613fc | |||
b1c6fd541e | |||
f9ffef0a77 | |||
0e917d9e98 | |||
400fb54d9b | |||
87c9d6ef66 | |||
37753e391e | |||
177d3de4e0 | |||
b371bae9b0 | |||
cb1601672a | |||
a363f3852e | |||
4e193a61a9 |
1
.gitignore
vendored
@ -1 +1,2 @@
|
|||||||
public/
|
public/
|
||||||
|
resources/
|
||||||
|
3
.gitmodules
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[submodule "themes/hugo-blog-awesome"]
|
||||||
|
path = themes/hugo-blog-awesome
|
||||||
|
url = https://github.com/joshuaboniface/hugo-blog-awesome
|
@ -1 +1 @@
|
|||||||
This is my new blog! Build using Hugo and using a GitLab CI framework for automatic deployments to a redundant web cluster.
|
This is my blog! Build using Hugo and using a Gitea and bbuilder-based CI framework for automatic deployments to a redundant web cluster, then cached by NGiNX.
|
||||||
|
3
assets/css/_extra.scss
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
.app-container {
|
||||||
|
max-width:100%;
|
||||||
|
}
|
BIN
assets/images/joshua.jpg
Normal file
After Width: | Height: | Size: 73 KiB |
26
config.toml
@ -1,26 +0,0 @@
|
|||||||
baseurl = "https://www.boniface.me"
|
|
||||||
languageCode = "en-us"
|
|
||||||
title = "Joshua Boniface, sysadmin"
|
|
||||||
author = "Joshua Boniface"
|
|
||||||
theme = "hugo-uno"
|
|
||||||
|
|
||||||
contentdir = "content"
|
|
||||||
publishdir = "public"
|
|
||||||
builddrafts = false
|
|
||||||
canonifyurls = true
|
|
||||||
copyright = "This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 License."
|
|
||||||
|
|
||||||
|
|
||||||
[indexes]
|
|
||||||
category = "categories"
|
|
||||||
tag = "tags"
|
|
||||||
[Params]
|
|
||||||
AuthorName = "Joshua"
|
|
||||||
github = "joshuaboniface"
|
|
||||||
linkedin = "joshuamboniface"
|
|
||||||
email = "joshua@boniface.me"
|
|
||||||
description = "A blog about tech and shiny things"
|
|
||||||
cv = "/pages/cv"
|
|
||||||
legalnotice = "/pages/legal"
|
|
||||||
# cover = "/img/background-cover.jpg"
|
|
||||||
logo = "/images/joshua.jpg"
|
|
67
config.toml.orig
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
baseurl = "https://www.boniface.me"
|
||||||
|
languageCode = "en-us"
|
||||||
|
title = "Joshua Boniface, sysadmin"
|
||||||
|
author = "Joshua Boniface"
|
||||||
|
theme = "hugo-blog-awesome"
|
||||||
|
|
||||||
|
contentdir = "content"
|
||||||
|
publishdir = "public"
|
||||||
|
builddrafts = false
|
||||||
|
canonifyurls = true
|
||||||
|
copyright = "This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 License."
|
||||||
|
|
||||||
|
[indexes]
|
||||||
|
category = "categories"
|
||||||
|
tag = "tags"
|
||||||
|
|
||||||
|
[params]
|
||||||
|
author = "Joshua"
|
||||||
|
description = "A blog about tech and shiny things, self-hosted and FLOSS"
|
||||||
|
avatar = "/images/joshua.jpg"
|
||||||
|
[[params.social]]
|
||||||
|
icon = "github"
|
||||||
|
name = "Github"
|
||||||
|
url = "https://github.com/joshuaboniface"
|
||||||
|
[[params.social]]
|
||||||
|
icon = "linkedin"
|
||||||
|
name = "LinkedIn"
|
||||||
|
url = "https://www.linkedin.com/in/joshuamboniface"
|
||||||
|
[[params.social]]
|
||||||
|
icon = "youtube"
|
||||||
|
name = "YouTube"
|
||||||
|
url = "https://www.youtube.com/@joshuaboniface"
|
||||||
|
[[params.social]]
|
||||||
|
icon = "mastodon"
|
||||||
|
name = "Mastodon"
|
||||||
|
url = "https://social.bonifacelabs.ca/@joshuaboniface"
|
||||||
|
[[params.social]]
|
||||||
|
icon = "reddit"
|
||||||
|
name = "Reddit"
|
||||||
|
url = "https://old.reddit.com/u/djbon2112"
|
||||||
|
|
||||||
|
[menus]
|
||||||
|
[[menus.main]]
|
||||||
|
identifier = "home"
|
||||||
|
name = "Home"
|
||||||
|
url = "/"
|
||||||
|
weight = 1
|
||||||
|
[[menus.main]]
|
||||||
|
identifier = "welcome"
|
||||||
|
name = "Welcome"
|
||||||
|
url = "/welcome/"
|
||||||
|
weight = 2
|
||||||
|
[[menus.main]]
|
||||||
|
identifier = "legal"
|
||||||
|
name = "Legal"
|
||||||
|
url = "/legal/"
|
||||||
|
weight = 3
|
||||||
|
[[menus.about]]
|
||||||
|
identifier = "cv"
|
||||||
|
name = "My CV"
|
||||||
|
url = "/cv/"
|
||||||
|
weight = 1
|
||||||
|
[[menus.about]]
|
||||||
|
identifier = "hardware"
|
||||||
|
name = "My Hardware"
|
||||||
|
url = "/hardware/"
|
||||||
|
weight = 2
|
@ -3,7 +3,6 @@ Categories = []
|
|||||||
Description = "Welcome to the new blog!"
|
Description = "Welcome to the new blog!"
|
||||||
Tags = []
|
Tags = []
|
||||||
date = "2016-08-21T23:37:49-04:00"
|
date = "2016-08-21T23:37:49-04:00"
|
||||||
menu = "main"
|
|
||||||
title = "Welcome"
|
title = "Welcome"
|
||||||
|
|
||||||
+++
|
+++
|
80
content/en/pages/cv.md
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
+++
|
||||||
|
Categories = []
|
||||||
|
Tags = []
|
||||||
|
date = "2025-01-01T00:00:00-04:00"
|
||||||
|
title = "CV"
|
||||||
|
|
||||||
|
+++
|
||||||
|
|
||||||
|
Joshua M. Boniface
|
||||||
|
|
||||||
|
joshua@boniface.me | 289-208-2830 | 1483 Epping Court, Burlington, ON L7M1P7
|
||||||
|
|
||||||
|
https://www.boniface.me | https://github.com/joshuaboniface | https://www.linkedin.com/in/joshuamboniface
|
||||||
|
|
||||||
|
## Profile
|
||||||
|
|
||||||
|
I am a driven, service-oriented individual with a strong knowledge of Linux administration and computer networking. I enjoy working with a strong team, and am independent and goal focused, always seeking out new knowledge to broaden my skill set and contribute to more efficient and well-operating systems. My deep knowledge of Linux systems and standard administration allows me to focus effectively on key problems and ensure continued successful operations. I am well-versed in scripting and orchestration in a modern DevOps framework and have experience running small- to mid-sized computing environments of up to several thousand VMs and terabytes of storage.
|
||||||
|
|
||||||
|
## Primary Skills
|
||||||
|
|
||||||
|
* Linux systems, in particular Debian GNU/Linux and Red Hat Enterprise Linux/CentOS environments, storage subsystems including Ceph object storage, DRBD, and ZFS/XFS/ext4 filesystems, and IP networking and routing.
|
||||||
|
* Linux applications including Apache and Nginx web stacks, Postfix/Dovecot/Courier email stacks, HAProxy, BIND9, PowerDNS, ISC-DHCP, OpenLDAP, RADIUS, and KVM/QEMU and Xen virtualization with Libvirt and Pacemaker.
|
||||||
|
* Extensive scripting and programming experience in BASH, Python, and other assorted languages.
|
||||||
|
* Orchestration and configuration management using Terraform/Terragrunt, Ansible, Puppet, and bcfg2, including custom roles and modules.
|
||||||
|
* Implementation and maintenance of monitoring for large environments with Prometheus/Grafana, Nagios, Icinga, CheckMK, TICK, and ELK stacks.
|
||||||
|
* Administration of MySQL, PostgreSQL and MongoDB databases, including deployment, tuning, and ongoing maintenance.
|
||||||
|
* Internetwork routing and advanced networking, including network design and capacity planning, troubleshooting, and maintenance.
|
||||||
|
* Customer service and writing, including technical and customer-focused writing and communication.
|
||||||
|
|
||||||
|
## Employment History
|
||||||
|
|
||||||
|
### [BuildOps](https://buildops.com) (Toronto, ON) - DevOps Engineer II
|
||||||
|
* Dec 2024 - Present
|
||||||
|
|
||||||
|
In the role of DevOps Engineer, I am responsible for infrastructure management to support the BuildOps SaaS platform, troubleshooting, and evolution of fast-moving and fast-growing applications.
|
||||||
|
|
||||||
|
### [Clearcable Networks](https://clearcable.ca) (Hamilton, ON) - Senior Systems Architect
|
||||||
|
* Oct 2018 - Nov 2024
|
||||||
|
|
||||||
|
In the role of senior systems architect, I was charged with keeping various Clearcable SOE systems in full working order, performing R&D to advance the platform, and enabling DevOps culture and automation within the Systems and Software teams. My primary projects included the implementation of my own [PVC hypervisor manager](https://github.com/parallelvirtualcluster) software as a base hypervisor for SOE, the expansion and unification of Ansible for management and orchestration of software deployment, and the evolution of various platform aspects to updated versions as needs change. As a deployment specialist as well, I was responsible for the deployment of 20+ new PVC clusters for both new and upgraded customers, and 10+ brand-new customers including full Clearcable NOMS provisioning integration, both in a technical and project-manageral role.
|
||||||
|
|
||||||
|
### [VM Farms](https://vmfarms.com) (Toronto, ON) - Linux DevOps Administrator, Operations Technical Lead
|
||||||
|
* Aug 2016 – Sept 2018
|
||||||
|
|
||||||
|
In the role of Linux System Administrator, I provided management of systems for web application developers within the framework of a DevOps operations service providing consulting advice and managed hosting. Using both an in-house Xen based cloud as well as various remote computing services including AWS, I helped ensure the continued operation of the platform as well as the day-to-day administration of customer systems. Utilizing configuration management with Puppet and Ansible, I provisioned and managed applications serving millions of users and using multiple web development stacks, HTTP servers, and database backends, in addition to various proxying, queueing and caching applications. During late 2017 and 2018 in the role of Technical Lead for Operations, I assisted in the training of new employees and daily technical decisions with a mind for best-practices, and interacted regularly and in-depth with customers using various communication tools.
|
||||||
|
|
||||||
|
### [Clearcable Network Services](https://clearcable.ca) (Hamilton, ON) - Linux System Administrator
|
||||||
|
* Jan 2013 – Jul 2016
|
||||||
|
|
||||||
|
In the role of System Administrator, I used my skills with internetworking and Linux servers to ensure the proper operation of the Clearcable Networks Standard Operating Environment, a Debian GNU/Linux-based Internet Service Provider platform running on Cisco UCS hardware, and using Xen virtualization and bcfg2 configuration management. This included management of provider-grade services including DNS with BIND9; ISC DHCP in advanced configurations; Postfix/Courier email stacks; monitoring with Icinga and Munin; server hardware maintenance and support including full system rebuilds, hardware performance analysis and troubleshooting. I contributed advancements to the platform, assisting in its continued development and growth, including a major distribution upgrade project and implementation of live migration functionality to the platform using DRBD. During oncall rotation and daily support tasks, I also assisted in the deployment and maintenance of service provider networking, including routing and CMTS/ DOCSIS and VoIP access technologies to ensure the optimal operation of our client systems.
|
||||||
|
|
||||||
|
### [HHS Population Health Research Institute](https://www.phri.ca) (Hamilton, ON) - Systems Administrator, co-op
|
||||||
|
* Sep 2010 – Aug 2011
|
||||||
|
|
||||||
|
In the role of Student (Co-Op) Administrator, I was responsible for day-to-day support of desktop systems and users, including deployment of new systems, hardware replacement/reimaging, and management of accounts with Active Directory. A long-term project during my tenure was an extensive documentation of the site datacenter including diagramming and inventory of the facility.
|
||||||
|
|
||||||
|
### The Home Depot (Burlington, ON) - Special Services, Tool Rental, Electrical, Cashier
|
||||||
|
* Oct 2006 – Jan 2013
|
||||||
|
|
||||||
|
## Independent Projects
|
||||||
|
|
||||||
|
### [Parallel Virutal Cluster (PVC)](https://github.com/parallelvirtualcluster)
|
||||||
|
|
||||||
|
Parallel Virtual Cluster (PVC) is a virtual machine-based hyperconverged infrastructure (HCI) virtualization cluster solution that is fully Free Software, scalable, redundant, self-healing, self-managing, and designed for administrator simplicity. I started the project in mid-2018 and continue maintaining and advancing it to the present.
|
||||||
|
|
||||||
|
### [Jellyfin](https://jellyfin.org)
|
||||||
|
|
||||||
|
I am the project leader/coordinator and release manager for the Jellyfin project, the Free Software Media System that puts you in control of managing and streaming your media. I began the project with several other interested parties as a fork of the Emby media server in late 2018 and continue managing it to the present.
|
||||||
|
|
||||||
|
## Educational History
|
||||||
|
|
||||||
|
### Mohawk College (Hamilton, ON) - Network Engineering and Security Analyst
|
||||||
|
* Sep 2008 - Dec 2012 (completed diploma)
|
||||||
|
|
||||||
|
### Carleton University (Ottawa, ON) - Bachelor of Computer Science
|
||||||
|
* Sep 2007 - May 2008 (incomplete; two semesters)
|
||||||
|
|
||||||
|
## Personal Interests
|
||||||
|
|
||||||
|
In addition to my work and experience above, I am interested in Fantasy and Science Fiction literature, repairing and building computers and electronics, gardening, various DIY projects, performing and composing music, astronomy and astrophysics, and science and technology papers and books.
|
216
content/en/pages/hardware.md
Normal file
@ -0,0 +1,216 @@
|
|||||||
|
+++
|
||||||
|
Categories = []
|
||||||
|
Tags = []
|
||||||
|
date = "2025-01-01T00:00:00-04:00"
|
||||||
|
title = "Hardware"
|
||||||
|
|
||||||
|
+++
|
||||||
|
|
||||||
|
I selfhost this blog, do a lot of coding, and generally do "computer stuff" on a number of different systems. Here's what I use, current as of 2025-01-01.
|
||||||
|
|
||||||
|
## Client Devices
|
||||||
|
|
||||||
|
### Primary Laptop: Lenovo Thinkpad T495s
|
||||||
|
|
||||||
|
```
|
||||||
|
_,met$$$$$gg. joshua@dragonstorm
|
||||||
|
,g$$$$$$$$$$$$$$$P. ------------------
|
||||||
|
,g$$P" """Y$$.". OS: Debian GNU/Linux 12 (bookworm) x86_64
|
||||||
|
,$$P' `$$$. Host: 20QJCTO1WW ThinkPad T495s
|
||||||
|
',$$P ,ggs. `$$b: Kernel: 6.1.0-32-amd64
|
||||||
|
`d$$' ,$P"' . $$$ Uptime: 17 days, 12 hours, 37 mins
|
||||||
|
$$P d$' , $$P Packages: 4925 (dpkg), 11 (flatpak)
|
||||||
|
$$: $$. - ,d$$' Shell: bash 5.2.15
|
||||||
|
$$; Y$b._ _,d$P' Resolution: 1920x1080
|
||||||
|
Y$$. `.`"Y$$$$P"' DE: GNOME 43.9
|
||||||
|
`$$b "-.__ WM: Mutter
|
||||||
|
`Y$$ WM Theme: Adwaita
|
||||||
|
`Y$$. Theme: Adwaita-dark [GTK2/3]
|
||||||
|
`$$b. Icons: Adwaita [GTK2/3]
|
||||||
|
`Y$$b. Terminal: tmux
|
||||||
|
`"Y$b._ CPU: AMD Ryzen 5 PRO 3500U w/ Radeon Vega Mobile Gfx (8) @ 2.100GHz
|
||||||
|
`""" GPU: AMD ATI Radeon Vega Series / Radeon Vega Mobile Series
|
||||||
|
Memory: 16GB DDR5
|
||||||
|
NVMe: 1x XPG SX8200 Pro 1TB, ext4
|
||||||
|
SSD: N/A
|
||||||
|
HDD: N/A
|
||||||
|
```
|
||||||
|
|
||||||
|
### Smartphone: Google Pixel 8
|
||||||
|
|
||||||
|
```
|
||||||
|
-o o- u0_a475@dragonflight
|
||||||
|
+hydNNNNdyh+ --------------------
|
||||||
|
+mMMMMMMMMMMMMm+ OS: LineageOS 21 (Android 14) aarch64
|
||||||
|
`dMMm:NMMMMMMN:mMMd` Host: Google Pixel 8
|
||||||
|
hMMMMMMMMMMMMMMMMMMh Kernel: 5.15.137-android14-11
|
||||||
|
.. yyyyyyyyyyyyyyyyyyyy .. Uptime: 22 hours, 53 minutes
|
||||||
|
.mMMm`MMMMMMMMMMMMMMMMMMMM`mMMm. Packages: 74 (dpkg), 1 (pkg)
|
||||||
|
:MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM: Shell: bash 5.2.26
|
||||||
|
:MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM: CPU: (9) @ 1.704GHz
|
||||||
|
:MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM: Memory: 8GB
|
||||||
|
:MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM: Storage: 128GB
|
||||||
|
-MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM-
|
||||||
|
+yy+ MMMMMMMMMMMMMMMMMMMM +yy+
|
||||||
|
mMMMMMMMMMMMMMMMMMMm
|
||||||
|
`/++MMMMh++hMMMM++/`
|
||||||
|
MMMMo oMMMM
|
||||||
|
MMMMo oMMMM
|
||||||
|
oNMm- -mMNs
|
||||||
|
```
|
||||||
|
|
||||||
|
### Home Base (Headless server "Desktop-in-the-cloud"): Dell PowerEdge R730
|
||||||
|
|
||||||
|
```
|
||||||
|
_,met$$$$$gg. joshua@base
|
||||||
|
,g$$$$$$$$$$$$$$$P. -----------
|
||||||
|
,g$$P" """Y$$.". OS: Debian GNU/Linux 12 (bookworm) x86_64
|
||||||
|
,$$P' `$$$. Model: Dell PowerEdge R730
|
||||||
|
',$$P ,ggs. `$$b: Kernel: 6.1.0-32-amd64
|
||||||
|
`d$$' ,$P"' . $$$ Uptime: 60 days, 8 hours, 56 mins
|
||||||
|
$$P d$' , $$P Packages: 2309 (dpkg), 13 (flatpak)
|
||||||
|
$$: $$. - ,d$$' Shell: bash 5.2.15
|
||||||
|
$$; Y$b._ _,d$P' Resolution: 1920x1080
|
||||||
|
Y$$. `.`"Y$$$$P"' Terminal: /dev/pts/1
|
||||||
|
`$$b "-.__ CPU: 2x Intel Xeon E5-2620 v4 (32) @ 3.000GHz
|
||||||
|
`Y$$ GPU: 2x NVIDIA Tesla P4, 1x NVIDIA GeForce GTX1660
|
||||||
|
`Y$$. Memory: 512GB DDR4 ECC
|
||||||
|
`$$b. NVMe: 2x XPG GAMIX S70 BLADE 2TB, ZFS mirror
|
||||||
|
`Y$$b. SSD: N/A
|
||||||
|
`"Y$b._ HDD: N/A
|
||||||
|
`"""
|
||||||
|
```
|
||||||
|
|
||||||
|
## Servers
|
||||||
|
|
||||||
|
My server infrastructure is quite sprawling, but here's the short info. For more detail, please see my perpetually-"upcoming" blog post or [my rack tour videos on YouTube](https://www.youtube.com/playlist?list=PLNfKWbHAcA3PcEpFfS1GqFcs7EkKiBOQr).
|
||||||
|
|
||||||
|
### Routers: FreeBSD on Debian on SZBOX G30B Mini-PCs (x2)
|
||||||
|
|
||||||
|
```
|
||||||
|
``` ` joshua@dcrX
|
||||||
|
` `.....---.......--.``` -/ -----------
|
||||||
|
+o .--` /y:` +. OS: FreeBSD 14.2-RELEASE amd64
|
||||||
|
yo`:. :o `+- Uptime: 3 days, 15 hours, 11 mins
|
||||||
|
y/ -/` -o/ Packages: 142 (pkg)
|
||||||
|
.- ::/sy+:. Shell: bash 5.2.37
|
||||||
|
/ `-- / Terminal: /dev/pts/1
|
||||||
|
`: :` CPU: QEMU Virtual version (4) @ 1.996GHz
|
||||||
|
`: :` Memory: 6GB (virtual)
|
||||||
|
/ / NVMe: 1x QEMU 80GB, ZFS (virtual system)
|
||||||
|
.- -. SSD: N/A
|
||||||
|
-- -. HDD: N/A
|
||||||
|
`:` `:`
|
||||||
|
.-- `--.
|
||||||
|
.---.....----.
|
||||||
|
```
|
||||||
|
|
||||||
|
Which for compatibility reasons are VMs running on top of...
|
||||||
|
|
||||||
|
```
|
||||||
|
_,met$$$$$gg. joshua@dcrhvX
|
||||||
|
,g$$$$$$$$$$$$$$$P. -------------
|
||||||
|
,g$$P" """Y$$.". OS: Debian GNU/Linux 12 (bookworm) x86_64
|
||||||
|
,$$P' `$$$. Host: SZBOX G30B TVI7309X B0
|
||||||
|
',$$P ,ggs. `$$b: Kernel: 6.1.0-32-amd64
|
||||||
|
`d$$' ,$P"' . $$$ Uptime: 9 days, 14 hours, 2 mins
|
||||||
|
$$P d$' , $$P Packages: 830 (dpkg)
|
||||||
|
$$: $$. - ,d$$' Shell: bash 5.2.15
|
||||||
|
$$; Y$b._ _,d$P' Terminal: /dev/pts/1
|
||||||
|
Y$$. `.`"Y$$$$P"' CPU: Intel Celeron N5105 (4) @ 2.900GHz
|
||||||
|
`$$b "-.__ GPU: Intel JasperLake [UHD Graphics]
|
||||||
|
`Y$$ Memory: 8GB DDR4
|
||||||
|
`Y$$. NVMe: 1x Generic 128GB, ext4 (system)
|
||||||
|
`$$b. SSD: N/A
|
||||||
|
`Y$$b. HDD: N/A
|
||||||
|
`"Y$b._
|
||||||
|
`"""
|
||||||
|
```
|
||||||
|
|
||||||
|
### Primary Hypervisor Cluster: Dell PowerEdge R630 (x3)
|
||||||
|
|
||||||
|
```
|
||||||
|
_,met$$$$$gg. joshua@hvX.p
|
||||||
|
,g$$$$$$$$$$$$$$$P. ------------
|
||||||
|
,g$$P" """Y$$.". OS: Debian GNU/Linux 12 (bookworm) x86_64
|
||||||
|
,$$P' `$$$. Host: Dell PowerEdge R630
|
||||||
|
',$$P ,ggs. `$$b: Kernel: 6.1.0-32-amd64
|
||||||
|
`d$$' ,$P"' . $$$ Uptime: 13 days, 19 hours, 13 mins
|
||||||
|
$$P d$' , $$P Packages: 886 (dpkg)
|
||||||
|
$$: $$. - ,d$$' Shell: bash 5.1.4
|
||||||
|
$$; Y$b._ _,d$P' Resolution: 1024x768
|
||||||
|
Y$$. `.`"Y$$$$P"' Terminal: /dev/pts/19
|
||||||
|
`$$b "-.__ CPU: 2x Intel Xeon E5-2683 v4 (64) @ 3.000GHz
|
||||||
|
`Y$$ GPU: 0b:00.0 Matrox Electronics Systems Ltd. G200eR2
|
||||||
|
`Y$$. Memory: 512GB DDR4 ECC
|
||||||
|
`$$b. NVMe: N/A
|
||||||
|
`Y$$b. SSD: 2x Intel DC S3700 200GB, RAID-1/ext4 (system); 2x Intel DC S3700 800GB (PVC Ceph c3)
|
||||||
|
`"Y$b._ HDD: N/A
|
||||||
|
`"""
|
||||||
|
```
|
||||||
|
|
||||||
|
### Testing Hypervisor Cluster: Dell PowerEdge R430 (x3)
|
||||||
|
|
||||||
|
```
|
||||||
|
_,met$$$$$gg. joshua@hvX.t
|
||||||
|
,g$$$$$$$$$$$$$$$P. ------------
|
||||||
|
,g$$P" """Y$$.". OS: Debian GNU/Linux 12 (bookworm) x86_64
|
||||||
|
,$$P' `$$$. Host: Dell PowerEdge R430
|
||||||
|
',$$P ,ggs. `$$b: Kernel: 6.1.0-32-amd64
|
||||||
|
`d$$' ,$P"' . $$$ Uptime: 25 mins
|
||||||
|
$$P d$' , $$P Packages: 931 (dpkg)
|
||||||
|
$$: $$. - ,d$$' Shell: bash 5.2.15
|
||||||
|
$$; Y$b._ _,d$P' Resolution: 1024x768
|
||||||
|
Y$$. `.`"Y$$$$P"' Terminal: /dev/pts/2
|
||||||
|
`$$b "-.__ CPU: Intel Xeon E5-2603 v3 (6) @ 1.600GHz
|
||||||
|
`Y$$ GPU: 0a:00.0 Matrox Electronics Systems Ltd. G200eR2
|
||||||
|
`Y$$. Memory: 32GB DDR4 ECC
|
||||||
|
`$$b. NVMe: N/A
|
||||||
|
`Y$$b. SSD: 1x Intel DC S3610 200GB, ext4 (system); 1x Samsung PM883 480GB (PVC Ceph c3)
|
||||||
|
`"Y$b._ HDD: N/A
|
||||||
|
`"""
|
||||||
|
```
|
||||||
|
|
||||||
|
### Ceph Storage Cluster: Dell PowerEdge R720xd (x3)
|
||||||
|
|
||||||
|
```
|
||||||
|
_,met$$$$$gg. joshua@cephX.c
|
||||||
|
,g$$$$$$$$$$$$$$$P. --------------
|
||||||
|
,g$$P" """Y$$.". OS: Debian GNU/Linux 12 (bookworm) x86_64
|
||||||
|
,$$P' `$$$. Host: Dell PowerEdge R720xd
|
||||||
|
',$$P ,ggs. `$$b: Kernel: 6.1.0-32-amd64
|
||||||
|
`d$$' ,$P"' . $$$ Uptime: 116 days, 19 hours, 33 mins
|
||||||
|
$$P d$' , $$P Packages: 636 (dpkg)
|
||||||
|
$$: $$. - ,d$$' Shell: bash 5.1.4
|
||||||
|
$$; Y$b._ _,d$P' Resolution: 1024x768
|
||||||
|
Y$$. `.`"Y$$$$P"' Terminal: /dev/pts/0
|
||||||
|
`$$b "-.__ CPU: Intel Xeon E5-2697 v2 (24) @ 3.500GHz
|
||||||
|
`Y$$ GPU: 0b:00.0 Matrox Electronics Systems Ltd. G200eR2
|
||||||
|
`Y$$. Memory: 96GB DDR4 ECC
|
||||||
|
`$$b. NVMe: N/A
|
||||||
|
`Y$$b. SSD: 2x Intel DC S3700 200GB, RAID-1/ext4 (system); 1x Intel DC P3700 2TB HHHL (Ceph c3)
|
||||||
|
`"Y$b._ HDD: 3x Western Digital Red 14TB; 6x Western Digital Red 8TB (Ceph c2)
|
||||||
|
`"""
|
||||||
|
```
|
||||||
|
|
||||||
|
### Backup Server: Whitebox 2U
|
||||||
|
|
||||||
|
```
|
||||||
|
_,met$$$$$gg. joshua@backup
|
||||||
|
,g$$$$$$$$$$$$$$$P. -------------
|
||||||
|
,g$$P" """Y$$.". OS: Debian GNU/Linux 12 (bookworm) x86_64
|
||||||
|
,$$P' `$$$. Host: Whitebox (Supermicro X10SRL-F)
|
||||||
|
',$$P ,ggs. `$$b: Kernel: 6.1.0-32-amd64
|
||||||
|
`d$$' ,$P"' . $$$ Uptime: 116 days, 19 hours, 40 mins
|
||||||
|
$$P d$' , $$P Packages: 790 (dpkg)
|
||||||
|
$$: $$. - ,d$$' Shell: bash 5.1.4
|
||||||
|
$$; Y$b._ _,d$P' Resolution: 1024x768
|
||||||
|
Y$$. `.`"Y$$$$P"' Terminal: /dev/pts/0
|
||||||
|
`$$b "-.__ CPU: Intel Xeon E5-2620 v3 (12) @ 3.200GHz
|
||||||
|
`Y$$ GPU: 09:00.0 ASPEED Technology, Inc. ASPEED Graphics Family
|
||||||
|
`Y$$. Memory: 32GB DDR4 ECC
|
||||||
|
`$$b. NVMe: N/A
|
||||||
|
`Y$$b. SSD: 1x Intel 320 40GB, ext4 (system)
|
||||||
|
`"Y$b._ HDD: 4x Western Digital Red 8TB, ZFS RAID-Z; 1x Western Digital USB3.0 8TB, ZFS
|
||||||
|
`"""
|
||||||
|
```
|
@ -1,4 +1,12 @@
|
|||||||
Copyright ©2018 Joshua Boniface
|
+++
|
||||||
|
Categories = []
|
||||||
|
Tags = []
|
||||||
|
date = "2016-08-21T23:37:49-04:00"
|
||||||
|
title = "Legal"
|
||||||
|
|
||||||
|
+++
|
||||||
|
|
||||||
|
Copyright ©2018-2024 Joshua M. Boniface (except where otherwise noted)
|
||||||
|
|
||||||
All content released under a Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) License
|
All content released under a Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) License
|
||||||
|
|
59
content/en/pages/music.md
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
+++
|
||||||
|
Categories = []
|
||||||
|
Tags = []
|
||||||
|
date = "2024-09-01T00:00:00-05:00"
|
||||||
|
title = "Music"
|
||||||
|
|
||||||
|
+++
|
||||||
|
|
||||||
|
Not only am I a tech geek, but I'm also a multi-instrumentalist musician and composer! On this page you can find some of my work.
|
||||||
|
|
||||||
|
## Thraximundar
|
||||||
|
|
||||||
|
Track #5 from Into Æther. I recorded this (semi-)professionally back in late 2012, with myself on vocals, guitar, and bass, with the other tracks synthesized.
|
||||||
|
|
||||||
|
{{< soundcloud-track 84200428 >}}
|
||||||
|
|
||||||
|
## Into Æther
|
||||||
|
|
||||||
|
My debut album, in the works since 2011 (or 2006, depending on how you count it). Into Æther is a progressive rock concept album based on the world of Magic: The Gathering.
|
||||||
|
|
||||||
|
Below is a playlist containing preview audio of all 10 songs, as produced by MuseSounds, along with timed lyrics. No real instruments or vocals yet. I plan to record this over the Winter of 2024/2025 with a goal for a Spring 2025 release, including a re-recording of Thraximundar. Enjoy.
|
||||||
|
|
||||||
|
{{< aplayer
|
||||||
|
theme="#323232"
|
||||||
|
loop="none"
|
||||||
|
artist="Joshua M. Boniface, Joshua M. Boniface, Joshua M. Boniface, Joshua M. Boniface, Joshua M. Boniface, Joshua M. Boniface, Joshua M. Boniface, Joshua M. Boniface, Joshua M. Boniface, Joshua M. Boniface"
|
||||||
|
name="Into Æther, The Vision, The Library, The Summoning, Thraximundar, Escape, Brooding, The Gathering, Lament, Thraximundar Defeated"
|
||||||
|
cover="/images/into-aether-cover-thraximundar.png, /images/into-aether-cover-thraximundar.png, /images/into-aether-cover-thraximundar.png, /images/into-aether-cover-thraximundar.png, /images/into-aether-cover-thraximundar.png, /images/into-aether-cover-thraximundar.png, /images/into-aether-cover-thraximundar.png, /images/into-aether-cover-thraximundar.png, /images/into-aether-cover-thraximundar.png, /images/into-aether-cover-thraximundar.png"
|
||||||
|
url="https://file.bonifacelabs.ca/Public/Into%20Aether/Preview/1%20Into%20Aether.mp3, https://file.bonifacelabs.ca/Public/Into%20Aether/Preview/2%20The%20Vision.mp3, https://file.bonifacelabs.ca/Public/Into%20Aether/Preview/3%20The%20Library.mp3, https://file.bonifacelabs.ca/Public/Into%20Aether/Preview/4%20The%20Summoning.mp3, https://file.bonifacelabs.ca/Public/Into%20Aether/Preview/5%20Thraximundar.mp3, https://file.bonifacelabs.ca/Public/Into%20Aether/Preview/6%20Escape.mp3, https://file.bonifacelabs.ca/Public/Into%20Aether/Preview/7%20Brooding.mp3, https://file.bonifacelabs.ca/Public/Into%20Aether/Preview/8%20The%20Gathering.mp3, https://file.bonifacelabs.ca/Public/Into%20Aether/Preview/9%20Lament.mp3, https://file.bonifacelabs.ca/Public/Into%20Aether/Preview/10%20Thraximundar%20Defeated.mp3"
|
||||||
|
duration="03:07, 01:22, 06:45, 03:58, 05:10, 04:48, 04:27, 08:25, 04:31, 11:16"
|
||||||
|
lrc-type=3
|
||||||
|
lrc="https://file.bonifacelabs.ca/Public/Into%20Aether/Preview/1%20Into%20Aether.lrc, https://file.bonifacelabs.ca/Public/Into%20Aether/Preview/2%20The%20Vision.lrc, https://file.bonifacelabs.ca/Public/Into%20Aether/Preview/3%20The%20Library.lrc, https://file.bonifacelabs.ca/Public/Into%20Aether/Preview/4%20The%20Summoning.lrc, https://file.bonifacelabs.ca/Public/Into%20Aether/Preview/5%20Thraximundar.lrc, https://file.bonifacelabs.ca/Public/Into%20Aether/Preview/6%20Escape.lrc, https://file.bonifacelabs.ca/Public/Into%20Aether/Preview/7%20Brooding.lrc, https://file.bonifacelabs.ca/Public/Into%20Aether/Preview/8%20The%20Gathering.lrc, https://file.bonifacelabs.ca/Public/Into%20Aether/Preview/9%20Lament.lrc, https://file.bonifacelabs.ca/Public/Into%20Aether/Preview/10%20Thraximundar%20Defeated.lrc"
|
||||||
|
>}}
|
||||||
|
{{< /aplayer >}}
|
||||||
|
|
||||||
|
Full and individual part scores for all these songs can be found [in my MuseScore.com score set for Into Æther here](https://musescore.com/user/25324421/sets/12460489).
|
||||||
|
|
||||||
|
## Influences & Style
|
||||||
|
|
||||||
|
I primarily write modern progressive rock, though with my own twist. I make heavy use of a clean piano, and occasionally strings, but not much synthesizer, and a very metal-influenced druming style despite the songs themselves not really feeling like "metal", as well as a relatively clean and high guitar style.
|
||||||
|
|
||||||
|
Some of my major influences include, in rough order:
|
||||||
|
|
||||||
|
* Rush
|
||||||
|
* Dream Theater
|
||||||
|
* Yes
|
||||||
|
* Nightwish
|
||||||
|
* Porcupine Tree
|
||||||
|
* JT Bruce
|
||||||
|
* Pink Floyd
|
||||||
|
* Genesis
|
||||||
|
* Opeth
|
||||||
|
* Rhapsody of Fire
|
||||||
|
* Big Big Train
|
||||||
|
* System of a Down
|
||||||
|
|
||||||
|
Plus countless other musicians, groups, and bands.
|
||||||
|
|
||||||
|
In terms of instruments, I'm primarily a drummer, bassist, and vocalist; my guitar and keyboard skills leave a lot to be desired, but I'm passable on both. I began primarily as a jazz drummer and self-taught guitarist playing Rush and Pink Floyd songs, before branching out into other instruments, including a year of piano lessons in my early teenage years. Since finishing school I've mostly been a hobby musician, with occasional spurts of writing and playing interspersed with periods of silence.
|
@ -0,0 +1,121 @@
|
|||||||
|
---
|
||||||
|
title: "Burlington's Half-Assed Bike Infrastructure"
|
||||||
|
description: "Venting my frustrations about this city's poor bike infrastructure"
|
||||||
|
date: 2024-04-23
|
||||||
|
tags:
|
||||||
|
- Hometown
|
||||||
|
- Politics
|
||||||
|
- Civics
|
||||||
|
---
|
||||||
|
|
||||||
|
This post is a little different than my usual post here, touching more on local politics, infrastructure, and issues in my home city of Burlington, Ontario, and written with some fairly poor organization of thoughts. I, however, couldn't think of another place to put this sort of long-form content (read: long rant), so it's going here for now.
|
||||||
|
|
||||||
|
## What Burlington Has
|
||||||
|
|
||||||
|
Burlington's topography and layout is important for the criticisms below, so it's worth spending a moment describing it.
|
||||||
|
|
||||||
|
Burlington is a large commuter suburb at the southern end of Lake Ontario, with Toronto about 50km to the northeast and Hamilton directly to the south and west. The city follows a broadly east-west grid structure, with 4 major north-south roads (Brant Stree, Guelph Line, Walkers Line, and Appleby Line) spaced at 2km increments. There are further north-south roads (Burloak to the far east bordering Oakville and Bronte Creek Provincial Park, and King Road and Waterdown Road further to the west) but the main portion of the city is contained by by those first four. Downtown is at the south end of Brant St. by Lake Ontario.
|
||||||
|
|
||||||
|
Through the center of the city, east-west, run both the Queen Elizabeth Way highway and a set of GO Transit tracks. Between and just north of them is a major industrial corridor that forms the boundary between the residential "North" and "South" Burlington. There are a number of other major east-west roads that will be mentioned; from south to north, they are Lakeshore Drive, New Street, Fairview Road, Harvester Road, Mainway, Upper Middle Road, and finally Dundas Street.
|
||||||
|
|
||||||
|
At the top boundary of the developed area are Dundas Street and (west of roughly Walkers Line) Highway 407ETR; all land allocation north of these is Greenbelt land and cannot be developed.
|
||||||
|
|
||||||
|
The topography is broadly sloping down from the Niagara Escarpment in the north to Lake Ontario in the south, with the highest peak in the (developed) city in the north-west at the top of Brant Street, and the lowest points along the lakeshore.
|
||||||
|
|
||||||
|
Lastly, there are two major northeast-southwest power lines that, due to the exact positioning, criss-cross the city on a diagonal; one in North Burlington, and one in South Burlington. A multi-use path follows both.
|
||||||
|
|
||||||
|
Here is the map:
|
||||||
|
|
||||||
|

|
||||||
|
*Map courtesy of the City of Burlington*
|
||||||
|
|
||||||
|
Burlington seems like a great city to feature comprehensive bike infrastructure, but unfortunately it is thoroughly half-assed. Through nearly a century of car-centric planning and development, what should be a perfectly bikeable city is instead a congested wasteland of asphalt, concrete, and single-family sprawl.
|
||||||
|
|
||||||
|
## Burlington's Bike Infrastructure: The Good
|
||||||
|
|
||||||
|
There are a few good parts, so I'd like to list those first.
|
||||||
|
|
||||||
|
1. Multi-use paths along hydro corridors. These help provide both excellent recreational trails for casual or fitness cyclists, as well as transportation for some trips, for example North Burlington -> Downtown via the Crosstown Trail (north) or South Burlington -> Downtown via the Centennial Bikeway.
|
||||||
|
|
||||||
|
2. Multi-use paths north-south. A few of these are scattered throughout various neighbourhoods, for example the Palmer Trail in Palmer (my home neighbourhood), an unnamed extension to the Centennial Bikeway in Dynes, and another unnamed trail in Downtown. These do help cyclists cut through a number of residential areas, but as we'll see later, are not very long or effective.
|
||||||
|
|
||||||
|
3. Multi-use paths along major roads. A few of these exists: Appleby Line, Walkers Line and Brant Street feature multi-use paths beside sidewalks for a signfiicant part of their northern sections, and Upper Middle features a multi-use path along its length. Lakeshore Drive features a multi-use path instead of a sidewalk on its south side, as do Harvester Street and Dundas Street.
|
||||||
|
|
||||||
|
4. Bike Lanes and sharrow indications are present everywhere. However, as I'll outline below, these aren't *really* bike infrastructure, and are at the root of what I see as the major problems with cycling in Burlington, but we'll get there.
|
||||||
|
|
||||||
|
5. Neighbourhoods are being calmed. Most neighbourhoods in the city now post a 40km/h (instead of 50km/h) speed limit, and many roads have had speed control devices added to slow drivers down, making these roads much safer for cycling.
|
||||||
|
|
||||||
|
|
||||||
|
## Burlington's Bike Infrastructure: The Bad & The Ugly
|
||||||
|
|
||||||
|
But, there are a lot of problems with bike infrastructure in the city. I'll outline what first, before getting into the why.
|
||||||
|
|
||||||
|
1. Multi-use paths are in disarray. I've been a resident of Burlington for my entire life - 36 years - and I do not remember most of the road-paralleled multi-use paths ever being repaved. Some sections are in such poor condition that they are lost to grass/weeds, are so bumpy as to put mountain bikes under strain, let alone road bikes, and others are simply haphazardly cut as an afterthought, with sharp drops at driveways or dangerous swerves needed to descend onto cross streets.
|
||||||
|
|
||||||
|
2. Multi-use paths are very limited. Except for those north-south hydro corridor and short neighbourhood paths, the remaining bike infrastructure is limited only to major roads, and not all of them.
|
||||||
|
|
||||||
|
3. Major roads are dangerous. 60+km/h speeds on wide [stroads](https://en.wikipedia.org/wiki/Stroad) with frequent, poorly-timed traffic lights is a deathtrap for bicyclists.
|
||||||
|
|
||||||
|
4. Bike lanes are, at best, bad. Painted bicycle gutters and (*shudder*) sharrows are not bike infrastructure. A painted line does not stop a two-tonne SUV driven by a distracted and impatient motorist from running you down. Worse still, in this city as in many others, bicycle lanes start and end abruptly with no rhyme or reason, forcing cyclings into sharing lanes with speeding vehicles frequently. Combined with the previous point, this makes for several extremely dangerous sections of road.
|
||||||
|
|
||||||
|
5. Highway onramps on the major roads are a deathtrap. With no approach lanes and drivers who routinely fail to signal these, it becomes a dangerous guessing game of who is going where while waiting to cross them, or braving 70+km/h speeding vehicles cutting you off.
|
||||||
|
|
||||||
|
6. There are far too many stop signs. Stop signs are the devil. They're inefficient for cyclists (unless, of course, cyclist priority and an [Idaho Stop](https://en.wikipedia.org/wiki/Idaho_stop) system is added) and actually add danger due to a cyclist having to start from zero afterwards (see below).
|
||||||
|
|
||||||
|
## What our Brilliant Government has tried to do
|
||||||
|
|
||||||
|
Really, outlining the problems above really just serves to put into context the assinine and, as stated before, half-assed measures this city and its governmnent has taken to "improve cycling", almost none of which do anything at all. I will outline 3 key case studies here.
|
||||||
|
|
||||||
|
### Bicycle Lanes No One Needed
|
||||||
|
|
||||||
|
In 2020, the city launched a project to replace 1 lane of car traffic in each direction along New Street with a bike lane, reducing the car lanes on this very busy stretch of road from 2 to 1. These were, of course, implemented in the most half-assed way possible, using paint and nothing more. Sure, a buffered bike lane is better than no buffer, but when a 1-km backlog of cars has built up, nothing is stopping them from cutting ahead through this purely-paint "infrastructure", putting everyone else at risk. And I saw this happen.
|
||||||
|
|
||||||
|
Predictably, in a car-centric sprawl city, the backlash from carbrain drivers was swift. However, it may surprise you, I agree with them. It was a poor place to put a bike lane, because the route was already serviced by a well-used multi-use path, the Centennial Bikeway, one of the few in the city! It was a pointless waste of millions of dollars that was ripped back out (read: painted over) 2 years later.
|
||||||
|
|
||||||
|
The reasons for the failure here are clear. In a bid to make a major street "bicycle-friendly", they ignored already-existing bicycle infrastructure in favour of painted bicycle gutters, inconveniencing motorists on a busy road with a solution that did nothing at all to actually protect bicyclists from the (now increased) vehicular traffic. It is a case study of a solution in need of a problem: someone wanted to get paid to paint some bike lanes, and by golly they did - twice even - when a much better solution already existed.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Another Bike Lane to Nowhere
|
||||||
|
|
||||||
|
Bike lanes on Walkers Line, Guelph Line, and other places start and end abruptly. But, the fact that these lanes exist atall is a problem, because a bicycle gutter to nowhere is almost worse than nothing.
|
||||||
|
|
||||||
|
### The Most Dangerous and Pointless "Solution" to the Highway Onramps
|
||||||
|
|
||||||
|
On, the highway onramps. As I pointed out above, the design of most of them makes them incredibly dangerous to cross, not just for cyclists, but for pedestrians as well. What was the brilliant solution? Implement the most bizarre "stop here" on a bike possible. Beyold this magnificence:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Now, for someone used to a car, it may not be too obvious why this is an utterly terrible design. Let me list the reasons:
|
||||||
|
|
||||||
|
1. Bikes are slow to get moving after a stop, which will always happen here due to the poor road design in general.
|
||||||
|
2. The more time a bike is in the path of a car (say, due to #1), the more danger they are in.
|
||||||
|
3. A crossing is more dangerous (especially with #2 and #1) than a simple merge at speed.
|
||||||
|
4. These are on hills (due to the overpass), making #1 even worse.
|
||||||
|
5. They are abrupt and small, leaving little room to maneuver into a good position to both view oncoming traffic and proceed.
|
||||||
|
6. They are placed so close to the main lanes as to provide very little gap to observe cars coming onto the onramp.
|
||||||
|
|
||||||
|
It's hard to know even where to begin with improving these. A few thoughts include...
|
||||||
|
|
||||||
|
* Setting them at least 50m back from the road, so it's much clearer when cars are coming up the lane.
|
||||||
|
* Widening them into a proper path colocated with the sidewalk, to provide more room to slow down, stop, and turn.
|
||||||
|
|
||||||
|
But really, neither of these address the *actual* problem here. The problem is of speeding cars approaching a highway onramp at 60+km/h, without an approach lane, not signalling, and thus forcing a wait for a significant gap. Like most problems related to bikes-on-roads, the problem *should* be solved by modifications to driver behaviour and road design, not adding more inconveniences for cyclists. Here's how I'd design these:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
If you don't see why this is lightyears better, I don't know what to say.
|
||||||
|
|
||||||
|
## Actually Improving Bike Infrastructure
|
||||||
|
|
||||||
|
OK, enough whinging. What should be done to actually *improve* the bike infrastructure in this city? It's really simple.
|
||||||
|
|
||||||
|
* Fix the shitty bike paths! Huge numbers of the bike paths are in disarray as outlined above. Repave them, now. Not "soon", because "soon" was literally 20 years ago. There is already a significant network of paths in the city, so improve them to help encourage cycling trips where possible.
|
||||||
|
|
||||||
|
* Add more bike paths. Instead of futzing around with bike lanes, widen the sidewalks and convert them (partially or fully) to multi-use paths. Do this on every major road; most have plenty of space.
|
||||||
|
|
||||||
|
* Build better crossings. Slow down traffic at dangerous crossings, add approach lanes, and give bicyclists more room to maneuver.
|
||||||
|
|
||||||
|
* Add more connecting paths through residential areas, and between the areas of the city. Specifically, I mean tunnels under the railway line(s) and across the highway, to avoid cyclists (and pedestrians!) from having to take the obnoxious concrete jungles that are the current highway overpasses. Just two would be a huge boon to the connectivity of the city.
|
||||||
|
|
||||||
|
And that's the end of my rant. Hopefully I've educated someone on the pitfalls of the current designs and "ideas", and can offer some more obvious solutions.
|
83
content/en/posts/.drafts/my-take-on-free-software/index.md
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
+++
|
||||||
|
|
||||||
|
class = "post"
|
||||||
|
date = "2024-02-17T00:00:00-05:00"
|
||||||
|
tags = ["philosophy", "floss"]
|
||||||
|
title = "My Opinions on Free and Libre Open Source Software"
|
||||||
|
description = "Because trying to write them as replies never works"
|
||||||
|
type = "post"
|
||||||
|
weight = 1
|
||||||
|
draft = true
|
||||||
|
|
||||||
|
+++
|
||||||
|
|
||||||
|
## Why Write This?
|
||||||
|
|
||||||
|
Over the years, I've been engaged in many arguments and debates about the nature of open source, especially *vis-a-vis* funding open source. Invariably, my position is apparently unclear to others in the debate, forcing me to expend literally thousands of words clarifying minutae and defeating strawmen.
|
||||||
|
|
||||||
|
As a leader of two projects that are inherently goverened by my philosophy on Free and Libre Open Source Software (hereafter, "FLOSS"), I feel it's important to get my actual opinions out in the open and in as direct and clear a manner as I possibly can. Hence, this blog post.
|
||||||
|
|
||||||
|
## Part One: What I Believe FLOSS "means" a.k.a. "The Philosophy of FLOSS"
|
||||||
|
|
||||||
|
"FLOSS" is a term I use very specifically, because it is a term that Richard Stallman, founder of the Free Software Foundation (FSF) and writer of the GNU General-Purpose License (GPL) suggests we use.
|
||||||
|
|
||||||
|
In terms of general philosophy, I agree with Mr. Stallman on a great number of points, though I do disagree on some.
|
||||||
|
|
||||||
|
To me, "FLOSS" is about two key things, which together make up and ethos and philosophy on software development.
|
||||||
|
|
||||||
|
### FLOSS is about ensuring users have rights
|
||||||
|
|
||||||
|
This part is is pretty self-explanatory, because it's what's covered explicitly in every conception of FLOSS, from the FSF's definition, to the Open Source Initiative (OSI) definition, to the Debian Free Software Guidelines (FSG).
|
||||||
|
|
||||||
|
Personally, I adhere to the FSF and GPL's 4 freedoms, and thus I reject - for myself - non-copyleft licenses.
|
||||||
|
|
||||||
|
> “Free software” means software that respects users' freedom and community. Roughly, it means that the users have the freedom to run, copy, distribute, study, change and improve the software. Thus, “free software” is a matter of liberty, not price. To understand the concept, you should think of “free” as in “free speech,” not as in “free beer.” We sometimes call it “libre software,” borrowing the French or Spanish word for “free” as in freedom, to show we do not mean the software is gratis.
|
||||||
|
|
||||||
|
> You may have paid money to get copies of a free program, or you may have obtained copies at no charge. But regardless of how you got your copies, you always have the freedom to copy and change the software, even to sell copies.
|
||||||
|
|
||||||
|
Now, as I'll discuss below, I have some disagreements with this definition when we begin to talk about "price". But those first two sentences are what's important here.
|
||||||
|
|
||||||
|
### FLOSS is a statement of altruism
|
||||||
|
|
||||||
|
This is the part that I think, if not makes me unique, at least makes me different than most people who write and release "open source" or other FLOSS software.
|
||||||
|
|
||||||
|
I believe that FLOSS software is a statement of altruism. It is about giving something to the world, to humanity, and to the computing community.
|
||||||
|
|
||||||
|
On it's face, this doesn't seem radical, but it is, and it almost completely informs my opinions on monitization and distribution that I'll discuss below. So it's a very important point to take in: to adhere to "FLOSS philosophy" means, to me, to have altruistic motives and actions.
|
||||||
|
|
||||||
|
## Part Two: Monetizing FLOSS done Wrong with "Open-core"
|
||||||
|
|
||||||
|
With my definition of "FLOSS Philosophy" out of the way, let's discuss monetization, starting with things I see as counter to said philosophy and thus intellectually dishonest or worse.
|
||||||
|
|
||||||
|
This blog post originally started as a treatise on Open-Core software, but without the philosophical underpinning, I found it very hard to explain why I felt the way I did about it.
|
||||||
|
|
||||||
|
For anyone unaware of what this term means, "open-core" software is software that is *nominally* FLOSS, but which hides some subset of actual code features behind a proprietary license and other restrictions. For a hypothetical example, consider a grocery list software program. If the program itself is free and open source, but the ability to, say, create lists longer than 50 entries or to create lists of electronics instead of groceries, is a proprietary, paid extension, this is "open-core" software.
|
||||||
|
|
||||||
|
Open-core is one of the most pervasive FLOSS monetization options. Countless pieces of software, from GitLab to CheckMK to MongoDB, are "open-core".
|
||||||
|
|
||||||
|
And I think this model is scummy, because it fundamentally violates the second part of the philosophy. How?
|
||||||
|
|
||||||
|
1. "Open-core" software is not about altruism. Sure, it may *seem* that way because *part* of it is FLOSS. But that other part is not, and thus, the *complete* software solution is not FLOSS
|
||||||
|
|
||||||
|
2. "Open-core" software is, almost *invariably*, marketed as FLOSS, becausee the social clout of FLOSS brings in contributors and users, building an "ecosystem" that is then monitized when...
|
||||||
|
|
||||||
|
3. The lines of all pieces of "open-core" software is arbitrary. Why 50 grocery items, and not 100? Why just groceries but not electronics? Why is the line drawn there, and not somewhere else? The very existence of such a line is arbitrary, as is its positioning. Thus, the software *as a whole* is not FLOSS because of arbitrary limits on its usage.
|
||||||
|
|
||||||
|
Now, some may argue that feature X is "only for enterprises and they should pay" or something similar. This is nonsense. It is not up to the *author* to decide that, it's up to the *user*. And by presenting an arbitrary line, the philosophical idea of altruism goes out the widow. There is nothing altruistic about proprietary software, and "open-core" software is just proprietary software with FLOSS marketing.
|
||||||
|
|
||||||
|
There is one last part of "open-core" software that I find particular egregious. By its nature, "open-core" software is contrary to a volunteer ethos and community-driven development. Consinder the grocery example above and a new contributor called Jon. Jon wants to add support in for listing clothing in addition to grocery items. He wants to exend this "FLOSS" software. Will his contribution even be accepted? After all, the "FLOSS" part is just for *groceries*, and electronics are hidden behind the paywall. Will Jon's merge request languish forever, be ignored, or be outright deleted? And if it's merged to the "FLOSS" portion of the software, the line becomes even more arbitrary.
|
||||||
|
|
||||||
|
## Part Three: Monetizing FLOSS done Wrong with "CLAs"
|
||||||
|
|
||||||
|
Contributor License Agreements or CLAs are incredibly common in "corporate" FLOSS software. They're usually marketed as "protecting" the community, when in fact they do anything but. The software license protects the community; the CLA allows the company to steal contributions at an arbitrary future date by changing the license at will.
|
||||||
|
|
||||||
|
I think it should be pretty obvious to anyone who adheres to the philosophy above why this too is scummy. Contributors make contributions under a particular license, and if that license is changed in the future, particularly to a propreitary license, those contributions are stolen from the world at large and divorced from the altruistic intentions of the contributor.
|
||||||
|
|
||||||
|
Now, not every project with a CLA will necessarily switch licenses in the future. The issue with CLAs is that they give the controlling interests the *option* to do so. And for how long can those interests be trusted, especially from a profit-driven corporate entity?
|
||||||
|
|
||||||
|
## Part Three: Monetizing FLOSS done Right with Employer-sponsored FLOSS
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Part Four: My Thoughts on the Future of FLOSS
|
@ -8,7 +8,7 @@ draft: true
|
|||||||
|
|
||||||
In December 2018, I started the Jellyfin project with a few other contributors. The saga is fairly long and complex, but the short version is: "FOSS" branded software closes off portions of their code, "FOSS" branded software does scummy things, "FOSS" branded software goes closed-source, "FOSS" community forks project, original authors call the FOSS community "moochers", "pirates", etc. "FOSS" community fork sees massive support and encouragement regardless. Clearly people like truly "FOSS" software.
|
In December 2018, I started the Jellyfin project with a few other contributors. The saga is fairly long and complex, but the short version is: "FOSS" branded software closes off portions of their code, "FOSS" branded software does scummy things, "FOSS" branded software goes closed-source, "FOSS" community forks project, original authors call the FOSS community "moochers", "pirates", etc. "FOSS" community fork sees massive support and encouragement regardless. Clearly people like truly "FOSS" software.
|
||||||
|
|
||||||
Now, almost more than 9 months later, this saga has forced me to see something that I cannot unsee: this pattern is everywhere in the "FOSS" software world. It permeates projects, from large Enterprise-backed projects all the way down to small, single-developer projects. This mentality and software monetization paradigm is cancer on the FOSS world. It divides and drags down members of the community. It stifles contributors and users. And it is only getting worse.
|
Now, almost more than 2 years later, this saga has forced me to see something that I cannot unsee: this pattern is everywhere in the "FOSS" software world. It permeates projects, from large Enterprise-backed projects all the way down to small, single-developer projects. This mentality and software monetization paradigm is cancer on the FOSS world. It divides and drags down members of the community. It stifles contributors and users. And it is only getting worse.
|
||||||
|
|
||||||
In this post I hope to record my thoughts on this trend, as a sort-of manifesto for my ideas in developing FOSS software, such as my [PVC](https://github.com/parallelvirtualcluster) hypervisor manager project, and of course [Jellyfin](https://jellyfin.media).
|
In this post I hope to record my thoughts on this trend, as a sort-of manifesto for my ideas in developing FOSS software, such as my [PVC](https://github.com/parallelvirtualcluster) hypervisor manager project, and of course [Jellyfin](https://jellyfin.media).
|
||||||
|
|
||||||
@ -29,7 +29,7 @@ Money.
|
|||||||
|
|
||||||
It's about the money.
|
It's about the money.
|
||||||
|
|
||||||
No, really. It is widely accepted that FOSS software has a "monitization problem". That is, it's hard for programmers to get paid to write software which is given away 100% freely. And even I can conceded that this view has merit. Despite being an avowed Communist, I can accept that in a Capitalist economic system payment for programmer time is important.
|
No, really. It is widely accepted that FOSS software has a "monitization problem". That is, it's hard for programmers to get paid to write software which is given away 100% freely. And even I can conceded that this view has merit. Despite being an avowed Communist, I can understand completely that in a Capitalist economic system, payment for programmer time is important.
|
||||||
|
|
||||||
However, this sort of monitization is also the *easiest* form. It's absolutely trivial to hide functionality behind a paywall. After all, the code is the same. A developer simply has to not release part of the code as FOSS and suddenly, if that feature is high demand, they have a guaranteed revenue stream.
|
However, this sort of monitization is also the *easiest* form. It's absolutely trivial to hide functionality behind a paywall. After all, the code is the same. A developer simply has to not release part of the code as FOSS and suddenly, if that feature is high demand, they have a guaranteed revenue stream.
|
||||||
|
|
||||||
@ -58,7 +58,7 @@ So, the "Open-Core" model is harmful to developer effort and the spirit of coope
|
|||||||
|
|
||||||
Motivations are often unclear and hidden. I'll admit, I've seen examples of Open-Core software that truly does respect their FOSS and Gratis sides. They release all the important features for free, and reserve a select few for their paid version. However, how can any user ever know where the line is drawn? Perhaps a feature that seems "high-end" to the developers is a critical feature for a very small operation. Or perhaps, in the inverse, a very heavy/large user has no use for any of the paid features. No one wins in this scenario.
|
Motivations are often unclear and hidden. I'll admit, I've seen examples of Open-Core software that truly does respect their FOSS and Gratis sides. They release all the important features for free, and reserve a select few for their paid version. However, how can any user ever know where the line is drawn? Perhaps a feature that seems "high-end" to the developers is a critical feature for a very small operation. Or perhaps, in the inverse, a very heavy/large user has no use for any of the paid features. No one wins in this scenario.
|
||||||
|
|
||||||
"Open-Core" ultimately results in keeping users, and specifically the Gratis users, in the dark, always second-guessing what might happen next release. Alway second guessing whether a "bug" is legitimate or a scummy attempt to force users to the non-FOSS versions. And this harms FOSS in general - after all, the project is branded FOSS, has a FOSS community, but if users see, for example, a big performance bug, and this bug is not present in the non-FOSS versions, it begs the questions "is this a priority to fix?" and "is this intentional?". Both of which harm the developer, as well as the FOSS community more broadly.
|
"Open-Core" ultimately results in keeping users, and specifically the Gratis users, in the dark, always second-guessing what might happen next release. Always second guessing whether a "bug" is legitimate or a scummy attempt to force users to the non-FOSS versions. And this harms FOSS in general - after all, the project is branded FOSS, has a FOSS community, but if users see, for example, a big performance bug, and this bug is not present in the non-FOSS versions, it begs the questions "is this a priority to fix?" and "is this intentional?". Both of which harm the developers, as well as the FOSS community more broadly.
|
||||||
|
|
||||||
Further, it's often hard to tell whether projects are taking a "release-later" "open-core" position. With this sort of position, the software releases a feature as part of the non-FOSS product today, but intends to eventually release it as part of the FOSS project. But of course, if they announced they were doing this, it would cannibalize their attempt to monitize. So this fact is hidden from end-users, until the day the feature is released. Now, I do think that this method of "Open-Core" is probably the least offensive, since the features do eventually make it to the FOSS community. But this is also predicated on the good-will of those behind the project, and can change at any time. All of this leaving users in the dark.
|
Further, it's often hard to tell whether projects are taking a "release-later" "open-core" position. With this sort of position, the software releases a feature as part of the non-FOSS product today, but intends to eventually release it as part of the FOSS project. But of course, if they announced they were doing this, it would cannibalize their attempt to monitize. So this fact is hidden from end-users, until the day the feature is released. Now, I do think that this method of "Open-Core" is probably the least offensive, since the features do eventually make it to the FOSS community. But this is also predicated on the good-will of those behind the project, and can change at any time. All of this leaving users in the dark.
|
||||||
|
|
||||||
@ -68,9 +68,12 @@ Beyond just leaving users in the dark, with "Open-Core" software, the attempt to
|
|||||||
|
|
||||||
In a truly FOSS project, 100% set to the ideals of the 4 freedoms, every decision, every feature, exists to make the project better. It has to - otherwise, why would anyone contribute it? Perhaps it only scratches the itch of a single member of the project, but that's still a motivation to improve the project as a whole. And since every change is open to everyone, it can be adequetly critiqued and tweaked to be the best it can be.
|
In a truly FOSS project, 100% set to the ideals of the 4 freedoms, every decision, every feature, exists to make the project better. It has to - otherwise, why would anyone contribute it? Perhaps it only scratches the itch of a single member of the project, but that's still a motivation to improve the project as a whole. And since every change is open to everyone, it can be adequetly critiqued and tweaked to be the best it can be.
|
||||||
|
|
||||||
|
But when monetization is the first goal and "Open-Core" is the solution, everything flips on its head. Suddenly the "FOSS" aspect is secondary to the moneymaking, and the ideological compromises stack up, one after another, until there is very little left of the freedoms and the project ultimately decides to go closed-source.
|
||||||
|
|
||||||
|
## Under Open-Core, FOSS is just marketing
|
||||||
|
|
||||||
1. Do not respect FOSS ideals
|
Ultimately, under an "Open-Core" model, FOSS just becomes a marketing tool. A way to "hook" users who care about the freedoms of FOSS software into using a product, only to effectively extort them for payment to get 100% of the functionality. This is harmful.
|
||||||
2. Gratis users left in the dark
|
|
||||||
3. Monitization drives decisions
|
## There must be a better way
|
||||||
4. What about the future?
|
|
||||||
|
I don't have all, or even a good, answer to the problem of FOSS monetization. Some models work for some companies or individuals, others don't, and [some people go nuclear](https://lwn.net/Articles/880809/). But as I've stated above, I think "Open-Core" is one of the worst ways to proceed, harming both developers and users in the process. It is an afront to the 4 freedoms in spirit, stifles innovation, and should be stopped.
|
@ -91,10 +91,10 @@ In order to provide a single entrypoint to the load balancers, the administrator
|
|||||||
```
|
```
|
||||||
# Global configuration options.
|
# Global configuration options.
|
||||||
global_defs {
|
global_defs {
|
||||||
# Use a dedicated IPv4 multicast group; adjust the last octet if this conflicts within your network.
|
# Use a dedicated IPv4 multicast group; adjust the last octet if this conflicts within your network.
|
||||||
vrrp_mcast_group4 224.0.0.21
|
vrrp_mcast_group4 224.0.0.21
|
||||||
|
|
||||||
# Use VRRP version 3 in strict mode and with no iptables configuration.
|
# Use VRRP version 3 in strict mode and with no iptables configuration.
|
||||||
vrrp_version 3
|
vrrp_version 3
|
||||||
vrrp_strict
|
vrrp_strict
|
||||||
vrrp_iptables
|
vrrp_iptables
|
||||||
@ -110,24 +110,24 @@ vrrp_script chk {
|
|||||||
|
|
||||||
# Primary IPv4 VIP configuration.
|
# Primary IPv4 VIP configuration.
|
||||||
vrrp_instance VIP_4 {
|
vrrp_instance VIP_4 {
|
||||||
# Initial state, MASTER on both hosts to ensure that at least one host becomes active immediately on boot.
|
# Initial state, MASTER on both hosts to ensure that at least one host becomes active immediately on boot.
|
||||||
state MASTER
|
state MASTER
|
||||||
|
|
||||||
# Interface to place the VIP on; this is optional though still recommended on single-NIC machines; replace "ens2" with your actual NIC name.
|
# Interface to place the VIP on; this is optional though still recommended on single-NIC machines; replace "ens2" with your actual NIC name.
|
||||||
interface ens2
|
interface ens2
|
||||||
|
|
||||||
# A dedicated, unique virtual router ID for this cluster; adjust this if required.
|
# A dedicated, unique virtual router ID for this cluster; adjust this if required.
|
||||||
virtual_router_id 21
|
virtual_router_id 21
|
||||||
|
|
||||||
# The priority. Set to 200 for the primary (first) server, and to 100 for the secondary (second) server.
|
# The priority. Set to 200 for the primary (first) server, and to 100 for the secondary (second) server.
|
||||||
priority 200
|
priority 200
|
||||||
|
|
||||||
# The (list of) virtual IP address(es) with CIDR subnet mask for the "blbvip" host.
|
# The (list of) virtual IP address(es) with CIDR subnet mask for the "blbvip" host.
|
||||||
virtual_ipaddress {
|
virtual_ipaddress {
|
||||||
10.0.0.2/24
|
10.0.0.2/24
|
||||||
}
|
}
|
||||||
|
|
||||||
# Use the HAProxy check script for this VIP.
|
# Use the HAProxy check script for this VIP.
|
||||||
track_script {
|
track_script {
|
||||||
chk
|
chk
|
||||||
}
|
}
|
||||||
@ -529,28 +529,73 @@ ma1sd is an optional component for Matrix, providing 3PID (e.g. email, phone num
|
|||||||
|
|
||||||
## Step 6 - Reverse proxy
|
## Step 6 - Reverse proxy
|
||||||
|
|
||||||
For this guide, HAProxy was selected as the reverse proxy of choice. This is mostly due to my familiarity with it, but also to a lesser degree for its more advanced functionality and, in my opinion, nicer configuration syntax. This section is broken into two parts, one for a "single-server" instance, and one for a "load-balanced", multi-server instance with an additional 2 slave worker servers and with separate proxy servers. The latter setup is more complicated, but provides additional scalability and redundancy, allowing the Synapse instance to scale to much higher user volumes with greater performance and reliability.
|
For this guide, HAProxy was selected as the reverse proxy of choice. This is mostly due to my familiarity with it, but also to a lesser degree for its more advanced functionality and, in my opinion, nicer configuration syntax. This section provides configuration for a "load-balanced", multi-server instance with an additional 2 slave worker servers and with separate proxy servers; a single-server instance with basic split workers can be made by removing the additional servers. This will allow the homeserver to grow to many dozens or even hundreds of users. In this setup, the load balancer is separated out onto a separate pair of servers, with a `keepalived` VIP (virtual IP address) shared between them. The name `mlbvip` should resolve to this IP, and all previous worker configurations should use this `mlbvip` hostname as the connection target for the replication directives. Both a reasonable `keepalived` configuration for the VIP and the HAProxy configuration are provided.
|
||||||
|
|
||||||
### Single-Server instance
|
The two proxy hosts can be named as desired, in my case using the names `mlb1` and `mlb2`. These names must resolve in DNS, or be specified in `/etc/hosts` on both servers.
|
||||||
|
|
||||||
The simpler configuration of a split-worker Synapse server makes user of only a single server, running one copy of each worker, and thus provides only the split-worker performance boost with no redundancy or load-balancing of the supported workers. In this setup, there is no `mlbvip` and instead all instances of this hostname in the previous configurations should be replaced with either `localhost`, `127.0.0.1`, or `::1` in order to send connections only to the local system.
|
The Keepalived configuration below can be used on both proxy hosts, and inline comments provide additional clarification and information as well as indicating any changes required between the hosts. The VIP should be selected from the free IPs of your server subnet.
|
||||||
|
|
||||||
The reverse proxy for this setup also excludes several elements that would be provided in a "load-balanced" instance, thus ensuring that it only proxies those services that are absolutely required.
|
```
|
||||||
|
# Global configuration options.
|
||||||
The HAProxy configuration below can be used verbatim, and inline comments provide additional clarification and information to avoid breaking up the configuration snippit.
|
global_defs {
|
||||||
|
# Use a dedicated IPv6 multicast group; adjust the last octet if this conflicts within your network.
|
||||||
|
vrrp_mcast_group4 224.0.0.21
|
||||||
|
|
||||||
|
# Use VRRP version 3 in strict mode and with no iptables configuration.
|
||||||
|
vrrp_version 3
|
||||||
|
vrrp_strict
|
||||||
|
vrrp_iptables
|
||||||
|
}
|
||||||
|
|
||||||
|
# HAProxy check script, to ensure that this host will not become PRIMARY if HAProxy is not active.
|
||||||
|
vrrp_script chk {
|
||||||
|
script "/usr/bin/haproxyctl show info"
|
||||||
|
interval 5
|
||||||
|
rise 2
|
||||||
|
fall 2
|
||||||
|
}
|
||||||
|
|
||||||
|
# Primary IPv4 VIP configuration.
|
||||||
|
vrrp_instance VIP_4 {
|
||||||
|
# Initial state, MASTER on both hosts to ensure that at least one host becomes active immediately on boot.
|
||||||
|
state MASTER
|
||||||
|
|
||||||
|
# Interface to place the VIP on; this is optional though still recommended on single-NIC machines; replace "ens2" with your actual NIC name.
|
||||||
|
interface ens2
|
||||||
|
|
||||||
|
# A dedicated, unique virtual router ID for this cluster; adjust this if required.
|
||||||
|
virtual_router_id 21
|
||||||
|
|
||||||
|
# The priority. Set to 200 for the primary (first) server, and to 100 for the secondary (second) server.
|
||||||
|
priority 200
|
||||||
|
|
||||||
|
# The (list of) virtual IP address(es) with CIDR subnet mask.
|
||||||
|
virtual_ipaddress {
|
||||||
|
10.0.0.10/24
|
||||||
|
}
|
||||||
|
|
||||||
|
# Use the HAProxy check script for this VIP.
|
||||||
|
track_script {
|
||||||
|
chk
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Once the above configuration is installed at `/etc/keepalived/keepalived.conf`, restart the Keepalived service with `sudo systemctl restart keepalived` on each host. You should see the VIP become active on the first host.
|
||||||
|
|
||||||
|
The HAProxy configuration below can be used verbatim on both proxy hosts, and inline comments provide additional clarification and information to avoid breaking up the configuration snippit. In this example we use `peer` configuration to enable the use of `stick-tables` directives, which ensure that individual user sessions are synchronized between the HAProxy instances during failovers; with this setting, if the hostnames of the load balancers do not resolve, HAProxy will not start. Some additional, advanced features are used in several ACLs to ensure that, for instance, specific users and rooms are always directed to the same workers if possible, which is required by the individual workers as specified in [the Matrix documentation](https://github.com/matrix-org/synapse/blob/master/docs/workers.md).
|
||||||
|
|
||||||
```
|
```
|
||||||
# Global settings - tune HAProxy for optimal performance, administration, and security.
|
|
||||||
global
|
global
|
||||||
# Send logs to the "local6" service on the local host, via an rsyslog UDP listener. Enable debug logging to log individual connections.
|
# Send logs to the "local6" service on the local host, via an rsyslog UDP listener. Enable debug logging to log individual connections.
|
||||||
log ip6-localhost:514 local6 debug
|
log ip6-localhost:514 local6 debug
|
||||||
log-send-hostname
|
log-send-hostname
|
||||||
chroot /var/lib/haproxy
|
chroot /var/lib/haproxy
|
||||||
pidfile /run/haproxy/haproxy.pid
|
pidfile /run/haproxy/haproxy.pid
|
||||||
|
|
||||||
# Use multi-threadded support (available with HAProxy 1.8+) for optimal performance in high-load situations. Adjust `nbthread` as needed for your host's core count (1/2 is optimal).
|
# Use multi-threadded support (available with HAProxy 1.8+) for optimal performance in high-load situations. Adjust `nbthread` as needed for your host's core count (2-4 is optimal).
|
||||||
nbproc 1
|
nbproc 1
|
||||||
nbthread 2
|
nbthread 4
|
||||||
|
|
||||||
# Provide a stats socket for `hatop`
|
# Provide a stats socket for `hatop`
|
||||||
stats socket /var/lib/haproxy/admin.sock mode 660 level admin process 1
|
stats socket /var/lib/haproxy/admin.sock mode 660 level admin process 1
|
||||||
@ -567,13 +612,12 @@ global
|
|||||||
# Set default SSL configurations, including a modern highly-secure configuration requiring TLS1.2 client support.
|
# Set default SSL configurations, including a modern highly-secure configuration requiring TLS1.2 client support.
|
||||||
ca-base /etc/ssl/certs
|
ca-base /etc/ssl/certs
|
||||||
crt-base /etc/ssl/private
|
crt-base /etc/ssl/private
|
||||||
tune.ssl.default-dh-param 4096
|
tune.ssl.default-dh-param 2048
|
||||||
ssl-default-bind-ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384
|
ssl-default-bind-ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384
|
||||||
ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets
|
ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets
|
||||||
ssl-default-server-ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384
|
ssl-default-server-ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384
|
||||||
ssl-default-server-options ssl-min-ver TLSv1.2 no-tls-tickets
|
ssl-default-server-options ssl-min-ver TLSv1.2 no-tls-tickets
|
||||||
|
|
||||||
# Default settings - provide some default settings that are applicable to (most) of the listeners and backends below.
|
|
||||||
defaults
|
defaults
|
||||||
log global
|
log global
|
||||||
|
|
||||||
@ -587,287 +631,333 @@ defaults
|
|||||||
default-server init-addr libc,last,none
|
default-server init-addr libc,last,none
|
||||||
|
|
||||||
timeout client 30s
|
timeout client 30s
|
||||||
timeout connect 5s
|
timeout connect 30s
|
||||||
timeout server 30s
|
timeout server 300s
|
||||||
timeout tunnel 3600s
|
timeout tunnel 3600s
|
||||||
timeout http-keep-alive 5s
|
timeout http-keep-alive 60s
|
||||||
timeout http-request 15s
|
timeout http-request 30s
|
||||||
timeout queue 60s
|
timeout queue 60s
|
||||||
timeout tarpit 60s
|
timeout tarpit 60s
|
||||||
|
|
||||||
# Statistics listener with authentication - provides stats for the HAProxy instance via a WebUI (optional)
|
peers keepalived-pair
|
||||||
userlist admin
|
# Peers for site bl0
|
||||||
# WARNING - CHANE ME TO A REAL PASSWORD OR A SHA512-hashed PASSWORD (with `password` instead of `insecure-password`). IF YOU USE `insecure-password`, MAKE SURE THIS CONFIGURATION IS NOT WORLD-READABLE.
|
peer mlb1.i.bonilan.net mlb1.i.bonilan.net:1023
|
||||||
user admin insecure-password P4ssw0rd
|
peer mlb2.i.bonilan.net mlb2.i.bonilan.net:1023
|
||||||
listen stats
|
|
||||||
bind :::5555 v4v6
|
resolvers nsX
|
||||||
mode http
|
nameserver ns1 10.101.0.61:53
|
||||||
stats enable
|
nameserver ns2 10.101.0.62:53
|
||||||
stats uri /
|
|
||||||
stats hide-version
|
userlist admin
|
||||||
stats refresh 10s
|
user admin password MySuperSecretPassword123
|
||||||
stats show-node
|
|
||||||
stats show-legends
|
listen stats
|
||||||
acl is_admin http_auth(admin)
|
bind :::5555 v4v6
|
||||||
http-request auth realm "Admin access required" if !is_admin
|
mode http
|
||||||
|
stats enable
|
||||||
|
stats uri /
|
||||||
|
stats hide-version
|
||||||
|
stats refresh 10s
|
||||||
|
stats show-node
|
||||||
|
stats show-legends
|
||||||
|
acl is_admin http_auth(admin)
|
||||||
|
http-request auth realm "Admin access" if !is_admin
|
||||||
|
|
||||||
# HTTP frontend - provides the unencrypted HTTP listener, by default only redirectinging to HTTPS
|
|
||||||
frontend http
|
frontend http
|
||||||
bind :::80 v4v6
|
bind :::80 v4v6
|
||||||
mode http
|
mode http
|
||||||
option httplog
|
option httplog
|
||||||
|
acl url_letsencrypt path_beg /.well-known/acme-challenge/
|
||||||
|
use_backend letsencrypt if url_letsencrypt
|
||||||
|
redirect scheme https if !url_letsencrypt !{ ssl_fc }
|
||||||
|
|
||||||
# Uncomment these lines if you want to run Let's Encrypt on the local machine too, and this will forward requests to a Certbot backend later in this file (optional)
|
|
||||||
#acl url_letsencrypt path_beg /.well-known/acme-challenge/
|
|
||||||
#use_backend certbot if url_letsencrypt
|
|
||||||
|
|
||||||
redirect scheme https if !{ ssl_fc }
|
|
||||||
|
|
||||||
# HTTPS frontend - provides the main HTTPS listener, both on port 443 for clients and port 8448 for federation
|
|
||||||
frontend https
|
frontend https
|
||||||
# Bind to both ports, using certificates from `/etc/ssl/letsencrypt`; point this at whichever directory contains your (combined format) certificates.
|
|
||||||
bind :::443 v4v6 ssl crt /etc/ssl/letsencrypt/ alpn h2,http/1.1
|
bind :::443 v4v6 ssl crt /etc/ssl/letsencrypt/ alpn h2,http/1.1
|
||||||
bind :::8448 v4v6 ssl crt /etc/ssl/letsencrypt/ alpn h2,http/1.1
|
bind :::8448 v4v6 ssl crt /etc/ssl/letsencrypt/ alpn h2,http/1.1
|
||||||
mode http
|
mode http
|
||||||
option httplog
|
option httplog
|
||||||
|
capture request header Host len 64
|
||||||
|
|
||||||
# Capture the Host header to forward along
|
|
||||||
capture request header Host len 32
|
|
||||||
|
|
||||||
# Add X-Forwarded headers to alert backend processes that these requests are proxied
|
|
||||||
http-request set-header X-Forwarded-Proto https
|
http-request set-header X-Forwarded-Proto https
|
||||||
http-request add-header X-Forwarded-Host %[req.hdr(host)]
|
http-request add-header X-Forwarded-Host %[req.hdr(host)]
|
||||||
http-request add-header X-Forwarded-Server %[req.hdr(host)]
|
http-request add-header X-Forwarded-Server %[req.hdr(host)]
|
||||||
http-request add-header X-Forwarded-Port %[dst_port]
|
http-request add-header X-Forwarded-Port %[dst_port]
|
||||||
|
|
||||||
# Domain ACLs - adjust these to reflect your subdomains
|
# Method ACLs
|
||||||
# In my case, I use three subdomains: "im.bonifacelabs.ca" for the Synapse Matrix homeserver itself, and "riot.bonifacelabs.ca" with an alias of "chat.bonifacelabs.ca" for the Riot frontend.
|
acl http_method_get method GET
|
||||||
# A combination of a `.well-known/matrix/server` path (at "bonifacelabs.ca") and a DNS SRV record are used for delegation, though you could run `host_matrix` on your bare domain instead, for instance.
|
|
||||||
|
# Domain ACLs
|
||||||
acl host_matrix hdr_dom(host) im.bonifacelabs.ca
|
acl host_matrix hdr_dom(host) im.bonifacelabs.ca
|
||||||
acl host_riot hdr_dom(host) chat.bonifacelabs.ca
|
acl host_element hdr_dom(host) chat.bonifacelabs.ca
|
||||||
acl host_riot hdr_dom(host) riot.bonifacelabs.ca
|
|
||||||
|
|
||||||
# Synchrotron worker
|
# URL ACLs
|
||||||
acl url_synchrotron path_reg ^/_matrix/client/(v2_alpha|r0)/sync$
|
# Sync requests
|
||||||
acl url_synchrotron path_reg ^/_matrix/client/(api/v1|v2_alpha|r0)/events$
|
acl url_workerX_stick-auth path_reg ^/_matrix/client/(r0|v3)/sync$
|
||||||
acl url_synchrotron path_reg ^/_matrix/client/(api/v1|r0)/initialSync$
|
acl url_workerX_generic path_reg ^/_matrix/client/(api/v1|r0|v3)/events$
|
||||||
acl url_synchrotron path_reg ^/_matrix/client/(api/v1|r0)/rooms/[^/]+/initialSync$
|
acl url_workerX_stick-auth path_reg ^/_matrix/client/(api/v1|r0|v3)/initialSync$
|
||||||
use_backend synapse_synchrotron if host_matrix url_synchrotron
|
acl url_workerX_stick-auth path_reg ^/_matrix/client/(api/v1|r0|v3)/rooms/[^/]+/initialSync$
|
||||||
|
|
||||||
# Federation Reader worker
|
# Federation requests
|
||||||
acl url_federationreader path_reg ^/_matrix/federation/v1/send/
|
acl url_workerX_generic path_reg ^/_matrix/federation/v1/event/
|
||||||
acl url_federationreader path_reg ^/_matrix/federation/v1/groups/
|
acl url_workerX_generic path_reg ^/_matrix/federation/v1/state/
|
||||||
acl url_federationreader path_reg ^/_matrix/federation/v1/event/
|
acl url_workerX_generic path_reg ^/_matrix/federation/v1/state_ids/
|
||||||
acl url_federationreader path_reg ^/_matrix/federation/v1/state/
|
acl url_workerX_generic path_reg ^/_matrix/federation/v1/backfill/
|
||||||
acl url_federationreader path_reg ^/_matrix/federation/v1/state_ids/
|
acl url_workerX_generic path_reg ^/_matrix/federation/v1/get_missing_events/
|
||||||
acl url_federationreader path_reg ^/_matrix/federation/v1/backfill/
|
acl url_workerX_generic path_reg ^/_matrix/federation/v1/publicRooms
|
||||||
acl url_federationreader path_reg ^/_matrix/federation/v1/get_missing_events/
|
acl url_workerX_generic path_reg ^/_matrix/federation/v1/query/
|
||||||
acl url_federationreader path_reg ^/_matrix/federation/v1/publicRooms
|
acl url_workerX_generic path_reg ^/_matrix/federation/v1/make_join/
|
||||||
acl url_federationreader path_reg ^/_matrix/federation/v1/query/
|
acl url_workerX_generic path_reg ^/_matrix/federation/v1/make_leave/
|
||||||
acl url_federationreader path_reg ^/_matrix/federation/v1/make_join/
|
acl url_workerX_generic path_reg ^/_matrix/federation/(v1|v2)/send_join/
|
||||||
acl url_federationreader path_reg ^/_matrix/federation/v1/make_leave/
|
acl url_workerX_generic path_reg ^/_matrix/federation/(v1|v2)/send_leave/
|
||||||
acl url_federationreader path_reg ^/_matrix/federation/v1/send_join/
|
acl url_workerX_generic path_reg ^/_matrix/federation/(v1|v2)/invite/
|
||||||
acl url_federationreader path_reg ^/_matrix/federation/v2/send_join/
|
acl url_workerX_generic path_reg ^/_matrix/federation/v1/event_auth/
|
||||||
acl url_federationreader path_reg ^/_matrix/federation/v1/send_leave/
|
acl url_workerX_generic path_reg ^/_matrix/federation/v1/exchange_third_party_invite/
|
||||||
acl url_federationreader path_reg ^/_matrix/federation/v2/send_leave/
|
acl url_workerX_generic path_reg ^/_matrix/federation/v1/user/devices/
|
||||||
acl url_federationreader path_reg ^/_matrix/federation/v1/invite/
|
acl url_workerX_generic path_reg ^/_matrix/key/v2/query
|
||||||
acl url_federationreader path_reg ^/_matrix/federation/v2/invite/
|
acl url_workerX_generic path_reg ^/_matrix/federation/v1/hierarchy/
|
||||||
acl url_federationreader path_reg ^/_matrix/federation/v1/query_auth/
|
|
||||||
acl url_federationreader path_reg ^/_matrix/federation/v1/event_auth/
|
|
||||||
acl url_federationreader path_reg ^/_matrix/federation/v1/exchange_third_party_invite/
|
|
||||||
acl url_federationreader path_reg ^/_matrix/federation/v1/user/devices/
|
|
||||||
acl url_federationreader path_reg ^/_matrix/federation/v1/send/
|
|
||||||
acl url_federationreader path_reg ^/_matrix/federation/v1/get_groups_publicised$
|
|
||||||
acl url_federationreader path_reg ^/_matrix/key/v2/query
|
|
||||||
use_backend synapse_federation_reader if host_matrix url_federationreader
|
|
||||||
|
|
||||||
# Federation Media Repository worker
|
# Inbound federation transaction request
|
||||||
|
acl url_workerX_stick-src path_reg ^/_matrix/federation/v1/send/
|
||||||
|
|
||||||
|
# Client API requests
|
||||||
|
acl url_workerX_generic path_reg ^/_matrix/client/(api/v1|r0|v3|unstable)/createRoom$
|
||||||
|
acl url_workerX_generic path_reg ^/_matrix/client/(api/v1|r0|v3|unstable)/publicRooms$
|
||||||
|
acl url_workerX_generic path_reg ^/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/joined_members$
|
||||||
|
acl url_workerX_generic path_reg ^/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/context/.*$
|
||||||
|
acl url_workerX_generic path_reg ^/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/members$
|
||||||
|
acl url_workerX_generic path_reg ^/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/state$
|
||||||
|
acl url_workerX_generic path_reg ^/_matrix/client/v1/rooms/.*/hierarchy$
|
||||||
|
acl url_workerX_generic path_reg ^/_matrix/client/unstable/org.matrix.msc2716/rooms/.*/batch_send$
|
||||||
|
acl url_workerX_generic path_reg ^/_matrix/client/unstable/im.nheko.summary/rooms/.*/summary$
|
||||||
|
acl url_workerX_generic path_reg ^/_matrix/client/(r0|v3|unstable)/account/3pid$
|
||||||
|
acl url_workerX_generic path_reg ^/_matrix/client/(r0|v3|unstable)/account/whoami$
|
||||||
|
acl url_workerX_generic path_reg ^/_matrix/client/(r0|v3|unstable)/devices$
|
||||||
|
acl url_workerX_generic path_reg ^/_matrix/client/versions$
|
||||||
|
acl url_workerX_generic path_reg ^/_matrix/client/(api/v1|r0|v3|unstable)/voip/turnServer$
|
||||||
|
acl url_workerX_generic path_reg ^/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/event/
|
||||||
|
acl url_workerX_generic path_reg ^/_matrix/client/(api/v1|r0|v3|unstable)/joined_rooms$
|
||||||
|
acl url_workerX_generic path_reg ^/_matrix/client/(api/v1|r0|v3|unstable)/search$
|
||||||
|
|
||||||
|
# Encryption requests
|
||||||
|
# Note that ^/_matrix/client/(r0|v3|unstable)/keys/upload/ requires `worker_main_http_uri`
|
||||||
|
acl url_workerX_generic path_reg ^/_matrix/client/(r0|v3|unstable)/keys/query$
|
||||||
|
acl url_workerX_generic path_reg ^/_matrix/client/(r0|v3|unstable)/keys/changes$
|
||||||
|
acl url_workerX_generic path_reg ^/_matrix/client/(r0|v3|unstable)/keys/claim$
|
||||||
|
acl url_workerX_generic path_reg ^/_matrix/client/(r0|v3|unstable)/room_keys/
|
||||||
|
acl url_workerX_generic path_reg ^/_matrix/client/(r0|v3|unstable)/keys/upload/
|
||||||
|
|
||||||
|
# Registration/login requests
|
||||||
|
acl url_workerX_generic path_reg ^/_matrix/client/(api/v1|r0|v3|unstable)/login$
|
||||||
|
acl url_workerX_generic path_reg ^/_matrix/client/(r0|v3|unstable)/register$
|
||||||
|
acl url_workerX_generic path_reg ^/_matrix/client/v1/register/m.login.registration_token/validity$
|
||||||
|
|
||||||
|
# Event sending requests
|
||||||
|
acl url_workerX_stick-path path_reg ^/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/redact
|
||||||
|
acl url_workerX_stick-path path_reg ^/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/send
|
||||||
|
acl url_workerX_stick-path path_reg ^/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/state/
|
||||||
|
acl url_workerX_stick-path path_reg ^/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/(join|invite|leave|ban|unban|kick)$
|
||||||
|
acl url_workerX_stick-path path_reg ^/_matrix/client/(api/v1|r0|v3|unstable)/join/
|
||||||
|
acl url_workerX_stick-path path_reg ^/_matrix/client/(api/v1|r0|v3|unstable)/profile/
|
||||||
|
|
||||||
|
# User directory search requests
|
||||||
|
acl url_workerX_generic path_reg ^/_matrix/client/(r0|v3|unstable)/user_directory/search$
|
||||||
|
|
||||||
|
# Pagination requests
|
||||||
|
acl url_workerX_stick-path path_reg ^/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/messages$
|
||||||
|
|
||||||
|
# Push rules (GET-only)
|
||||||
|
acl url_push-rules path_reg ^/_matrix/client/(api/v1|r0|v3|unstable)/pushrules/
|
||||||
|
|
||||||
|
# Directory worker endpoints
|
||||||
|
acl url_directory-worker path_reg ^/_matrix/client/(r0|v3|unstable)/user_directory/search$
|
||||||
|
|
||||||
|
# Event persister endpoints
|
||||||
|
acl url_stream-worker path_reg ^/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/typing
|
||||||
|
acl url_stream-worker path_reg ^/_matrix/client/(r0|v3|unstable)/sendToDevice/
|
||||||
|
acl url_stream-worker path_reg ^/_matrix/client/(r0|v3|unstable)/.*/tags
|
||||||
|
acl url_stream-worker path_reg ^/_matrix/client/(r0|v3|unstable)/.*/account_data
|
||||||
|
acl url_stream-worker path_reg ^/_matrix/client/(r0|v3|unstable)/rooms/.*/receipt
|
||||||
|
acl url_stream-worker path_reg ^/_matrix/client/(r0|v3|unstable)/rooms/.*/read_markers
|
||||||
|
acl url_stream-worker path_reg ^/_matrix/client/(api/v1|r0|v3|unstable)/presence/
|
||||||
|
|
||||||
|
# Backend directors
|
||||||
|
use_backend synapseX_worker_generic if host_matrix url_workerX_generic
|
||||||
|
use_backend synapseX_worker_generic if host_matrix url_push-rules http_method_get
|
||||||
|
use_backend synapseX_worker_stick-auth if host_matrix url_workerX_stick-auth
|
||||||
|
use_backend synapseX_worker_stick-src if host_matrix url_workerX_stick-src
|
||||||
|
use_backend synapseX_worker_stick-path if host_matrix url_workerX_stick-path
|
||||||
|
use_backend synapse0_directory_worker if host_matrix url_directory-worker
|
||||||
|
use_backend synapse0_stream_worker if host_matrix url_stream-worker
|
||||||
|
|
||||||
|
# Master workers (single-instance) - Federation media repository requests
|
||||||
acl url_mediarepository path_reg ^/_matrix/media/
|
acl url_mediarepository path_reg ^/_matrix/media/
|
||||||
acl url_mediarepository path_reg ^/_synapse/admin/v1/purge_media_cache$
|
acl url_mediarepository path_reg ^/_synapse/admin/v1/purge_media_cache$
|
||||||
acl url_mediarepository path_reg ^/_synapse/admin/v1/room/.*/media.*$
|
acl url_mediarepository path_reg ^/_synapse/admin/v1/room/.*/media.*$
|
||||||
acl url_mediarepository path_reg ^/_synapse/admin/v1/user/.*/media.*$
|
acl url_mediarepository path_reg ^/_synapse/admin/v1/user/.*/media.*$
|
||||||
acl url_mediarepository path_reg ^/_synapse/admin/v1/media/.*$
|
acl url_mediarepository path_reg ^/_synapse/admin/v1/media/.*$
|
||||||
acl url_mediarepository path_reg ^/_synapse/admin/v1/quarantine_media/.*$
|
acl url_mediarepository path_reg ^/_synapse/admin/v1/quarantine_media/.*$
|
||||||
use_backend synapse_media_repository if host_matrix url_mediarepository
|
acl url_mediarepository path_reg ^/_synapse/admin/v1/users/.*/media$
|
||||||
|
use_backend synapse0_media_repository if host_matrix url_mediarepository
|
||||||
# Client Reader worker
|
|
||||||
acl url_clientreader path_reg ^/_matrix/client/(r0|unstable)/register$
|
|
||||||
acl url_clientreader path_reg ^/_matrix/client/(r0|unstable)/auth/.*/fallback/web$
|
|
||||||
acl url_clientreader path_reg ^/_matrix/client/(api/v1|r0|unstable)/rooms/.*/messages$
|
|
||||||
acl url_clientreader path_reg ^/_matrix/client/(api/v1|r0|unstable)/publicRooms$
|
|
||||||
acl url_clientreader path_reg ^/_matrix/client/(api/v1|r0|unstable)/rooms/.*/joined_members$
|
|
||||||
acl url_clientreader path_reg ^/_matrix/client/(api/v1|r0|unstable)/rooms/.*/context/.*$
|
|
||||||
acl url_clientreader path_reg ^/_matrix/client/(api/v1|r0|unstable)/rooms/.*/members$
|
|
||||||
acl url_clientreader path_reg ^/_matrix/client/(api/v1|r0|unstable)/rooms/.*/state$
|
|
||||||
acl url_clientreader path_reg ^/_matrix/client/(api/v1|r0|unstable)/login$
|
|
||||||
acl url_clientreader path_reg ^/_matrix/client/(api/v1|r0|unstable)/account/3pid$
|
|
||||||
acl url_clientreader path_reg ^/_matrix/client/(api/v1|r0|unstable)/keys/query$
|
|
||||||
acl url_clientreader path_reg ^/_matrix/client/(api/v1|r0|unstable)/keys/changes$
|
|
||||||
acl url_clientreader path_reg ^/_matrix/client/versions$
|
|
||||||
acl url_clientreader path_reg ^/_matrix/client/(api/v1|r0|unstable)/voip/turnServer$
|
|
||||||
acl url_clientreader path_reg ^/_matrix/client/(api/v1|r0|unstable)/joined_groups$
|
|
||||||
acl url_clientreader path_reg ^/_matrix/client/(api/v1|r0|unstable)/publicised_groups$
|
|
||||||
acl url_clientreader path_reg ^/_matrix/client/(api/v1|r0|unstable)/publicised_groups/
|
|
||||||
acl url_clientreader path_reg ^/_matrix/client/(api/v1|r0|unstable)/pushrules/.*$
|
|
||||||
acl url_clientreader path_reg ^/_matrix/client/(api/v1|r0|unstable)/groups/.*$
|
|
||||||
acl url_clientreader path_reg ^/_matrix/client/(api/v1|r0|unstable)/user/[^/]*/account_data/
|
|
||||||
acl url_clientreader path_reg ^/_matrix/client/(api/v1|r0|unstable)/user/[^/]*/rooms/[^/]*/account_data/
|
|
||||||
use_backend synapse_client_reader if host_matrix url_clientreader
|
|
||||||
|
|
||||||
# User Dir worker
|
|
||||||
acl url_userdir path_reg ^/_matrix/client/(api/v1|r0|unstable)/user_directory/search$
|
|
||||||
use_backend synapse_user_dir if host_matrix url_userdir
|
|
||||||
|
|
||||||
# Frontend Proxy worker
|
|
||||||
acl url_frontendproxy path_reg ^/_matrix/client/(api/v1|r0|unstable)/keys/upload
|
|
||||||
acl url_frontendproxy path_reg ^/_matrix/client/(api/v1|r0|unstable)/presence/[^/]+/status
|
|
||||||
use_backend synapse_frontend_proxy if host_matrix url_frontendproxy
|
|
||||||
|
|
||||||
# Event Creator worker
|
|
||||||
acl url_eventcreator path_reg ^/_matrix/client/(api/v1|r0|unstable)/rooms/.*/send
|
|
||||||
acl url_eventcreator path_reg ^/_matrix/client/(api/v1|r0|unstable)/rooms/.*/state/
|
|
||||||
acl url_eventcreator path_reg ^/_matrix/client/(api/v1|r0|unstable)/rooms/.*/(join|invite|leave|ban|unban|kick)$
|
|
||||||
acl url_eventcreator path_reg ^/_matrix/client/(api/v1|r0|unstable)/join/
|
|
||||||
acl url_eventcreator path_reg ^/_matrix/client/(api/v1|r0|unstable)/profile/
|
|
||||||
use_backend synapse_event_creator if host_matrix url_eventcreator
|
|
||||||
|
|
||||||
# MXISD/MA1SD worker
|
# MXISD/MA1SD worker
|
||||||
acl url_ma1sd path_reg ^/_matrix/client/(api/v1|r0|unstable)/user_directory
|
acl url_ma1sd path_reg ^/_matrix/client/(api/v1|r0|unstable)/user_directory
|
||||||
acl url_ma1sd path_reg ^/_matrix/client/(api/v1|r0|unstable)/login
|
acl url_ma1sd path_reg ^/_matrix/client/(api/v1|r0|unstable)/login
|
||||||
acl url_ma1sd path_reg ^/_matrix/identity
|
acl url_ma1sd path_reg ^/_matrix/identity
|
||||||
use_backend synapse_ma1sd if host_matrix url_ma1sd
|
use_backend synapse0_ma1sd if host_matrix url_ma1sd
|
||||||
|
|
||||||
# Catchalls for Matrix and Riot endpoints not configured above
|
# Webhook service
|
||||||
use_backend synapse_synapse if host_matrix
|
acl url_webhook path_reg ^/webhook
|
||||||
use_backend riot_http if host_riot
|
use_backend synapse0_webhook if host_matrix url_webhook
|
||||||
|
|
||||||
# Default to Riot if the wrong/no Host header is specified
|
# .well-known configs
|
||||||
default_backend riot_http
|
acl url_wellknown path_reg ^/.well-known/matrix
|
||||||
|
use_backend elementX_http if host_matrix url_wellknown
|
||||||
|
|
||||||
# Riot frontend backend
|
# Catchall Matrix and RElement
|
||||||
backend riot_http
|
use_backend synapse0_master if host_matrix
|
||||||
# HTTP mode backend (identical for all workers)
|
use_backend elementX_http if host_element
|
||||||
|
|
||||||
|
# Default to Riot
|
||||||
|
default_backend elementX_http
|
||||||
|
|
||||||
|
frontend ma1sd_http
|
||||||
|
bind :::8090 v4v6
|
||||||
mode http
|
mode http
|
||||||
|
option httplog
|
||||||
|
use_backend synapse0_ma1sd
|
||||||
|
|
||||||
# Use layer 7 checking
|
backend letsencrypt
|
||||||
|
mode http
|
||||||
|
server elbvip.i.bonilan.net elbvip.i.bonilan.net:80 resolvers nsX resolve-prefer ipv4
|
||||||
|
|
||||||
|
backend elementX_http
|
||||||
|
mode http
|
||||||
|
balance leastconn
|
||||||
option httpchk GET /index.html
|
option httpchk GET /index.html
|
||||||
|
# Force users (by source IP) to visit the same backend server
|
||||||
|
stick-table type ipv6 size 5000k peers keepalived-pair expire 72h
|
||||||
|
stick on src
|
||||||
|
errorfile 500 /etc/haproxy/sorryserver.http
|
||||||
|
errorfile 502 /etc/haproxy/sorryserver.http
|
||||||
|
errorfile 503 /etc/haproxy/sorryserver.http
|
||||||
|
errorfile 504 /etc/haproxy/sorryserver.http
|
||||||
|
server element1 element1.i.bonilan.net:80 resolvers nsX resolve-prefer ipv4 check inter 5000 cookie element1.i.bonilan.net
|
||||||
|
server element2 element2.i.bonilan.net:80 resolvers nsX resolve-prefer ipv4 check inter 5000 cookie element2.i.bonilan.net
|
||||||
|
|
||||||
# If you want to use a sorryserver page, uncomment these lines and add them to all other backends too
|
backend synapse0_master
|
||||||
#errorfile 500 /etc/haproxy/sorryserver.http
|
|
||||||
#errorfile 502 /etc/haproxy/sorryserver.http
|
|
||||||
#errorfile 503 /etc/haproxy/sorryserver.http
|
|
||||||
#errorfile 504 /etc/haproxy/sorryserver.http
|
|
||||||
|
|
||||||
# Backend server on localhost port 8080, with backend checking every 5 seconds (identical for all workers)
|
|
||||||
server localhost 127.0.0.1:8080 check inter 5000
|
|
||||||
|
|
||||||
# Primary Synapse backend
|
|
||||||
backend synapse_synapse
|
|
||||||
mode http
|
mode http
|
||||||
server localhost 127.0.0.1:8008 check inter 5000
|
balance roundrobin
|
||||||
|
option httpchk
|
||||||
|
retries 0
|
||||||
|
errorfile 500 /etc/haproxy/sorryserver.http
|
||||||
|
errorfile 502 /etc/haproxy/sorryserver.http
|
||||||
|
errorfile 503 /etc/haproxy/sorryserver.http
|
||||||
|
errorfile 504 /etc/haproxy/sorryserver.http
|
||||||
|
server synapse0.i.bonilan.net synapse0.i.bonilan.net:8008 resolvers nsX resolve-prefer ipv4 check inter 5000 backup
|
||||||
|
|
||||||
# ma1sd backend (optional)
|
backend synapse0_directory_worker
|
||||||
backend synapse_ma1sd
|
|
||||||
mode http
|
mode http
|
||||||
server localhost 127.0.0.1:8090 check inter 5000
|
balance roundrobin
|
||||||
|
option httpchk
|
||||||
|
retries 0
|
||||||
|
errorfile 500 /etc/haproxy/sorryserver.http
|
||||||
|
errorfile 502 /etc/haproxy/sorryserver.http
|
||||||
|
errorfile 503 /etc/haproxy/sorryserver.http
|
||||||
|
errorfile 504 /etc/haproxy/sorryserver.http
|
||||||
|
server synapse0.i.bonilan.net synapse0.i.bonilan.net:8033 resolvers nsX resolve-prefer ipv4 check inter 5000 backup
|
||||||
|
|
||||||
# Client Reader backend
|
backend synapse0_stream_worker
|
||||||
backend synapse_client_reader
|
|
||||||
mode http
|
mode http
|
||||||
server localhost 127.0.0.1:8091 check inter 5000
|
balance roundrobin
|
||||||
|
option httpchk
|
||||||
|
retries 0
|
||||||
|
errorfile 500 /etc/haproxy/sorryserver.http
|
||||||
|
errorfile 502 /etc/haproxy/sorryserver.http
|
||||||
|
errorfile 503 /etc/haproxy/sorryserver.http
|
||||||
|
errorfile 504 /etc/haproxy/sorryserver.http
|
||||||
|
server synapse0.i.bonilan.net synapse0.i.bonilan.net:8035 resolvers nsX resolve-prefer ipv4 check inter 5000 backup
|
||||||
|
|
||||||
# Event Creator backend
|
backend synapse0_media_repository
|
||||||
backend synapse_event_creator
|
|
||||||
mode http
|
mode http
|
||||||
server localhost 127.0.0.1:8092 check inter 5000
|
balance roundrobin
|
||||||
|
option httpchk
|
||||||
|
retries 0
|
||||||
|
errorfile 500 /etc/haproxy/sorryserver.http
|
||||||
|
errorfile 502 /etc/haproxy/sorryserver.http
|
||||||
|
errorfile 503 /etc/haproxy/sorryserver.http
|
||||||
|
errorfile 504 /etc/haproxy/sorryserver.http
|
||||||
|
server synapse0.i.bonilan.net synapse0.i.bonilan.net:8095 resolvers nsX resolve-prefer ipv4 check inter 5000 backup
|
||||||
|
|
||||||
# Federation Reader backend
|
backend synapse0_ma1sd
|
||||||
backend synapse_federation_reader
|
|
||||||
mode http
|
mode http
|
||||||
server localhost 127.0.0.1:8093 check inter 5000
|
balance roundrobin
|
||||||
|
option httpchk
|
||||||
|
errorfile 500 /etc/haproxy/sorryserver.http
|
||||||
|
errorfile 502 /etc/haproxy/sorryserver.http
|
||||||
|
errorfile 503 /etc/haproxy/sorryserver.http
|
||||||
|
errorfile 504 /etc/haproxy/sorryserver.http
|
||||||
|
server synapse0.i.bonilan.net synapse0.i.bonilan.net:8090 resolvers nsX resolve-prefer ipv4 check inter 5000
|
||||||
|
|
||||||
# Frontend Proxy backend
|
backend synapse0_webhook
|
||||||
backend synapse_frontend_proxy
|
|
||||||
mode http
|
mode http
|
||||||
server localhost 127.0.0.1:8094 check inter 5000
|
balance roundrobin
|
||||||
|
option httpchk GET /
|
||||||
|
server synapse0.i.bonilan.net synapse0.i.bonilan.net:4785 resolvers nsX resolve-prefer ipv4 check inter 5000 backup
|
||||||
|
|
||||||
# Media Repository backend
|
backend synapseX_worker_generic
|
||||||
backend synapse_media_repository
|
|
||||||
mode http
|
mode http
|
||||||
server localhost 127.0.0.1:8095 check inter 5000
|
balance roundrobin
|
||||||
|
option httpchk
|
||||||
|
errorfile 500 /etc/haproxy/sorryserver.http
|
||||||
|
errorfile 502 /etc/haproxy/sorryserver.http
|
||||||
|
errorfile 503 /etc/haproxy/sorryserver.http
|
||||||
|
errorfile 504 /etc/haproxy/sorryserver.http
|
||||||
|
server synapse1.i.bonilan.net synapse1.i.bonilan.net:8030 resolvers nsX resolve-prefer ipv4 check inter 5000
|
||||||
|
server synapse2.i.bonilan.net synapse2.i.bonilan.net:8030 resolvers nsX resolve-prefer ipv4 check inter 5000
|
||||||
|
|
||||||
# Synchrotron backend
|
backend synapseX_worker_stick-auth
|
||||||
backend synapse_synchrotron
|
|
||||||
mode http
|
mode http
|
||||||
server localhost 127.0.0.1:8096 check inter 5000
|
balance roundrobin
|
||||||
|
option httpchk
|
||||||
|
# Force users (by Authorization header) to visit the same backend server
|
||||||
|
stick-table type string len 1024 size 5000k peers keepalived-pair expire 72h
|
||||||
|
stick on hdr(Authorization)
|
||||||
|
errorfile 500 /etc/haproxy/sorryserver.http
|
||||||
|
errorfile 502 /etc/haproxy/sorryserver.http
|
||||||
|
errorfile 503 /etc/haproxy/sorryserver.http
|
||||||
|
errorfile 504 /etc/haproxy/sorryserver.http
|
||||||
|
server synapse1.i.bonilan.net synapse1.i.bonilan.net:8030 resolvers nsX resolve-prefer ipv4 check inter 5000
|
||||||
|
server synapse2.i.bonilan.net synapse2.i.bonilan.net:8030 resolvers nsX resolve-prefer ipv4 check inter 5000
|
||||||
|
|
||||||
# User Dir backend
|
backend synapseX_worker_stick-path
|
||||||
backend synapse_user_dir
|
|
||||||
mode http
|
mode http
|
||||||
server localhost 127.0.0.1:8097 check inter 5000
|
balance roundrobin
|
||||||
```
|
option httpchk
|
||||||
|
# Force users to visit the same backend server
|
||||||
|
stick-table type string len 1024 size 5000k peers keepalived-pair expire 72h
|
||||||
|
stick on path,word(5,/) if { path_reg ^/_matrix/client/(r0|unstable)/rooms }
|
||||||
|
stick on path,word(6,/) if { path_reg ^/_matrix/client/api/v1/rooms }
|
||||||
|
stick on path
|
||||||
|
errorfile 500 /etc/haproxy/sorryserver.http
|
||||||
|
errorfile 502 /etc/haproxy/sorryserver.http
|
||||||
|
errorfile 503 /etc/haproxy/sorryserver.http
|
||||||
|
errorfile 504 /etc/haproxy/sorryserver.http
|
||||||
|
server synapse1.i.bonilan.net synapse1.i.bonilan.net:8030 resolvers nsX resolve-prefer ipv4 check inter 5000
|
||||||
|
server synapse2.i.bonilan.net synapse2.i.bonilan.net:8030 resolvers nsX resolve-prefer ipv4 check inter 5000
|
||||||
|
|
||||||
Once the above configuration is installed at `/etc/haproxy/haproxy.cfg`, restart the HAProxy service with `sudo systemctl restart haproxy`. You will now have access to the various endpoints on ports 443 and 8448 with a redirection from port 80 to port 443 to enforce SSL from clients.
|
backend synapseX_worker_stick-src
|
||||||
|
mode http
|
||||||
### Multi-Server, Load-Balanced instance
|
balance roundrobin
|
||||||
|
option httpchk
|
||||||
The more advanced configuration of multiple load-balanced workers on multiple services provides a more redundant and scalable instance, thus allowing the homeserver to grow to many dozens or even hundreds of users. In this setup, the load balancer is separated out onto a separate pair of servers, with a `keepalived` VIP (virtual IP address) shared between them. The name `mlbvip` should resolve to this IP, and all previous worker configurations should use this `mlbvip` hostname as the connection target for the replication directives. Both a reasonable `keepalived` configuration for the VIP and the HAProxy configuration are provided.
|
# Force users (by source IP) to visit the same backend server
|
||||||
|
stick-table type ipv6 size 5000k peers keepalived-pair expire 72h
|
||||||
The two proxy hosts can be named as desired, in my case using the names `mlb1` and `mlb2`. These names must resolve in DNS, or be specified in `/etc/hosts` on both servers.
|
stick on src
|
||||||
|
errorfile 500 /etc/haproxy/sorryserver.http
|
||||||
The Keepalived configuration below can be used on both proxy hosts, and inline comments provide additional clarification and information as well as indicating any changes required between the hosts. The VIP should be selected from the free IPs of your server subnet.
|
errorfile 502 /etc/haproxy/sorryserver.http
|
||||||
|
errorfile 503 /etc/haproxy/sorryserver.http
|
||||||
```
|
errorfile 504 /etc/haproxy/sorryserver.http
|
||||||
# Global configuration options.
|
server synapse1.i.bonilan.net synapse1.i.bonilan.net:8030 resolvers nsX resolve-prefer ipv4 check inter 5000
|
||||||
global_defs {
|
server synapse2.i.bonilan.net synapse2.i.bonilan.net:8030 resolvers nsX resolve-prefer ipv4 check inter 5000
|
||||||
# Use a dedicated IPv6 multicast group; adjust the last octet if this conflicts within your network.
|
|
||||||
vrrp_mcast_group4 224.0.0.21
|
|
||||||
|
|
||||||
# Use VRRP version 3 in strict mode and with no iptables configuration.
|
|
||||||
vrrp_version 3
|
|
||||||
vrrp_strict
|
|
||||||
vrrp_iptables
|
|
||||||
}
|
|
||||||
|
|
||||||
# HAProxy check script, to ensure that this host will not become PRIMARY if HAProxy is not active.
|
|
||||||
vrrp_script chk {
|
|
||||||
script "/usr/bin/haproxyctl show info"
|
|
||||||
interval 5
|
|
||||||
rise 2
|
|
||||||
fall 2
|
|
||||||
}
|
|
||||||
|
|
||||||
# Primary IPv4 VIP configuration.
|
|
||||||
vrrp_instance VIP_4 {
|
|
||||||
# Initial state, MASTER on both hosts to ensure that at least one host becomes active immediately on boot.
|
|
||||||
state MASTER
|
|
||||||
|
|
||||||
# Interface to place the VIP on; this is optional though still recommended on single-NIC machines; replace "ens2" with your actual NIC name.
|
|
||||||
interface ens2
|
|
||||||
|
|
||||||
# A dedicated, unique virtual router ID for this cluster; adjust this if required.
|
|
||||||
virtual_router_id 21
|
|
||||||
|
|
||||||
# The priority. Set to 200 for the primary (first) server, and to 100 for the secondary (second) server.
|
|
||||||
priority 200
|
|
||||||
|
|
||||||
# The (list of) virtual IP address(es) with CIDR subnet mask.
|
|
||||||
virtual_ipaddress {
|
|
||||||
10.0.0.10/24
|
|
||||||
}
|
|
||||||
|
|
||||||
# Use the HAProxy check script for this VIP.
|
|
||||||
track_script {
|
|
||||||
chk
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Once the above configuration is installed at `/etc/keepalived/keepalived.conf`, restart the Keepalived service with `sudo systemctl restart keepalived` on each host. You should see the VIP become active on the first host.
|
|
||||||
|
|
||||||
The HAProxy configuration below can be used verbatim on both proxy hosts, and inline comments provide additional clarification and information to avoid breaking up the configuration snippit. In this example we use `peer` configuration to enable the use of `stick-tables` directives, which ensure that individual user sessions are synchronized between the HAProxy instances during failovers; with this setting, if the hostnames of the load balancers do not resolve, HAProxy will not start. Some additional, advanced features are used in several ACLs to ensure that, for instance, specific users and rooms are always directed to the same workers if possible, which is required by the individual workers as specified in [the Matrix documentation](https://github.com/matrix-org/synapse/blob/master/docs/workers.md).
|
|
||||||
|
|
||||||
```
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Once the above configurations are installed on each server, restart the HAProxy service with `sudo systemctl restart haproxy`. You will now have access to the various endpoints on ports 443 and 8448 with a redirection from port 80 to port 443 to enforce SSL from clients.
|
Once the above configurations are installed on each server, restart the HAProxy service with `sudo systemctl restart haproxy`. You will now have access to the various endpoints on ports 443 and 8448 with a redirection from port 80 to port 443 to enforce SSL from clients.
|
86
content/en/posts/.drafts/state-of-the-servers-2022/index.md
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
+++
|
||||||
|
date = "2022-11-01T00:00:00-05:00"
|
||||||
|
tags = ["systems administration", "pvc","ceph","homelab","servers","networking"]
|
||||||
|
title = "State of the Servers 2022"
|
||||||
|
description = "A complete writeup of my homeproduction system as of end-2022, its 10th anniversary"
|
||||||
|
type = "post"
|
||||||
|
weight = 1
|
||||||
|
draft = true
|
||||||
|
+++
|
||||||
|
|
||||||
|
My home lab/production datacentre is my main hobby. While I have others, over the past 10 years I've definitely spent more time on it than anything else. From humble beginnings I've built a system to rival many small-to-medium enterprises (SMEs) or ISPs in my basement, providing me highly redundant and stable services both for my Internet presence, and for learning.
|
||||||
|
|
||||||
|
While I've written about parts of the setup in the past, I don't think I've ever done a complete and thorough writeup of every piece of the system, what went into my choices (spoiler: mostly cost) and design, and how it all fits together. This post is my attempt to rectify that.
|
||||||
|
|
||||||
|
For most of its first 8 years, the system was constantly changing even month-to-month as I obtained new parts, tinkered away, and just generally broke things for fun. But over COVID, while working from home, and with money being tight, as well as my maturity as a senior systems architect, things really stabilized, and it's only changed in a few minor ways since 2020. I have big plans for 2023, but for right now things have been stable for long enough to be able to really dig into all the parts, as well as hint at my future plans.
|
||||||
|
|
||||||
|
So if you dare, please join me on a virtual tour of my "homeproduction" system, the monster in my basement.
|
||||||
|
|
||||||
|
## Part One: A Brief History
|
||||||
|
|
||||||
|
My homelab journey started over 16 years ago while still in high school. At the time I was a serious computer enthusiast, and had more than enough spare parts to build a few home servers. Between then and finishing my college program (Network Engineering and Security Analyst at Mohawk College in Hamilton, Ontario) in late 2012, I went through a variety of setups that were almost exclusively based on single servers with storage, some sort of hypervisor, and just for tinkering and media storage.
|
||||||
|
|
||||||
|
When I started my career in earnest in January 2013, I finally had the disposable income to buy my first real server: a used Dell C6100 with 4 blade nodes. This system formed the basis of my lab for the next 6 years, and is still running today in a colo providing live functions for me.
|
||||||
|
|
||||||
|
My first few iterations tended to focus on a pair of Xen servers for virtualization and a separate ZFS server for storage, while also going through various combinations of routers including Mikrotiks trying to find something that would solve my endless WiFi issues. At this time I was running at most a dozen or so VMs with some core functionality for Internet presence, but nothing too fancy - it was primarily a learning tool. At one point I also tried doing a dual-primary DRBD setup for VM disks, but this went about as well as you might expect (not well at all), so I went back to a ZFS array for ZVOLs. I was also using `bcfg2` for configuration management. Basically, I had fully mirrored what I used and deployed at work built from the ground up, and it gave me some seriously in-depth knowledge of these tools that were crucial to my later role.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Around this time I was also finally stabilizing on a pretty consistent set of systems, and a rumored change to Google's terms for hosted domains prompted me to move one of my first major production services into my home system: email. I can safely say that, having now run email at home for 7 years, it works plenty fine if you take the proper care.
|
||||||
|
|
||||||
|
In early 2016 I discovered two critical new things for the management of my systems: Ansible and Ceph. At first, I was using Ansible mostly for ad-hoc tasks, but I quickly started putting together a set of roles to replace bcfg2 as my primary configuration management tool. While declarative configuration management is nice and all, I liked the flexibility of a more procedural, imperitive system, especially when creating new roles, and it gave me a lot of power to automate complex program deployments that were impossible in bcfg2. By the end of the year I had fully moved over to Ansible for configuration management. I also started using `git` to track my configuration around this time, so this is the earliest period I still have records of, though I might wish to forget it...
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Ceph was the real game-changer for me though. For most of the previous 2 years I had been immensely frustrated with my storage host being a single point of failure in my network: if it needed a kernel update, *everything* had to go down. I had looked into some of the more esoteric "enterprise" solutions like multipath SAS and redundant disk arrays, but cost, space, and power requirements kept me from going that route. Then a good friend introduced me to Ceph which he had been playing with at his workplace. Suddenly I could take 3 generic servers (which he, newly married, was happy to provide due to wife-acceptance-factor reasons) and build a redudant and scalable storage cluster that could tolerate single-host failures. At the time Ceph was a lot more primitive than it is today, forcing some uncommon solutions - using ZFS as an underlying filestore for instance to ensure corrupt data wouldn't be replicated. But this same cluster still serves me now after many years of tweaking and adjusting, having grown from just a dozen 3TB drives to over 20 8TB and 14TB drives and 168TB of raw space. At this time, getting actual file storage on Ceph was hard, due to the immaturity of CephFS at this point, and the hack solution of an XFS array in-VM with a dozen 1TB stripes was fraught with issues, but it worked well enough for long enough for CephFS to mature and for me to move to it for bulk data storage.
|
||||||
|
|
||||||
|
The next major change to my hypervisor stack came in mid-2016. In addition to a job change that introduced me to a lot of new technologies, at that point I was really feeling limited by Xen's interface and lack of any sort of batteries, so I looked into alteratives. At this time I looked into ProxMox, but was not at all impressed with its performance, reliability, or featureset; that opinion has not changed since. So I decided on one of my first daring plans: to switch from Xen to KVM+Libvirt, and use Corosync and Pacemaker to manage my VMs, with shared storage provided by the Ceph cluster.
|
||||||
|
|
||||||
|
By the end of 2016 I had also finally solved my WiFi problem, using a nice bonus to purchase a pair of Ubiquiti UAP-LR's which were, in addition to their strong signal, capable of proper roaming, finally allowing me to actually cover my entire house with usable WiFi. And a year later I upgraded this to a pair of UAP-AC Pro's for even better speed, keeping one of the UAP-LR's as a separate home automation network. I also moved my routing from the previous Mikrotik Routerboards I was using to pfSense, and bought myself a 10-Gigabit switch to upgrade the connectivity of all of the servers, which overnight nearly doubled the performance of my storage cluster. I also purchased several more servers around this time, first to experiment with, and then to replace my now-aging C6100.
|
||||||
|
|
||||||
|
2017 was a year of home automation and routing. I purchased my first set of Belkin WeMo switches, finally set up HomeAssistant, and got to work automating many of my lights, including a [custom voice controller system](https://www.boniface.me/self-hosted-voice-control/). Early in the year I also decided to abandon my long-serving ISP-provided static IP block and move to a new setup. While I liked the services and control it gave me, being DSL on 50 year old lines, the actual Internet performance was abysmal, and I wanted WAN redundancy. So I set up a remote dedicated server with a static IP block routed to it, then piped this back to my home using OpenVPN tunnels load-balanced over my now-redundant DSL and Cable Internet connections, proving both resiliency as well as a more "official" online presence. Later in the year, after discussing with a few coworkers, I invested in a proper colocation, abandoned the dedicated server, and used my now-freed and frustrating C6100 as a redundant pair of remote routers, with a pfSense pair on the home side.
|
||||||
|
|
||||||
|
In early 2018, the major drawbacks of Corosync and Pacemaker were rearing their ugly heads more and more often: any attempt to restart the service would trash my VM cluster, which had grown to about 30 VMs running many more service by this point. ProxMox still sort of sucked, and OpenStack was nigh-incomprehensable to a single mere wizard like myself. What I wanted was Nutanix, but even most SME's can't afford that. So, I started building my own, named [PVC or Parallel Virtual Cluster](https://docs.parallelvirtualcluster.org). It wasn't that ambitious at first: I just wanted a replacement to Corosync+Pacemaker which would actually preserve state properly, using Zookeeper as the state management backend. Over time I slowly added more functionality to it, and a major breakthrough came in late 2018 when I left the "new" job and returned to my "old" job, bringing this project with me, and impressing my managers with its potential to replace their aging Xen-based platform (on which I based my original homelab design, ironically enough; student became teacher). By early 2020 I had it deployed in production at 2 ISPs, and today have it deployed at 9, plus two in-house clusters, with several more on the way. I discuss PVC in more detail later.
|
||||||
|
|
||||||
|
In late 2018, I finally grew fed up with pfSense. The short of it is, nothing config-wise in pfSense is static: events like "the WAN 1 interface went down" would trigger PHP scripts which would regenerate and reload dozens of services, meaning that trivialities like WAN failovers would take up to 30 seconds. Frustrated, I decided to abandon pfSense entirely and replaced my routers with custom-built FreeBSD boxes in line with the remote routers at the colocation. This setup proved invaluable going forward: 1-second failure detection and seamless failover have been instrumental in keeping a 99+% uptime on my *home* system.
|
||||||
|
|
||||||
|
2019 was a fairly quiet year, with some minor upgrades here and there, with the occasional server replacement to help keep power usage down. And by early 2020, most of the current system had fallen into place. While the number of VMs fluctuates month to month still, the core set is about 40 that are always running, across 3 hypervisor hosts running PVC, with bulk data on the 3 Ceph nodes. 2 routers on each side provided redundant connectivity, and after an unfortunate complication with my TPIA cable provider, in 2022 I moved to a business-class Gigabit cable connection, and added a Fixed-Wireless connection in addition to the existing DSL, bringing me to 3 Internet connections. There's no kill like overkill.
|
||||||
|
|
||||||
|
## Part Two: The Rack
|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
The rack itself is built primarily of 2x4's and wood paneling. Originally, as seen above, I had used Lack tables, but due to the heat output I wanted to contain the heat and try to vent it somewhere useful, or at least not as obtrusive. This went through several iterations, and after scouring for enclosed racks around me to no avail, in ~2017 I took what is now a common refrain for me and built my own.
|
||||||
|
|
||||||
|
The primary consturction uses 6 ~6-foot 2x4 risers, which are connected at the top and bottom by horizontal 2x4's to form a stable frame. Heavy castors are present on the bottom below each riser to allow for (relatively) easy movement of the rack around the room as needed, for instance for maintnance or enhancements. The bottom front section also features further horizonal 2x4's to form a base for the heavy UPSes discussed in the next section.
|
||||||
|
|
||||||
|
The actual servers sit on pieces of angle iron cut to approximately 3 feet, which bridge the first and second sets of risers on each side, and secured by 2 heavy screws and washers on each riser. This provides an extremely stable support for even the heaviest servers I have, and allows for fairly easy maintenance without having to deal with traditional rails and their mounting points.
|
||||||
|
|
||||||
|
The outside of the entire rack is covered by thin veneer paneling to trap heat inside in a controlled way. On the left side, the back section forms a door which can be opened to provide access to the backs of the servers, cabling, and power connections.
|
||||||
|
|
||||||
|
I've gone through several airflow configurations to try to keep both the rack itself, and the room it's in, cooler. First, I attempted to directly exhaust the hot air out the adjoining window, but this was too prone to seasonal temperature variation to be useful. I then attempted to route the heat out the side of the rack to the front where it could be cooled by an air conditioner, but this proved ineffective as well. Finally, I moved to a simple, physics-powered solution whereby the top 6 inches of the rack is used to direct hot air, via a set of 4 fans in 2 pairs, towards the top front of the rack and out into the room; this solution works very well to keep the inside temperature of the rack to a relatively reasonable 35 degrees Celsius.
|
||||||
|
|
||||||
|
## Part Three: Cooling and Power
|
||||||
|
|
||||||
|
Continuing on from the rack exhaust, cooling inside the room is provided by a standalone portable 12000BTU air conditioner from Toshiba.
|
||||||
|
|
||||||
|
## Part Four: The Internet Connections and Colocation
|
||||||
|
|
||||||
|
## Part Five: The Network
|
||||||
|
|
||||||
|
## Part Six: The Bulk Storage Cluster and Backups
|
||||||
|
|
||||||
|
## Part Seven: The Hypervisor Cluster
|
||||||
|
|
||||||
|
## Part Eight: The "Infrastructure" VMs
|
||||||
|
|
||||||
|
## Part Nine: The Matrix/Synapse VMs
|
||||||
|
|
||||||
|
## Part Ten: The Other VMs
|
||||||
|
|
||||||
|
## Part Eleven: Diagrams!
|
||||||
|
|
||||||
|
## Part Twelve: A Video Tour
|
||||||
|
|
||||||
|
## Part Thirteen: The Future of the System
|
Before Width: | Height: | Size: 93 KiB After Width: | Height: | Size: 93 KiB |
Before Width: | Height: | Size: 687 KiB After Width: | Height: | Size: 687 KiB |
Before Width: | Height: | Size: 3.4 MiB After Width: | Height: | Size: 3.4 MiB |
@ -1,13 +1,14 @@
|
|||||||
+++
|
---
|
||||||
class = "post"
|
title: "Build a Raspberry Pi BMC"
|
||||||
date = "2017-02-10T01:35:38-05:00"
|
description: ""
|
||||||
tags = []
|
date: 2017-02-10
|
||||||
title = "Build A Raspberry Pi BMC"
|
tags:
|
||||||
type = "post"
|
- DIY
|
||||||
weight = 1
|
- Development
|
||||||
draft = false
|
- Systems Administration
|
||||||
|
---
|
||||||
|
|
||||||
+++
|
**NOTICE:** This project is long-since obsoleted. I never did complete it, and ended up just buying some IPMI-capable motherboards. I would receommend the various Pi-KVM solutions now available as much better, more robust replacements to this project.
|
||||||
|
|
||||||
IPMI BMCs are pretty ubiquitous in the datacenter and enterprise computing, because in a warehouse full of computers, finding and walking up to one just to reset it or check its console is quite daunting. The same goes for a home server: it may just be in my basement, but in a closed-up rack it becomes a huge hassle to manage a machine without IPMI. I try to get it on every motherboard I buy, but currently my Ceph nodes are running with motherboards that lack built-in IPMI. After an incident with one machine while I was on vacation, I finally decided that they needed remote management, and I decided to make my own BMC for them rather than waste money on replacement (IPMI-capable) motherboards.
|
IPMI BMCs are pretty ubiquitous in the datacenter and enterprise computing, because in a warehouse full of computers, finding and walking up to one just to reset it or check its console is quite daunting. The same goes for a home server: it may just be in my basement, but in a closed-up rack it becomes a huge hassle to manage a machine without IPMI. I try to get it on every motherboard I buy, but currently my Ceph nodes are running with motherboards that lack built-in IPMI. After an incident with one machine while I was on vacation, I finally decided that they needed remote management, and I decided to make my own BMC for them rather than waste money on replacement (IPMI-capable) motherboards.
|
||||||
|
|
||||||
@ -17,7 +18,7 @@ If you don't know what it is, the [Rapberry Pi](https://www.raspberrypi.org) is
|
|||||||
|
|
||||||
*(Pictured: A Raspberry Pi 1 model B)*
|
*(Pictured: A Raspberry Pi 1 model B)*
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## The hardware
|
## The hardware
|
||||||
|
|
||||||
@ -43,7 +44,7 @@ The power and reset switches are a little more complex. While you can direct the
|
|||||||
|
|
||||||
*(Pictured: the GPIO layout for a first-generation model-B Raspberry Pi)*
|
*(Pictured: the GPIO layout for a first-generation model-B Raspberry Pi)*
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### Serial - USB or TTL?
|
### Serial - USB or TTL?
|
||||||
|
|
||||||
@ -57,7 +58,7 @@ The one downside of this method is the lack of proper VGA graphics support. Your
|
|||||||
|
|
||||||
*(Pictured: the MAX3232 signal converter board)*
|
*(Pictured: the MAX3232 signal converter board)*
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### Cabling it up
|
### Cabling it up
|
||||||
|
|
||||||
@ -104,11 +105,11 @@ The finished product is a small board that keeps all the cabling neat and tidy i
|
|||||||
|
|
||||||
*(Pictured: The finished breadboard layout)*
|
*(Pictured: The finished breadboard layout)*
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
*(Pictured: the cabling of the Raspberry Pi BMC)*
|
*(Pictured: the cabling of the Raspberry Pi BMC)*
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## The software
|
## The software
|
||||||
|
|
||||||
@ -130,12 +131,7 @@ Finally we're able to set the host system's name (for display when logging in) v
|
|||||||
|
|
||||||
*(Pictured: an example session with `bmc.sh`)*
|
*(Pictured: an example session with `bmc.sh`)*
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|
||||||
*(Pictured: Debian Live via the serial console)*
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
|
|
||||||
## Conclusion
|
## Conclusion
|
||||||
@ -144,6 +140,6 @@ I hope you've found this post interesting and useful - if you have some IPMI-les
|
|||||||
|
|
||||||
*(Pictured: what you might have to do on a cruise ship without a BMC!)*
|
*(Pictured: what you might have to do on a cruise ship without a BMC!)*
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
If you have any questions or comments, shoot me an e-mail, or find me on various social media!
|
If you have any questions or comments, shoot me an e-mail, or find me on various social media!
|
Before Width: | Height: | Size: 109 KiB After Width: | Height: | Size: 109 KiB |
Before Width: | Height: | Size: 158 KiB After Width: | Height: | Size: 158 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 551 KiB After Width: | Height: | Size: 551 KiB |
@ -1,14 +1,11 @@
|
|||||||
+++
|
---
|
||||||
|
title: "Automating your garden hose for fun and profit"
|
||||||
class = "post"
|
description: "Building a custom self-hosted MQTT water shutoff and controlling it with HomeAssistant"
|
||||||
date = "2018-09-28T00:35:22-04:00"
|
date: 2018-09-28
|
||||||
tags = ["automation","gardening"]
|
tags:
|
||||||
title = "Automating your garden hose for fun and profit"
|
- DIY
|
||||||
description = "Building a custom self-hosted MQTT water shutoff and controlling it with HomeAssistant"
|
- Home Automation
|
||||||
type = "post"
|
---
|
||||||
weight = 1
|
|
||||||
|
|
||||||
+++
|
|
||||||
|
|
||||||
I love gardening - over the last couple years it's become a great summer pasttime for me. And after a backyard revamp, I'm planning a massive flower garden to create my own little oasis.
|
I love gardening - over the last couple years it's become a great summer pasttime for me. And after a backyard revamp, I'm planning a massive flower garden to create my own little oasis.
|
||||||
|
|
@ -1,14 +1,11 @@
|
|||||||
+++
|
---
|
||||||
Categories = ["Development","Systems Administration"]
|
title: "Building LibreOffice Online for Debian"
|
||||||
Tags = ["Development","Systems Administration"]
|
description: "How to build LibreofficeOnline against stock LibreOffice on Debian Stretch"
|
||||||
Description = "How to build LibreofficeOnline against stock LibreOffice on Debian Stretch"
|
date: 2017-07-07
|
||||||
date = "2017-07-07T12:44:53-04:00"
|
tags:
|
||||||
title = "Building LibreOffice Online for Debian"
|
- Debian
|
||||||
type = "post"
|
- Development
|
||||||
weight = 1
|
---
|
||||||
draft = false
|
|
||||||
|
|
||||||
+++
|
|
||||||
|
|
||||||
DISCLAIMER: I never did proceed with this project beyond building the packages. I can offer no helpful support regarding getting it running.
|
DISCLAIMER: I never did proceed with this project beyond building the packages. I can offer no helpful support regarding getting it running.
|
||||||
|
|
581
content/en/posts/debian-packaging-101/index.md
Normal file
@ -0,0 +1,581 @@
|
|||||||
|
---
|
||||||
|
title: "Building a Debian Package 101"
|
||||||
|
description: "It's not as confusing or complicated as you think"
|
||||||
|
date: 2022-12-02
|
||||||
|
tags:
|
||||||
|
- Debian
|
||||||
|
- Development
|
||||||
|
---
|
||||||
|
|
||||||
|
One of the most oft-repeated reasons I've heard for software not packaging for Debian and its derivatives it that Debian packaging is complicated. Now, the thing is, it can be. If you look at [the manual](https://www.debian.org/doc/manuals/maint-guide/index.en.html) or a reasonably complicated program from the Debian repositories, it sure seems like it is. But I'm here today to show you that it can be easy with the right guide!
|
||||||
|
|
||||||
|
My target audience for this post is anyone who has software they want to build, but who currently thinks that making a `.deb` is too complex, difficult, or not worth the effort. Hopefully, by the end of this post, you'll understand exactly how to do it and be able to implement your own Debian package in under 30 minutes.
|
||||||
|
|
||||||
|
If that sounds good, read on!
|
||||||
|
|
||||||
|
For simplicity's sake, I assume you're doing all this on a Debian system, or one of its derivatives like Ubuntu. Note that things like cross-architecture building are well outside our scope here, but such things are possible. Your package will match what you build it under, so if you want an Ubuntu 22.04 package, be sure to build it on an Ubuntu 22.04 system, etc.
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
Before starting, you'll need a few dependencies. First and foremost is anything you need to actually build your program; for a lot of things that's `build-essential` plus a few supplemental libraries, but it could include anything else.
|
||||||
|
|
||||||
|
Keep track of what build dependencies you need, because we'll need that list later on when creating the `control` file.
|
||||||
|
|
||||||
|
Next install `dpkg-dev`, `debhelper`, and `devscripts` packages, which provide the main Debian packaging tools and some helper programs. You might also want `quilt` if you plan to make package-specific patches to the code, but I don't cover `quilt` here.
|
||||||
|
|
||||||
|
## The Basics: Creating your initial `debian/` folder
|
||||||
|
|
||||||
|
Start with your source code in a directory, GIT repo, etc. To start you'll want all your code in the root level, so that you can build it right from there. This helps keep the complexity down.
|
||||||
|
|
||||||
|
Our first step is to build a basic, boilerplate `debian/` folder, which is a sub-directory at the root of the source code repository that provides the Debian packaging instructions. So run `mkdir debian` and continue.
|
||||||
|
|
||||||
|
Within that `debian` folder are a few key files that every build needs. I'll go through each one in turn, explaining what it does and how to write one. At the end, you'll be able to run `dpkg-buildpackage` to get your binary package.
|
||||||
|
|
||||||
|
## Boilerplate files (`compat`, `source/format`, and `source/options`)
|
||||||
|
|
||||||
|
These files define some basic configuration for the build system. Given how simple and boilerplate they are, I've collected all 3 under this heading.
|
||||||
|
|
||||||
|
`compat` defines the Debian packaging compatibility version, i.e. what version of `debhelper` the package supports. What version you support depends on how old the releases of Debian you want to support are, but `8` or `9` are good baselines.
|
||||||
|
|
||||||
|
The next two entries are under the sub-directory `source` within the `debian` folder.
|
||||||
|
|
||||||
|
`source/format` defines the package layout format. There are two main formats: `1.0` and `3.0`. Within `3.0`, `3.0 (quilt)` is the most common. Which you choose depends on how advanced you want to go here, but we'll stick with `1.0` as it's the simplest.
|
||||||
|
|
||||||
|
`source/options` defines some additional options that will be passed to `dpkg-source` when it builds your package. There's two main categories of entries here that I have used in my packages, though there are many more:
|
||||||
|
|
||||||
|
* `tar-ignore='<pattern>'`: One or more entries will define file patterns (Perl regular expressions) to ignore when creating the source tar archive. It's usually a good practice to ignore things like `.git*`, `*.deb`, and any temporary files or directories your build might produce.
|
||||||
|
|
||||||
|
* `extend-diff-ignore='<pattern>'`: One or more entries will define file patterns (Perl regular expressions) to ignore when when creating the diff of your source code. Generally you want to ignore any binary files in your source tree.
|
||||||
|
|
||||||
|
A good, safe default would be something like:
|
||||||
|
|
||||||
|
```
|
||||||
|
tar-ignore='*.deb'
|
||||||
|
tar-ignore='.git*'
|
||||||
|
extend-diff-ignore='.git*'
|
||||||
|
```
|
||||||
|
|
||||||
|
## The `copyright` file
|
||||||
|
|
||||||
|
The `copyright` file defines the copyright information for your package. Usually, for simple programs, this will just match your project's license.
|
||||||
|
|
||||||
|
The file is structured as follows:
|
||||||
|
|
||||||
|
```
|
||||||
|
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0
|
||||||
|
```
|
||||||
|
|
||||||
|
This line defines the copyright format. The 1.0 format specified here is usually sufficient. This is a link to the full manual of the contents of the `copyright` file, so for more advanced situations it is worth the read.
|
||||||
|
|
||||||
|
```
|
||||||
|
Upstream-Name: mypackage
|
||||||
|
```
|
||||||
|
|
||||||
|
This line specifies the upstream name of the program. It should match your program's name and the name of the source package. If you're building someone else's program and want to change the name to "Debianize" it, this would be the original name.
|
||||||
|
|
||||||
|
```
|
||||||
|
Source: https://github.com/aperson/myproject
|
||||||
|
```
|
||||||
|
|
||||||
|
This line provides a link to your source. It can be any URL you want, but you should provide something here.
|
||||||
|
|
||||||
|
Next is a newline, followed by one or more blocks:
|
||||||
|
|
||||||
|
```
|
||||||
|
Files: *
|
||||||
|
```
|
||||||
|
|
||||||
|
This line defines what file(s) this copyright entry belongs to. For a simple project all under one license, this can just be `*`; more advanced copyright situations (e.g. submodules, libraries) might require separate sections for each.. The `*` block should always be the last block; that is, define any more specific blocks first. If not `*`, this should be the relative path to the file(s) under the source repository.
|
||||||
|
|
||||||
|
```
|
||||||
|
Copyright: 2022 A. Person <aperson@email.tld>
|
||||||
|
```
|
||||||
|
|
||||||
|
This line defines the copyright year and name of the copyright owner (including email address in angle brackets). This is probably you unless you're packaging up someone else's code. While this email doesn't have to be valid, it should be in case a user wants to reach you about a copyright question, and will be shown in the information about the package.
|
||||||
|
|
||||||
|
```
|
||||||
|
License: GPL-3
|
||||||
|
```
|
||||||
|
|
||||||
|
This line, and subsequent lines prefixed with a single space, define the actual license of the files. The license name should be one of those found under `/usr/share/common-licenses` (e.g. `GPL-3`, or `Apache-2.0`). The subsequent lines should include the short version of the license text, i.e. what you would put at the top of your source files (not the full license text). Within this block, paragraph breaks should be delineated with `.` characters. At the bottom it's usually best to reference the aforementioned directory as a source of license text as these contain the full version of each license.
|
||||||
|
|
||||||
|
### A complete example
|
||||||
|
|
||||||
|
Here is a complete example of a `copyright` file for a GPL v3 program:
|
||||||
|
|
||||||
|
```
|
||||||
|
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||||
|
Upstream-Name: myprogram
|
||||||
|
Source: https://github.com/aperson/myproject
|
||||||
|
|
||||||
|
Files: *
|
||||||
|
Copyright: 2022 A. Person <aperson@email.tld>
|
||||||
|
License: GPL-3
|
||||||
|
This package is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, version 3.
|
||||||
|
.
|
||||||
|
This package is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
.
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <https://www.gnu.org/licenses/>
|
||||||
|
.
|
||||||
|
On Debian systems, the complete text of the GNU General
|
||||||
|
Public License version 3 can be found in "/usr/share/common-licenses/GPL-3".
|
||||||
|
```
|
||||||
|
|
||||||
|
### Separate 'debian' copyright
|
||||||
|
|
||||||
|
Sometimes, it might be ideal to use a different license for the actual 'debian' folder versus the original program source code. Why you might want to do this is up to you, but to do so simply create a `Files: debian` block before the `Files *` block to define your alternate packaging license.
|
||||||
|
|
||||||
|
## The `control` file
|
||||||
|
|
||||||
|
Now we're getting into the meat of the package. The `control` file defines your package, both the source component and the binary component(s). There are many available options here, but I'll provide only the most basic ones needed to build a functional package.
|
||||||
|
|
||||||
|
### The "source" package section
|
||||||
|
|
||||||
|
These entries define the source package information. The entries are structured as follows:
|
||||||
|
|
||||||
|
```
|
||||||
|
Source: myprogram
|
||||||
|
```
|
||||||
|
|
||||||
|
This line defines the name of the source package, and will usually match the name of the program.
|
||||||
|
|
||||||
|
```
|
||||||
|
Section: misc
|
||||||
|
```
|
||||||
|
|
||||||
|
This line defines the section of the repository that your application goes into. What you put here is pretty arbitrary unless you want your package to be included in the official Debian repositories, so go with `misc`.
|
||||||
|
|
||||||
|
```
|
||||||
|
Priority: optional
|
||||||
|
```
|
||||||
|
|
||||||
|
This line defines the priority of the package. Like the above entry, this only really matters if you're making an official package, so go with `optional`.
|
||||||
|
|
||||||
|
```
|
||||||
|
Maintainer: A. Person <aperson@email.tld>
|
||||||
|
```
|
||||||
|
|
||||||
|
This line defines who maintains the package (and thus, who to reach out for if help is needed by an end user. This uses the same format as the person entry from `copyright` above, and this format will be used again later as well.
|
||||||
|
|
||||||
|
```
|
||||||
|
Build-Depends: debhelper (>= 8),
|
||||||
|
libssl-dev,
|
||||||
|
somebuilddep
|
||||||
|
```
|
||||||
|
|
||||||
|
These lines define any build dependencies your package requires, i.e. what you installed in the very first section. You can safely exclude `dpkg-dev` (as this is implied), as well as `build-essential` (for the same reason), but include here any specific development libraries, additional programs, etc. that you might need to build the program. Note too the first line, which should usually be `debhelper` at `>=` the version you specified in `compat` above. This entry also demonstrates how to define specific version(s) of dependencies; `>=`/`<=` (greater than/less than or equal) are the most common, to specify minimum dependency versions, though other comparisons are possible in more advanced cases.
|
||||||
|
|
||||||
|
Entries in this list can be placed on one line, comma separated, or on separate lines as shown here. The final entry should not have a comma after it.
|
||||||
|
|
||||||
|
```
|
||||||
|
Standards-Version: 3.9.4
|
||||||
|
```
|
||||||
|
|
||||||
|
The version of the package standards that the package uses. I usually use `3.9.4` as a baseline for my own packages; the latest version as of writing is `4.6.1`.
|
||||||
|
|
||||||
|
```
|
||||||
|
Homepage: https://myproject.org
|
||||||
|
```
|
||||||
|
|
||||||
|
This line defines a URL to the homepage of your project.
|
||||||
|
|
||||||
|
### The "binary" package section(s)
|
||||||
|
|
||||||
|
These entries define the output binary package information. There should be one block for each binary package you produce from the single source package, though for a simple project there is a 1-to-1 relationship here. The entries are structured as follows:
|
||||||
|
|
||||||
|
```
|
||||||
|
Package: myprogram
|
||||||
|
```
|
||||||
|
|
||||||
|
This line defines the name of the package, usually the name of your program.
|
||||||
|
|
||||||
|
```
|
||||||
|
Architecture: any
|
||||||
|
```
|
||||||
|
|
||||||
|
This line defines the architecture that the package will support. For simple packaging, this should be `any` (the program can be built against any architecture that Debian supports) or `all` (for native cross-platform packages like Python code or documentation).
|
||||||
|
|
||||||
|
```
|
||||||
|
Depends: mypackagedependency (>= 1.0),
|
||||||
|
someotherdependency,
|
||||||
|
afinaldependency
|
||||||
|
Recommends: asoftdependency
|
||||||
|
```
|
||||||
|
|
||||||
|
These line defines any package relationships that the final package will have, formatted like the `Build-Depends` entry in the "source" section above. These are optional: if your program doesn't depend on any other (binary) packages at runtime, just leave it out, but usually you'll depend on *something*.
|
||||||
|
|
||||||
|
The `Depends` entries are strict: the package will refuse to install if any of these are missing (when using `dpkg --install`), and will pull them in automatically when using the package manager (e.g. `apt install`). Use this for any hard dependencies the program has.
|
||||||
|
|
||||||
|
The `Recommends` entries are malleable: the package will still install if these are missing, but this relationship exists to define anything that might be "nice to have" alongside your program. By default, `apt` *et al* will not install recommended packages, but will show them when installing the package.
|
||||||
|
|
||||||
|
```
|
||||||
|
Description: The oneline description of your program for 'apt search'
|
||||||
|
Some additional lines that will describe the program in more depth.
|
||||||
|
.
|
||||||
|
You may have multiple paragraphs here with . deliniators.
|
||||||
|
```
|
||||||
|
|
||||||
|
These lines provide a description of your package so users know what they're installing. The first line (along with the `Description:` label) is a short version that will be shown as output when running `apt search` and the like. Any additional lines provide more detail for use with `apt info`.
|
||||||
|
|
||||||
|
### A complete example
|
||||||
|
|
||||||
|
Here is a complete example of a basic `control` file for a simple program:
|
||||||
|
|
||||||
|
```
|
||||||
|
Source: myprogram
|
||||||
|
Section: misc
|
||||||
|
Priority: optional
|
||||||
|
Maintainer: A. Person <aperson@email.tld>
|
||||||
|
Build-Depends: debhelper (>= 8),
|
||||||
|
libssl-dev,
|
||||||
|
somebuilddep
|
||||||
|
Standards-Version: 3.9.4
|
||||||
|
Homepage: https://myproject.org
|
||||||
|
|
||||||
|
Package: myprogram
|
||||||
|
Architecture: any
|
||||||
|
Depends: mypackagedependency (>= 1.0),
|
||||||
|
someotherdependency,
|
||||||
|
afinaldependency
|
||||||
|
Recommends: asoftdependency
|
||||||
|
Description: The oneline description of your program for 'apt search'
|
||||||
|
Some additional lines that will describe the program in more depth.
|
||||||
|
.
|
||||||
|
You may have multiple paragraphs here with . deliniators.
|
||||||
|
```
|
||||||
|
|
||||||
|
## The `changelog` file
|
||||||
|
|
||||||
|
The changelog file defines the current, and any past, versions of your package, along with a (generally brief) changelog, as the name implies.
|
||||||
|
|
||||||
|
This file is important when releasing new versions: whatever entry is at the top of this file is the "current version" of your program, and will determine the version of the output package. Thus you will have to add a new entry to the top of this file each time you release a new version of your package.
|
||||||
|
|
||||||
|
It is required to have at least one entry here (to define the current version of the package), but also good practice to keep older versions in descending order for as long as feasible, so people can compare what changed between various versions of your program.
|
||||||
|
|
||||||
|
The entries are structured as follows:
|
||||||
|
|
||||||
|
```
|
||||||
|
mypackage (1.0-1) unstable; urgency=medium
|
||||||
|
```
|
||||||
|
|
||||||
|
The first line defines the values for the changelog entry, and is in a very specific format.
|
||||||
|
|
||||||
|
First is the name of the program, which *must* match the `Source:` entry in the `control` file.
|
||||||
|
|
||||||
|
Next is the version of the package enclosed in parentheses. This should be the real version of the program that you are building. The first part (before the `-`) defines the "upstream" version, so in this case, we're building version `1.0` of the program, corresponding to a hypothetical Git tag of `v1.0`. The second part (after the `-`) is the version of the *package*. This can be used to define multiple versions of the package that use the same underlying upstream version; unless you're doing complicated stuff involving delegating packaging, just set this to `-1` or `-0`, or leave it out altogether.
|
||||||
|
|
||||||
|
Next is the code-name of the release of the package; just set this to `unstable`. Note the semicolon after this.
|
||||||
|
|
||||||
|
Finally is the "urgency" of the package. This is used by `apt` to determine how "important" the update is, but can be pretty arbitrary. I usually use `urgency=medium` as a safe default.
|
||||||
|
|
||||||
|
```
|
||||||
|
* Here is a changelog entry
|
||||||
|
* Here is another changelog entry
|
||||||
|
```
|
||||||
|
|
||||||
|
The next section, separated from the first line by an extra newline, contains individual changelog entries. You must provide at least one explaining what's changed, but you can specify several as shown here. Each entry must be prefixed by two spaces then an asterisk (`*`) character before starting the entry. Standard formatting is to capitalize the first letter, keep it short and sweet, and end without a full stop (`.`); if you're using Git and [are writing good Git commit messages](https://cbea.ms/git-commit/), you can just use your Git commit titles here! What you put in each line is up to you, and you can include any metadata or information you might want. Finally note the trailing newline before the final line.
|
||||||
|
|
||||||
|
```
|
||||||
|
-- A. Person <aperson@email.tld> Fri, 02 Dec 2022 14:28:01 -0500
|
||||||
|
```
|
||||||
|
|
||||||
|
The final line of the changelog entry specifies who wrote the entry, again in a very specific format. The line begins with a single space followed by two dashes (`--`) then another space, followed by author in the standard name + email format (I did say it would come up again!), then two spaces, and finally an RFC Email date (i.e. the output of `date --rfc-email`) defining when the entry was written.
|
||||||
|
|
||||||
|
### A complete example
|
||||||
|
|
||||||
|
Here is a complete example of a single `changelog` file entry for version `1.0` of our simple program:
|
||||||
|
|
||||||
|
```
|
||||||
|
mypackage (1.0-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* Here is a changelog entry
|
||||||
|
* Here is another changelog entry
|
||||||
|
|
||||||
|
-- A. Person <aperson@email.tld> Fri, 02 Dec 2022 14:28:01 -0500
|
||||||
|
```
|
||||||
|
|
||||||
|
If we were to add version `1.1` of the program in the future, we would add it to the top, and the file would thus look like this (note the extra line between entries):
|
||||||
|
|
||||||
|
```
|
||||||
|
mypackage (1.1-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* This is a newer version after fixing a bug (GitHub #123)
|
||||||
|
|
||||||
|
-- A. Person <aperson@email.tld> Fri, 03 Dec 2022 18:28:01 -0500
|
||||||
|
|
||||||
|
mypackage (1.0-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* Here is a changelog entry
|
||||||
|
* Here is another changelog entry
|
||||||
|
|
||||||
|
-- A. Person <aperson@email.tld> Fri, 02 Dec 2022 14:28:01 -0500
|
||||||
|
```
|
||||||
|
|
||||||
|
### The `dch` helper program
|
||||||
|
|
||||||
|
The `devscripts` package provides a helper program to assist in automating changelog entries, named `dch`. In my experience, you have to change so much from the generated content (or set so many environment variables) as to not make it worthwhile, but is something to consider if you do a lot of packaging.
|
||||||
|
|
||||||
|
## The `rules` file
|
||||||
|
|
||||||
|
The `rules` file is a `make` script that defines how to build your package. This is the part that usually trips a lot of people up, because this file can get very complicated. However, for most simple programs using standard build tools, `dh` - the Debian build helper - automates a lot of the grunt work for you, and this file can thus be very simple.
|
||||||
|
|
||||||
|
The file is structured as follows; note that this is `make` format, so indentations *must* be a tab (`\t`) character, *not* spaces, and the file *must* be executable to work:
|
||||||
|
|
||||||
|
```
|
||||||
|
#!/usr/bin/make -f
|
||||||
|
```
|
||||||
|
|
||||||
|
The first line is a shebang line defining that this is a `make` script with the `-f` option.
|
||||||
|
|
||||||
|
```
|
||||||
|
export DH_VERBOSE = 1
|
||||||
|
```
|
||||||
|
|
||||||
|
This line sets verbosity when building the package, useful for troubleshooting.
|
||||||
|
|
||||||
|
```
|
||||||
|
MY_FILE := binary.out
|
||||||
|
```
|
||||||
|
|
||||||
|
This line defines a variable that can be used later in the script. I show this example here only to specify the format (note the `:=`); a simple program likely won't need any variables.
|
||||||
|
|
||||||
|
```
|
||||||
|
%:
|
||||||
|
dh $@
|
||||||
|
```
|
||||||
|
|
||||||
|
This section defines the basic rules for the build. The `%:` heading is "any stage"; there are about two dozen stages in a normal package build that can be defined, and `%` is the "wildcard" for all of them.
|
||||||
|
|
||||||
|
Next, the tab-indented line(s) specifies what commands happen during this stage. Note that each line here is executed in its own shell context, so if you were to e.g. `cd`, that would get lost on the next line. In this basic example though, all we do is pass all of the arguments for the stage on to the `dh` program.
|
||||||
|
|
||||||
|
And that's it! Really! If your program uses `./configure && make && make install` style installation, or `cmake`, or is a properly-formatted Python module, or really any "standard" build type, this is all you need to do. `dh` takes care of it all, automatically determining how to build the program, putting it in the right places, and giving you a package out the other side.
|
||||||
|
|
||||||
|
### Overriding build stages
|
||||||
|
|
||||||
|
Now, of course, you can do some more advanced things in this file as well. Any stage can be overridden by using an `override_dh_<stage>` section, which will replace this normal `dh $@` with whatever you specify. For example, lets say that `make clean` doesn't actually clean up all of our artifacts, so we want to define some custom cleanup that will happen as well. We can override the default `dh_auto_clean` step with the following to achieve this:
|
||||||
|
|
||||||
|
```
|
||||||
|
override_dh_auto_clean:
|
||||||
|
rm -f artifacts/out/$(MY_FILE)
|
||||||
|
dh $@
|
||||||
|
```
|
||||||
|
|
||||||
|
Note here that we also use the variable we defined above as an example; variable references in `make` are surrounded by normal brackets (i.e. `(`/`)`) and not curly braces (i.e. `{`/`}`) like in BASH.
|
||||||
|
|
||||||
|
Another common example is overriding `dh_auto_configure` to run a `./configure` script with special options. For example:
|
||||||
|
|
||||||
|
```
|
||||||
|
override_dh_auto_configure:
|
||||||
|
./configure --my-option-1 --my-option-1 \
|
||||||
|
--newlined-option
|
||||||
|
```
|
||||||
|
|
||||||
|
Note that this example doesn't include `dh $@`, so `dh` will not be executed for it. You can use this for completely manual control of a build stage if appropriate.
|
||||||
|
|
||||||
|
You have a lot of flexibility here, which is why `rules` files seem so complex. But don't be scared: start simple, see if it works, and only override if you find you *really* need it.
|
||||||
|
|
||||||
|
### Handling the pesky shell context
|
||||||
|
|
||||||
|
As mentioned above, each line runs in its own shell context. This is mostly relevant if you're moving around directories. So for example, this is *not* valid:
|
||||||
|
|
||||||
|
```
|
||||||
|
override_dh_auto_clean:
|
||||||
|
cd artifacts/out/
|
||||||
|
rm -f $(MY_FILE)
|
||||||
|
cd ../..
|
||||||
|
dh $@
|
||||||
|
```
|
||||||
|
|
||||||
|
Because that first `cd artifacts/out/` runs in its own shell context, the next line (`rm -f $(MY_FILE)`), in another context, is actually relative to the base directory, *not* the `artifacts/out/` directory! You can work around this by putting both commands on one line with a command separator (e.g. `&&` or `;`) like so:
|
||||||
|
|
||||||
|
```
|
||||||
|
override_dh_auto_clean:
|
||||||
|
cd artifacts/out/ && rm -f $(MY_FILE)
|
||||||
|
dh $@
|
||||||
|
```
|
||||||
|
|
||||||
|
And since context is discarded, you don't even need to worry about the `cd ../..` part; you will always be back at the root of the repository on the next line.
|
||||||
|
|
||||||
|
### In-built variables
|
||||||
|
|
||||||
|
One final note is a special variable that can be used, `$(CURDIR)`. This variable is a full path to the current directory (usually the root of the repository) and can be used for commands that need a full path, for example:
|
||||||
|
|
||||||
|
```
|
||||||
|
override_dh_auto_clean:
|
||||||
|
cd $(CURDIR)/artifacts/out/ && rm -f $(MY_FILE)
|
||||||
|
dh $@
|
||||||
|
```
|
||||||
|
|
||||||
|
There are several other in-built variables that you can use as well, but for simplicity, I won't cover them here.
|
||||||
|
|
||||||
|
### A complete example
|
||||||
|
|
||||||
|
Here is a complete example of the basic `rules` file, with some comments:
|
||||||
|
|
||||||
|
```
|
||||||
|
#!/usr/bin/make -f
|
||||||
|
|
||||||
|
# Be verbose during the build
|
||||||
|
export DH_VERBOSE = 1
|
||||||
|
|
||||||
|
# This variable contains a pesky file that 'make clean' won't remove
|
||||||
|
MY_FILE := binary.out
|
||||||
|
|
||||||
|
# Main debhelper entry
|
||||||
|
%:
|
||||||
|
dh $@
|
||||||
|
|
||||||
|
# Override dh_auto_clean to clean up MY_FILE
|
||||||
|
override_dh_auto_clean:
|
||||||
|
cd $(CURDIR)/artifacts/out/ && rm -f $(MY_FILE)
|
||||||
|
dh $@
|
||||||
|
```
|
||||||
|
|
||||||
|
## Installing files manually with `install`
|
||||||
|
|
||||||
|
Sometimes, and in fact quite often, you will have some static files that will need to be manually installed into the package, i.e. that your build process doesn't take care of automatically. For example, if you had a systemd service unit file called `myprogram.service` that needs to be installed.
|
||||||
|
|
||||||
|
These custom files can be defined in the `install` file, which tells the package build to add the files to the resulting package after the build is completed.
|
||||||
|
|
||||||
|
Each line in the file is structured as a source and then a destination (either a directory or filename), just like a `cp` or `mv` command.
|
||||||
|
|
||||||
|
The source is always relative to the root of the repository, while the destination is always relative to `/` on the target system. So using our `myprogram.service` example, we might put that file in `debian/conf/` and then have an entry in `install` like so:
|
||||||
|
|
||||||
|
```
|
||||||
|
debian/conf/myprogram.service lib/systemd/system/
|
||||||
|
```
|
||||||
|
|
||||||
|
This will ensure that the `myprogram.service` is installed to `/lib/systemd/system/myprogram.service`. This is smart: if the destination is known to be a directory, you don't need the trailing `/` (though adding it makes it clear), otherwise it will treat it as a filename.
|
||||||
|
|
||||||
|
### `install` shenanigans: a build-less package
|
||||||
|
|
||||||
|
This file also allows shenanigans if you want to create a "source" package that doesn't actually do any "building", just moves files around. You could for example have a `rules` file that does nothing:
|
||||||
|
|
||||||
|
```
|
||||||
|
#!/usr/bin/make -f
|
||||||
|
|
||||||
|
%:
|
||||||
|
/bin/true
|
||||||
|
```
|
||||||
|
|
||||||
|
And then use `install` to just copy a bunch of files into place:
|
||||||
|
|
||||||
|
```
|
||||||
|
src/myprogram.py /usr/bin/myprogram
|
||||||
|
```
|
||||||
|
|
||||||
|
This can be useful for things like pure documentation or a collection of scripts that are entirely static.
|
||||||
|
|
||||||
|
### An `install` per package
|
||||||
|
|
||||||
|
While not explicitly covered here, `control` lets you make multiple binary packages out of one source package. It can thus be useful to have separate `install` lists for each binary package. To do this, you simply start the filename with the name of the binary package (i.e. what is defined in `Package:` in the `control` file) followed by `.install`. For example, you could have `mypackage.install` and `mypackage-docs.install` which install different sets of files.
|
||||||
|
|
||||||
|
## The `conffiles` file
|
||||||
|
|
||||||
|
Sometimes, you might have configuration files shipped with your program that you want users to be able to edit themselves, and that won't be (automatically) overwritten by a new version of your package. You can handle this with the `conffiles` file.
|
||||||
|
|
||||||
|
By default Debian will treat any file under `/etc` as a `conffile`, so you don't need to explicitly define these. Thus, if your program follows the Linux filesystem hierarchy standard, you don't need this file.
|
||||||
|
|
||||||
|
However, if you have configuration files elsewhere on the system, you should define them in this file, one file per line.
|
||||||
|
|
||||||
|
The `conffiles` of a program are treated specially during a package removal. `apt remove` will not remove them by default, in order to preserve the configuration of a package; you must use `apt purge` to remove any defined `conffiles`, so keep this in mind if you want to define them.
|
||||||
|
|
||||||
|
## Controlling installation and removal with maintainer scripts
|
||||||
|
|
||||||
|
When your package is installed on a user system, it can often be useful to do "things" to the system. A canonical example would be creating a service user and enabling our example `myprogram.service` unit on install, then deleting the service unit and user when the package is removed.
|
||||||
|
|
||||||
|
There are 4 types of maintainer scripts that can be specified. Each script is a `/bin/sh` script (starting with a `#!/bin/sh` shebang) which can then do arbitrary things to the system. They do not need to be executable in the source repository, but will be once installed by the package.
|
||||||
|
|
||||||
|
Each script has `set -o errexit` enabled by default; thus any failure of any step will be a fatal error, and will terminate the configuration (and, for `pre` scripts, the remaining installation) of the package, so be careful to explicitly "catch" errors with `||` as needed. Note too that the scripts run as `root`, so be very careful here!
|
||||||
|
|
||||||
|
* `preinst` runs during package installation, before the actual files of the program are installed. You can use it to check the sanity of the system or other similar tasks, though this file is likely the least-used.
|
||||||
|
|
||||||
|
* `postinst` runs during package installation, after the actual files of the program are installed. This is the most common maintainer script, often used to configure services, add users, `chown` directories, etc.
|
||||||
|
|
||||||
|
* `prerm` runs during package removal, before the actual files of the program are removed. This is the second most common maintainer script, often used to de-configure services, remove users, remove created directories, etc.
|
||||||
|
|
||||||
|
* `postrm` runs during package remove, after the actual files of the program are removed. Some tasks in `prerm` could likely also go in `postrm`, but where you put tasks depends on the specifics of your program and what the script is doing, e.g. stop servers in `prerm` but remove directories in `postrm`.
|
||||||
|
|
||||||
|
In very simple programs, you might not need any of these scripts, or might only need one or two of them. For our example we'll only need `postinst` and `prerm` to handle our service and user.
|
||||||
|
|
||||||
|
Thus we would have a `postinst` as follows:
|
||||||
|
|
||||||
|
```
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Create the user and set their home to /var/lib/myprogram, shell /usr/bin/nologin to prevent login
|
||||||
|
useradd \
|
||||||
|
--no-user-group \
|
||||||
|
--create-home \
|
||||||
|
--home-dir /var/lib/myprogram \
|
||||||
|
--shell /usr/bin/nologin \
|
||||||
|
--group daemon \
|
||||||
|
--system \
|
||||||
|
myprogram
|
||||||
|
|
||||||
|
# Enable and start the service
|
||||||
|
systemctl enable --now myprogram.service
|
||||||
|
|
||||||
|
# Explicitly exit 0
|
||||||
|
exit 0
|
||||||
|
```
|
||||||
|
|
||||||
|
And a `prerm` as follows:
|
||||||
|
|
||||||
|
```
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Disable and stop the service
|
||||||
|
systemctl disable --now myprogram.service
|
||||||
|
|
||||||
|
# Remove the user
|
||||||
|
userdel myprogram
|
||||||
|
|
||||||
|
# Clean up the data directory (don't worry about program files, 'dpkg' handles that!)
|
||||||
|
rm -rf /var/lib/myprogram
|
||||||
|
|
||||||
|
# Explicitly exit 0
|
||||||
|
exit 0
|
||||||
|
```
|
||||||
|
|
||||||
|
### Maintainer scripts per package
|
||||||
|
|
||||||
|
Like the `install` file above, these maintainer scripts can be defined per-binary-package, using the same `<package name>.<script>` format, if your package requires it.
|
||||||
|
|
||||||
|
### Don't do sketchy things in maintainer scripts!
|
||||||
|
|
||||||
|
Finally I want to point out to not do sketchy things in maintainer scripts. 2 years ago, the Raspberry Pi Foundation [abused their maintainer scripts in a critical package](https://github.com/RPi-Distro/raspberrypi-sys-mods/commit/655cad5aee6457b94fc2336b1ff3c1104ccb4351) [to install a completely unrelated repository for Microsoft VS Code](https://www.reddit.com/r/linux/comments/lbu0t1/microsoft_repo_installed_on_all_raspberry_pis/) [without any obvious traces in the usual Debian places](https://hothardware.com/news/raspberry-pi-microsoft-repository-phones-home-added-pi-os) (i.e. anywhere visible with `dpkg -L`/`apt-file search`/etc.)
|
||||||
|
|
||||||
|
DO NOT do this, EVER. Maintainer scripts are NOT for adding files to the system; that's what `install` and the build process are for, which allow the files installed by packages to be tracked by the `dpkg` system. You could perhaps make a case for modifying files in maintainer scripts, but adding new files or trying to do anything "trixy" is verboten, and certainly do not do what the RPF did. Abuse of maintainer scripts like this not only destroys user trust, but it actively hides changes to the system from the package manager, and prevents these entries from being managed and modified in the future by new package versions. It's a horrible practice all around. Use maintainer scripts only to do the bare minimum tasks needed to ensure your package will work and to clean up after it, nothing more.
|
||||||
|
|
||||||
|
## Building your package
|
||||||
|
|
||||||
|
Now that you've prepared your `debian` folder and package configuration, it's time to actually build your new package! In the root of your source repository, run the following command:
|
||||||
|
|
||||||
|
```
|
||||||
|
dpkg-buildpackage
|
||||||
|
```
|
||||||
|
|
||||||
|
This will build the package for you. You should get 5 files out of the build, one level higher than your current directory (i.e. at `../`):
|
||||||
|
|
||||||
|
* `mypackage_1.0-1_amd64.deb`: The actual binary package. The version and architecture are auto-populated based on the build.
|
||||||
|
|
||||||
|
* `mypackage_1.0-1_amd64.buildinfo`: A file containing information on the build, including checksums, dependencies, environment, etc.
|
||||||
|
|
||||||
|
* `mypackage_1.0-1_amd64.changes`: A file containing information about the package including changelog, checksums, and the description.
|
||||||
|
|
||||||
|
* `mypackage_1.0-1.dsc`: The Debian source package information.
|
||||||
|
|
||||||
|
* `mypackage_1.0-1.tar.gz`: An archive of the source for use with the `.dsc` file.
|
||||||
|
|
||||||
|
You can then install your `.deb` or add it to a repository manager like `reprepro`.
|
||||||
|
|
||||||
|
If something went wrong, that's OK! It's common to have errors the first time you try to build a package. Either errors in `rules`, parts that don't build right, typos, etc. Luckily the `dpkg-buildpackage` command is very verbose and shows, in real-time, all the build steps that are occurring. Pay close attention to what failed and tweak your scripts or configuration to match, and try again. Once you're at this stage, and assuming that your `dh_auto_clean` is actually cleaning everything up properly, it's safe to re-run the build as many times as needed to get it working - and if it isn't, the command will complain and tell you about it, so you're getting plenty of feedback to adjust your `rules` to get it to work.
|
||||||
|
|
||||||
|
Happy building!
|
130
content/en/posts/fixing-bad-trackpoints/index.md
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
---
|
||||||
|
title: "Fixing a Pesky Trackpoint"
|
||||||
|
description: "Stop your mouse moving randomly on a Thinkpad while preserving the buttons"
|
||||||
|
date: 2023-01-27
|
||||||
|
tags:
|
||||||
|
- DIY
|
||||||
|
- Technology
|
||||||
|
---
|
||||||
|
|
||||||
|
Today's post is a fairly short one. I've used Thinkpads for quite a while, first a T450s, then a T495s. I'm a huge fan of them, even the current generations. One thing I especially like is the button layout: because of the trackpoint (a.k.a. the "nub" mouse pointer), I get an extra set of physical buttons above my trackpad, including a middle mouse button. I find these buttons absolutely invaluable to my minute-to-minute usage of my laptop.
|
||||||
|
|
||||||
|
The problem began when I had to replace my T495s keyboard due to a fault. I needed a replacement quick, so official Lenovo parts were out. I ended up settling on a relatively cheap Amazon replacement from an off-brand. While the keyboard itself was relatively fine, I was almost immediately struck by a major problem, and one that seems to plague many Thinkpad users: the mouse would move by itself due to the faulty sensor in the trackpoint. This is often called "trackpoint drift".
|
||||||
|
|
||||||
|
This is an extremely annoying condition, since it not only moves the mouse in an unwanted way, but can often completely override the trackpad input. So I wanted to find a solution to stop this. Luckily for me, I don't actually use the trackpoint for it's mouse movement functions at all, so my first thought turned to disabling it entirely.
|
||||||
|
|
||||||
|
The problem is that, of course, this thing is just a mouse. If you turn off the trackpoint, you also turn off its buttons. So that option was completely out.
|
||||||
|
|
||||||
|
Next, I did some searching on ways to disable just the mouse functionality while retaining the buttons. This is much harder than you might think (or, is exactly as hard as you may think, depending on perspective).
|
||||||
|
|
||||||
|
Luckily though I was able to stumble upon [a random Arch Linux forums thread](https://bbs.archlinux.org/viewtopic.php?id=252636) where someone posted a hacky (elegant) solution to this. Specifically, post #6 from the user "k395" mentions a solution he came up with that leverages the `evtest` command (Debian package `evtest`) to capture the mouse events from the device, and then use a Perl wrapper to the `xdotool` command (Debian package `xdotool`) to manually generate the appropriate mouse button events. What a solution!
|
||||||
|
|
||||||
|
```shell
|
||||||
|
sudo evtest --grab /dev/input/event21 | perl -ne 'system("xdotool mouse".($2?"down ":"up ").($1-271)) if /Event:.*code (.*) \(BTN.* value (.)/'
|
||||||
|
```
|
||||||
|
*"k395"'s one-liner solution*
|
||||||
|
|
||||||
|
I had to do a bit of modification here though. First of all, I needed to determine exactly what `/dev/input/event` node was the one for my trackpoint. Luckily, running `evtest` with no arguments enters an interactive mode that lets you see what each event node maps to. Unfortunately I haven't found a way to get this programatically, but these seem to be stable across reboots so simply grabbing the correct value is sufficient for me. In my case, the node is `/dev/input/event6` for the `Elantech TrackPoint`.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ sudo evtest
|
||||||
|
No device specified, trying to scan all of /dev/input/event*
|
||||||
|
Available devices:
|
||||||
|
/dev/input/event0: AT Translated Set 2 keyboard
|
||||||
|
/dev/input/event1: Power Button
|
||||||
|
/dev/input/event2: Lid Switch
|
||||||
|
/dev/input/event3: Video Bus
|
||||||
|
/dev/input/event4: Sleep Button
|
||||||
|
/dev/input/event5: Power Button
|
||||||
|
/dev/input/event6: ETPS/2 Elantech TrackPoint
|
||||||
|
/dev/input/event7: ETPS/2 Elantech Touchpad
|
||||||
|
/dev/input/event8: PC Speaker
|
||||||
|
/dev/input/event9: ThinkPad Extra Buttons
|
||||||
|
/dev/input/event10: HD-Audio Generic HDMI/DP,pcm=3
|
||||||
|
/dev/input/event11: HD-Audio Generic HDMI/DP,pcm=7
|
||||||
|
/dev/input/event12: HD-Audio Generic HDMI/DP,pcm=8
|
||||||
|
/dev/input/event13: Integrated Camera: Integrated C
|
||||||
|
/dev/input/event14: Integrated Camera: Integrated I
|
||||||
|
/dev/input/event15: HDA Digital PCBeep
|
||||||
|
/dev/input/event16: HD-Audio Generic Mic
|
||||||
|
/dev/input/event17: HD-Audio Generic Headphone
|
||||||
|
Select the device event number [0-17]: ^C
|
||||||
|
```
|
||||||
|
*Getting the list of event inputs for my system*
|
||||||
|
|
||||||
|
But that wasn't the only issue. Unfortunately this basic implementation lacks support for the *middle* mouse button, and given that I use it quite extensively (for Linux middle-button quickpaste, closing tabs in Firefox, etc.), I needed that functionality.
|
||||||
|
|
||||||
|
This prompted me to rewrite the Perl-based one-liner into a slightly easier to read Python version, and implemented middle button support as well. I also added a bit of debouncing to avoid very rapid presses resulting in 2 `xdotool` events in very rapid succession. I then put everything together into a script which I called `disable-trackpoint`.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
#!/bin/bash
|
||||||
|
set -o xtrace
|
||||||
|
|
||||||
|
# We assume display 0 on the laptop
|
||||||
|
export DISPLAY=:0
|
||||||
|
# Event ID found via evtest
|
||||||
|
event_id=6
|
||||||
|
|
||||||
|
# Grab events and pipe to our xdotool parser
|
||||||
|
/usr/bin/evtest --grab /dev/input/event${event_id} | /usr/bin/python3 -c '
|
||||||
|
from os import system
|
||||||
|
from sys import stdin
|
||||||
|
from time import sleep
|
||||||
|
from re import search, sub
|
||||||
|
last_time = 0.0
|
||||||
|
for line in map(str.rstrip, stdin):
|
||||||
|
if search(r"^Event", line) and search(r"EV_KEY", line):
|
||||||
|
event = line.split()
|
||||||
|
time = float(event[2].strip(","))
|
||||||
|
button = sub(r"\W+", "", event[8])
|
||||||
|
action = event[10]
|
||||||
|
|
||||||
|
# Debounce button presses to 0.05 seconds
|
||||||
|
if action == "1":
|
||||||
|
if (time - 0.05) < last_time:
|
||||||
|
continue
|
||||||
|
last_time = time
|
||||||
|
|
||||||
|
# Action 1 is a "down" (press), 0 is an "up" (release)
|
||||||
|
if action == "1":
|
||||||
|
cmd = "mousedown"
|
||||||
|
else:
|
||||||
|
cmd = "mouseup"
|
||||||
|
|
||||||
|
# Buttons generally map this way: Left mouse is 1, middle is 2, right is 3, wheel up is 4, wheel down is 5.
|
||||||
|
if button == "BTN_LEFT":
|
||||||
|
btn = "1"
|
||||||
|
elif button == "BTN_MIDDLE":
|
||||||
|
btn = "2"
|
||||||
|
elif button == "BTN_RIGHT":
|
||||||
|
btn = "3"
|
||||||
|
|
||||||
|
# Run xdotool with cmd and btn
|
||||||
|
system(f"/usr/bin/xdotool {cmd} {btn}")
|
||||||
|
'
|
||||||
|
```
|
||||||
|
*The disable-trackpoint script*
|
||||||
|
|
||||||
|
There is one major downside here: this script does not function properly under Wayland. It seems to work but button presses are mapped to incorrect windows. You must use Xorg for this to work. For me that's not a huge deal as I've never really found much benefit to one over the other, but it's worth noting if you try this yourself.
|
||||||
|
|
||||||
|
Finally, I set this script to run automatically in a systemd unit file which will start it on boot and ensure it keeps trying to start until the display is initialized.
|
||||||
|
|
||||||
|
```systemd
|
||||||
|
[Unit]
|
||||||
|
Description = Fix trackpoint problems by disabling it
|
||||||
|
Wants = multi-user.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type = simple
|
||||||
|
ExecStart = /usr/local/sbin/disable-trackpoint
|
||||||
|
Restart = on-failure
|
||||||
|
RestartSec = 5
|
||||||
|
StartLimitInterval = 5
|
||||||
|
StartLimitBurst = 99
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy = multi-user.target
|
||||||
|
```
|
||||||
|
*The disable-trackpoint service unit (at `/etc/systemd/system/disable-trackpoint.service`)*
|
||||||
|
|
||||||
|
One `systemctl enable` later, and there we go: I have a disabled trackpoint but with enabled buttons, and can finally stop chasing my mouse cursor across the screen! While this is certainly a dirty hack, spawning a lot of processes, it does seem to work for me and hopefully someone else too.
|
BIN
content/en/posts/gamifying-my-drumming/blackpill-hat-wiring.jpg
Normal file
After Width: | Height: | Size: 124 KiB |
137
content/en/posts/gamifying-my-drumming/index.md
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
---
|
||||||
|
title: "Gamifying My Drumming, or: Rock Band 3 with an Alesis Strike Pro"
|
||||||
|
description: "How I connected my electronic drums to a PS3 to play Rock Band 3, with full hi-hat support"
|
||||||
|
date: 2023-05-09
|
||||||
|
tags:
|
||||||
|
- DIY
|
||||||
|
- Technology
|
||||||
|
- Music
|
||||||
|
---
|
||||||
|
|
||||||
|
## The Backstory
|
||||||
|
|
||||||
|
I've been a drummer for over 2 decades, since I was 14. As part of my youthful musical exploration journey, I got a very old basic drumkit from my grandfather, who was a big band drummer during his heyday, and I spent some time learning swing beats and trying to emulate some of the drummers I had come to idolize (mostly, Neil Peart). In Grade 10 I auditioned for our high school jazz band on guitar, and while I wasn't successful there, almost on a whim the band director suggested I try the drums too, since he knew from our Grade 9 class that I had excellent rhythm. I pulled out those swing beats my grandfather had taught me, and in contrast to the dudes coming in and playing punk rock rhythms, he picked me handily.
|
||||||
|
|
||||||
|
With my new-found purpose in drumming, I got myself (read: my parents got me) a basic Tama drumkit that I used for the next 10 years, slowly adding pieces and cymbals (mostly cymbals), including my favourite addition: a DW double kick pedal I got for my 21st birthday. As much as I loved this kit, as anyone who's ever lived with (or near) a drummer knows, it's a loud hobby. As I moved forward in my career in my mid-to-late 20's, I found I had less and less time to bang out a drum session during reasonable hours, so eventually to save space I put away the kit.
|
||||||
|
|
||||||
|
A few years later I had moved on to a new job, working a 13:00-21:00 shift and getting home around 22:45 every night. After having stuck to the bass and keys for a few years at that point, I thought seriously - using my newfound pay raise - about getting an electronic drumset, so I could play at any time and expand my soundscapes with near infinite variety using samples. I eventually settled on the Alesis Strike Pro, which really is a fantastic kit for the cost. I won't go too deep into the features or specs here, but suffice to say that aside from a few quirks, I still love the thing over 5 years later!
|
||||||
|
|
||||||
|
## The Problem
|
||||||
|
|
||||||
|
But, the problem is, not drumming for nearly 5 years took an absolute toll on my skills. Before, I could easily play for an hour or more solid, doing back-to-back-to-back Rush, Dream Theater, Porcupine Tree, and other demanding songs, with nary a care in the world. But after the break, my endurance was absolutely shot - sometimes I could barely finish a song before my arms would "give out", and my general skill had also taken a dive, especially around double-kick and fast fills.
|
||||||
|
|
||||||
|
There was also an issue with what I'll call "active feedback" on the Strike. With a real drumkit, I was able to put in earbuds for the music I was listening to, and the sheer sound of the drums would permeate me physically and around the earbuds, and I ended up with a perfect "mix" most of the time without being overly loud in my ears. But with the Strike, being purely electronic audio, it was very hard to find a mix that worked without either blowing out my eardrums or it being very hard to hear myself.
|
||||||
|
|
||||||
|
In short, I was stuck in a rut and a catch-22: to improve, I needed the motivation to really play, but I had little motivation to play because I had lost so much of that skill and it was so hard to hear when I played. So, for most of the 5 years I've had the Alesis Strike Pro, it sat idle, barely being played and collecting a nice layer of dust that is *very* hard to remove from the rubber cymbals.
|
||||||
|
|
||||||
|
As further motivation, the COVID-19 pandemic did an absolute number on me personally and health-wise. 2+ years of working from home with very little activity gave me a whole host of health problems, including a significant weight increase, high blood pressure, and anxiety that revolves around (causing and caused by) "left side numbness" as I put it. By early 2022 I was a complete wreck, suffered a serious mental health crisis that still hasn't fully resolved over a year later, and I really needed a way to get myself back into some semblance of shape.
|
||||||
|
|
||||||
|
## The Solution: Gamify Drumming
|
||||||
|
|
||||||
|
Drumming is *excellent* exercise. Even if you're just playing basic beats, you're doing cardio, strength training on at least 2, maybe 3 or even 4, limbs, and you can work up a sweat fairly easily. So I knew what I needed to do: I needed to actually *play* my drums. But how?
|
||||||
|
|
||||||
|
Well, there was another thing I did a lot of in my early-to-mid 20's: Rock Band! I love this game, even today. Playing Rock Band drums was pretty close to a real drumkit in terms of workout, and was always fun for me, even solo. I still had all my gear kicking around, and a few months ago my good friend suggested we bust out the game for a small gathering of friends, which was a smashing success. But the fake little plastic drumkit has a lot of pain points: the kick pedal has no rebound and is flimsy and easily broken, the positions of the drums are wacky, and hitting them hard (as I'm wont to do) kills them very quickly. This really got me thinking: could I play Rock Band with my Strike? It would solve all the problems, in both directions: I'd get *visual* feedback for my playing, no audio mixing issues, and I could work up to harder songs and longer sessions over time, while also letting me play the game on a real kit with real positioning and playing feedback (proper kick rebound, drums that didn't feel like a rubber mat, etc.). So I went looking for how to do this.
|
||||||
|
|
||||||
|
It turns out I'm definitely nowhere near the first, and I definitely won't be the last. So, the rest of this blog post will detail my setup, how I got it working, the parts I used, and the challenges I've faced with the Strike, with an eye towards helping others do this as well.
|
||||||
|
|
||||||
|
## Part Zero: The PlayStation 3
|
||||||
|
|
||||||
|
I've never been much of a gamer, even going back to my childhood. We had a complete mishmash of consoles over the years (Sega Saturn, then XBox, then PS3), and for the PS3 I think the most we ever owned was 3 games: LittleBigPlanet 1 & 2 and Rock Band 3. But my PS3 still worked perfectly, and as luck would have it, it was an early Slim model that was fully compatible with modding/jail-breaking so I could use RB3 Deluxe and custom songs. I won't detail that part in this blog post, but I was able to jailbreak, reload, and put custom songs onto my PS3 in about an afternoon's worth of work.
|
||||||
|
|
||||||
|
Then, as luck would have it, my sister told me that she actually had an old spare PS3 from an ex who had abandoned it with her before they broke up. Even better it was an original fat model, though alas not one with native PS2 support and NAND flash. Further, her fiancé had an older 42" Samsung TV I could use. In my head I jumped right to the idea of having a dedicated PS3 and TV for my drum area so I wouldn't have to move anything around: I could just sit down and play! I got all the pieces, fully cleaned and re-pasted the PS3, set up the TV, repositioned my drums, and got to work with the setup.
|
||||||
|
|
||||||
|
## Part One: Rock Band 3 Pro
|
||||||
|
|
||||||
|
The first step of this is Rock Band Pro mode. Introduced in Rock Band 3, pro mode is designed to give a fully "authentic experience" in playing the instruments. Pro guitar/bass feature a full-fret plastic guitar (versus just 5 buttons), pro keys has you play actual notes over a 2 octave range, and pro drums adds support for 3 cymbals in addition to the "toms"/pads.
|
||||||
|
|
||||||
|
As part of Pro mode, Mad Catz made the "Rock Band Pro MIDI adapter", which is pretty much exactly what it sounds like: you can input MIDI from an instrument into it, and it will "convert" it into the signals that Rock Band's Pro mode can handle. It works with virtually anything as long as you send the right MIDI notes, and doing Pro mode with electronic drums is of course one of the supported options.
|
||||||
|
|
||||||
|
I got the Wii version of the adapter, because according to much of the community, this was the best option as it was widely available and could be easily modified (by removing a resistor) to support the PS3, while costing up to 1/3 of the price of the PS3 version, the only limitation being a lack of shoulder buttons. So I ordered one from Amazon along with a MIDI cable and hooked it up. I then recalibrated the Alesis head module to output the specific MIDI notes that the adapter was looking for (documented in the manual) for each drum and cymbal.
|
||||||
|
|
||||||
|
And it worked!
|
||||||
|
|
||||||
|
## Part Two: The Hi-Hat
|
||||||
|
|
||||||
|
But, there were a couple issues I had. Well, OK, really just one issue that wasn't "me": the Hi-Hat.
|
||||||
|
|
||||||
|
See, Rock Band 3 Pro mode for the drums comes with a "Hi-Hat Pedal" mode. They would sell you a second pedal you could use as either a second kick drum or the "hi-hat pedal", and there is an option in the game to turn this mode on. Problem is, this mode doesn't do *jack*. It does nothing to affect the gameplay or the charts whatsoever.
|
||||||
|
|
||||||
|
Now why might that be a problem? Well, as a convention, Rock Band Pro drum charts use the Yellow Cymbal (hereafter YC) for a closed hi-hat note, and sometimes a secondary or tertiary crash. Then they use the Blue Cymbal (BC) for a ride note, a secondary or tertiary crash, and, most importantly, for an open hi-hat note. But only sometimes.
|
||||||
|
|
||||||
|
What this means is that a fairly common drum pattern of closed and open notes looks something like this (YC, BC, Ki[ck], Sn[are]):
|
||||||
|
|
||||||
|
```
|
||||||
|
YC BC YC BC YC BC YC ...
|
||||||
|
Ki Sn Ki Sn ...
|
||||||
|
```
|
||||||
|
|
||||||
|
On a real drumkit, this is played with the hi-hat pedal opening and closing the hat on each 8th note. No moving between arm positions, just use of the left foot. It's so basic it's often one of the first "exotic" beats that people learn. Further there's often little open hi-hat splashes that occur inside other beats, which are trivial on a drumkit.
|
||||||
|
|
||||||
|
But because of the complete lack of functionality of the "Hi-hat pedal mode", you're forced to play this in Rock Band on two different cymbals. Now, on the tiny plastic Rock Band kit this is annoying but manageable, since your arm only has to move about 10-20 degrees and about 12-18 inches. But on a real kit, this is functionally impossible to do accurately and comfortably at any amount of speed. It's a breaking feature, and I really wanted to solve this.
|
||||||
|
|
||||||
|
Now, many *low-end* drumkits have a workaround for this. You could simply have the drum head unit send a different note, specifically a YC note, for the hi-hat when it's closed, and a BC note for when it's open. Great!
|
||||||
|
|
||||||
|
But, the problem is, that's only for *low-end* kits. See that method of doing things isn't flexible for doing "real things" with DAWs or sequencers or what have you. On higher end kits - and the Alesis Strike Pro is a very high-end kit - what is done instead is to send a single "note" for the hi-hat hit itself, and then also send MIDI CC#4 (Control Channel #4) events containing the position of the pedal. This gives the maximum flexibility for audio equipment to handle the signal. And you can't switch off this mode on the drum kit itself; you're stuck with this mode of operation.
|
||||||
|
|
||||||
|
Now here's the craziest thing: Rock Band 3 can accept that CC#4 signal! In fact, it's what the Hi-Hat pedal in the game is mapped to! But because the feature isn't actually implemented, it's useless outside of the "freestyle" mode or fills (which I turn off myself); it doesn't affect the chart or rewrite the notes for you as it "should" (at least, as I think it should have...). A dead end, so I thought.
|
||||||
|
|
||||||
|
## Part Three: An Arduino and a MIDI Shield
|
||||||
|
|
||||||
|
I asked around a few places about this, and I got answers ranging from "why would you want that?" (clearly not a drummer) to "it's impossible". But I knew it wasn't. The solution seemed fairly obvious to me: if I could somehow read the MIDI signal as it was coming out of the drumkit, and, using the CC#4 signal as a guide, rewrite the Hi-Hat note based on the pedal position, I could *fake* a simple on/off hi-hat signal mode.
|
||||||
|
|
||||||
|
Enter the [SparkFun MIDI Shield for the Arduino](https://www.sparkfun.com/products/12898)! This shield gives you MIDI-IN and MIDI-OUT ports and interfaces with the internal serial bus of the Arduino. And [there is a fully feature-complete library for it as well](https://github.com/FortySevenEffects/arduino_midi_library), allowing one to easily build MIDI functionality in the Arduino IDE.
|
||||||
|
|
||||||
|
All the pieces came together for me: I just had to write a bit of conditional code that would read in the MIDI CC#4 events, track the hi-hat "openness" state, handle nodes asynchronously, and rewrite the YC signal to be a BC signal whenever the hi-hat was opened.
|
||||||
|
|
||||||
|
As part of this, I leveraged the Pro MIDI adapter's ability to map multiple notes to each game note, so I would send note 22 for the Hi-Hat yellow cymbal, but send note 26 for the Crash yellow cymbal, so they could operate independently. I'd then rewrite only note 22 events based on the pedal, so the crash would always work while the hi-hat would change in response to the pedal.
|
||||||
|
|
||||||
|
I also wanted the ability to turn this remapping on and off. Very quickly I noticed some songs where the charting was such that all hi-hat notes, even "open" ones, were mapped to the yellow cymbal, especially during double kick drum passages. Thus for those songs I'd want the ability to turn remapping off so I could still play naturally without needing to adjust my hi-hat physically, then swap back for other songs easily. Luckily the MIDI Shield also comes with push-buttons, so I attached one of them to the board, and added this to the code. I used the red and green LEDs on the board to indicate what mode it's in as well, so I have clear visual feedback of when the remapping is on (green) or off (red).
|
||||||
|
|
||||||
|
At this point I had things working enough to do a quick demo video, [visible on my YouTube channel here](https://www.youtube.com/watch?v=ocAzJ67x4Z0). While my videography failed quite spectacularly after about 3.5 minutes, it gets the point across: this solution was a success!
|
||||||
|
|
||||||
|
## Part Four: Building the Final Form
|
||||||
|
|
||||||
|
One thing I didn't like about the build at this point was the Arduino Uno I was using as the microcontroller. It's hard to explain or really quantify, but the responsiveness of the kit just felt "sluggish" to me, and I attributed this to the performance of the Arduino in reading the MIDI events and then writing them back out. There were also weird issues with floating capacitance causing the mode to flip back and forth constantly at times, which became really annoying.
|
||||||
|
|
||||||
|
So I decided to replace the Arduino itself with another microcontroller, the much faster STM32 "Blackpill", of which I had over a dozen lying around from another (failed) project. The Blackpill had a number of benefits: first, it was much faster (up to 16x faster than the Arduino Uno, CPU-wise, with dual ARM cores), it was much smaller and could thus fit into a smaller area, it had 2 serial UARTs so I could actually *debug* the thing with serial prints, and finally it was able to be powered over USB-C (of which I had many more long cables than I had for USB-A to USB-B).
|
||||||
|
|
||||||
|
I soldered everything together with my (brand new) [Pine64 Pinecil](https://pine64.com/product/pinecil-smart-mini-portable-soldering-iron/) - which, aside, is the best soldering iron I've ever used - using 22-gauge Ethernet wire I had laying around, and covered it in tape to protect it and the leads as well as eliminate any stray bridging from touching it. I then made a quick little wire mount, soldered onto the potentiometer anchor points of the MIDI Shield, and used this to attach it to the top of my speaker controller for a clean, easily accessible setup.
|
||||||
|
|
||||||
|
The debugging part came in real handy as I worked to calibrate excactly what the threshold between open and closed should be, and also helped me greatly simplify the code I had originally written for maximum optimization and thus speed. At this point I started playing regularly on it, and after nearly 2 weeks I've been playing at least once a day, sometimes even more.
|
||||||
|
|
||||||
|
## Part Five: Pictures and Code!
|
||||||
|
|
||||||
|
What would this post be without some pictures?
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Here is a quick WIP shot of the wiring for the Blackpill and the MIDI Shield. You can see the power along the left and the various signal lines to the shield across the center. A2 and A3 are the second serial UART on the Blackpill; A5 is the button for mode control; and A6 and A7 are the LEDs for status indication. Not shown is the aforementioned heavy wire mount, which was soldered to the mechanical anchor points at the top of the board in this image. The boards are attached together with relatively thick double-sided tape to keep them solidly together while insulating them from each other.
|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
Here are two images, front and back, of the MIDI Rewriter module in its final position with all connections. From the front, the MIDI-IN from the drum head is on the right, while the MIDI-OUT to the Pro Adapter is on the left. USB power is visible on the back, and all the cables are neatly organized using small cable ties. The two USB cables (USB-C power for the Blackpill and USB signal for the Pro Adapter) are routed over to a USB hub by the PS3 along the drum frame.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Here is a shot of me holding the Pro Controller. The cables are neatly routed to provide me plenty of slack to hold the controller if needed, and the MIDI cable acts as a loop to hook onto the golden-coloured 3D-printed hook attached to the side of the drum module. Also (slightly) visible underneath the drum module are my headphones that I use during "quiet hours", on another golden 3D-printed hook. This keeps everything together and nicely out of the way while I'm playing while still being accessible instantly.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
And here's the entire kit setup, with the TV, speakers and PS3 (just behind the uncovered speaker) visible. The USB hub is attached to the desk just behind the Hi-Hat cymbals. The speakers are in Stereo 2x mode, with both the pair on the desk as well as a pair on the floor on either side of me (right one visible). I used coloured electrical tape to add little colour accents for the cymbals to help establish my muscle memory for the game, which took a solid week to get used to (versus the original Rock Band drums), but now I just like how it looks. The fact that the Strike Pro has 3 crashes worked out wonderfully here as I'm able to have both the normal Green Cymbal crash, along with separate "crash" versions of the Yellow and Blue cymbals for when I feel that playing authentically requires them. For toms, the rack toms are mapped as you would expect (smallest is yellow, next is blue), and the "floor" toms both are technically mapped to green but I only use the first, with the second acting as a convenient table for the remote and vocal controller. Bonus: my best result yet for Time and Motion by Rush ([a custom chart by ejthedj on C3](https://db.c3universe.com/song/time-and-motion-16247))!
|
||||||
|
|
||||||
|
Finally, [the code for the Blackpill version of the Rewriter module is available on my GitHub](https://gist.github.com/joshuaboniface/660ab942198909e4f136f66a4065a691) for anyone interested in implementing their own.
|
||||||
|
|
||||||
|
## Part Six: Demo Video!
|
||||||
|
|
||||||
|
Here's a demo of me playing a song with the finalized version of everything. The hi-hat action still isn't *perfect* but it's more than good enough to "feel good" to play.
|
||||||
|
|
||||||
|
{{< youtube cA7e7zTVD7E >}}
|
||||||
|
|
||||||
|
## Part Seven: Conclusions and Next Steps
|
||||||
|
|
||||||
|
All in all I'd consider this project a resounding success. First and most importantly, it's got me wanting to drum, often 2 or 3 times a day in short 15-30 minute increments. It took a little while to get used to this layout and I'm slowly building back my endurance, but the goal of making me *want* to drum by gamifying it has definitely worked well. Second it was a very fun project, letting me use all my biggest skillsets to achieve a goal I wanted for a long time, which was deeply satisfying.
|
||||||
|
|
||||||
|
For next steps, I have a few ideas. First of course I plan to continue tweaking the hi-hat settings mercilessly until I get them *just* right, but I fear I'm limited as much by the Strike Pro (it's always been flaky on open/closed hi-hat work) and my own skill as I am by the controller, but I'll try. I also plan to implement a foot pedal switch to swap modes, along with better debouncing code, so that I could theoretically switch the Rewriter module on and off mid-song if I wanted to, though so far I haven't found much of a need for this.
|
||||||
|
|
||||||
|
I hope you find this post interesting, useful, and perhaps inspiring! Please send me an email if you have any feedback!
|
BIN
content/en/posts/gamifying-my-drumming/midi-rewriter-back.jpg
Normal file
After Width: | Height: | Size: 117 KiB |
BIN
content/en/posts/gamifying-my-drumming/midi-rewriter-front.jpg
Normal file
After Width: | Height: | Size: 136 KiB |
BIN
content/en/posts/gamifying-my-drumming/pro-controller.jpg
Normal file
After Width: | Height: | Size: 162 KiB |
BIN
content/en/posts/gamifying-my-drumming/whole-setup.jpg
Normal file
After Width: | Height: | Size: 168 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
@ -1,14 +1,11 @@
|
|||||||
+++
|
---
|
||||||
|
title: "Patroni and HAProxy Agent Checks"
|
||||||
class = "post"
|
description: "Using HAProxy agent checks to clean up your Patroni load balancing"
|
||||||
date = "2018-09-17T1:43:25-04:00"
|
date: 2018-09-17
|
||||||
tags = ["devops","postgresql","patroni","haproxy"]
|
tags:
|
||||||
title = "Patroni and HAProxy Agent Checks"
|
- Development
|
||||||
description = "Using HAProxy agent checks to clean up your Patroni load balancing"
|
- Systems Administration
|
||||||
type = "post"
|
---
|
||||||
weight = 1
|
|
||||||
|
|
||||||
+++
|
|
||||||
|
|
||||||
[Patroni](https://github.com/zalando/patroni) is a wonderful piece of technology. In short, it [allows an administrator to configure a self-healing and self-managing replicated PostgreSQL cluster](https://patroni.readthedocs.io/en/latest/), and [quite simply at that](https://www.opsdash.com/blog/postgres-getting-started-patroni.html). With Patroni, gone are the days of having to manage your PostgreSQL replication manually, worrying about failover and failback during an outage or maintenance. Having a tool like this was paramount to supporting PostgreSQL in my own cluster, and after a lot of headaches with [repmgr](https://repmgr.org/) finding Patroni was a dream come true. If you haven't heard of it before, definitely check it out!
|
[Patroni](https://github.com/zalando/patroni) is a wonderful piece of technology. In short, it [allows an administrator to configure a self-healing and self-managing replicated PostgreSQL cluster](https://patroni.readthedocs.io/en/latest/), and [quite simply at that](https://www.opsdash.com/blog/postgres-getting-started-patroni.html). With Patroni, gone are the days of having to manage your PostgreSQL replication manually, worrying about failover and failback during an outage or maintenance. Having a tool like this was paramount to supporting PostgreSQL in my own cluster, and after a lot of headaches with [repmgr](https://repmgr.org/) finding Patroni was a dream come true. If you haven't heard of it before, definitely check it out!
|
||||||
|
|
||||||
@ -16,7 +13,7 @@ Once you have a working Patroni cluster, managing client access to it becomes th
|
|||||||
|
|
||||||
### The problem - Do you like `DOWN` hosts?
|
### The problem - Do you like `DOWN` hosts?
|
||||||
|
|
||||||
However, the [official HAProxy configuration template](https://github.com/zalando/patroni/blob/master/extras/confd/templates/haproxy.tmpl) has a problem - in a read-write backend, you want your non-`master` hosts to be inaccessable to clients, to prevent write attempts against a read-only replica. However this configuration results in the `replica` hosts being marked `DOWN` in HAProxy.
|
However, the [official HAProxy configuration template](https://github.com/zalando/patroni/blob/master/extras/confd/templates/haproxy.tmpl) has a problem - in a read-write backend, you want your non-`primary` hosts to be inaccessable to clients, to prevent write attempts against a read-only replica. However this configuration results in the `replica` hosts being marked `DOWN` in HAProxy.
|
||||||
|
|
||||||
Now, some people might ask "well, why is that a big deal"? And they may be right. However, as soon as you start trying to monitor your HAProxy backends via an external monitoring tool, you see the problem: "CRITICAL" alerts during normal operation! After all, a `DOWN` host is considered a _problem_ in 99.9% of HAProxy usecases. But with Patroni, it's expected behaviour, which is not ideal.
|
Now, some people might ask "well, why is that a big deal"? And they may be right. However, as soon as you start trying to monitor your HAProxy backends via an external monitoring tool, you see the problem: "CRITICAL" alerts during normal operation! After all, a `DOWN` host is considered a _problem_ in 99.9% of HAProxy usecases. But with Patroni, it's expected behaviour, which is not ideal.
|
||||||
|
|
||||||
@ -26,7 +23,7 @@ So what can we do?
|
|||||||
|
|
||||||
HAProxy, since at least version 1.5, supports [a feature called `agent-check`](https://cbonte.github.io/haproxy-dconv/1.5/configuration.html#5.2-agent-check). In short, this "enable[s] an auxiliary agent check which is run independently of a regular health check". The `agent-check` will connect to a specific port on either the backend host or another target, and will modify the backend status based on the response, which must be one of the common HAProxy keyworks (eg. `MAINT` or `READY`).
|
HAProxy, since at least version 1.5, supports [a feature called `agent-check`](https://cbonte.github.io/haproxy-dconv/1.5/configuration.html#5.2-agent-check). In short, this "enable[s] an auxiliary agent check which is run independently of a regular health check". The `agent-check` will connect to a specific port on either the backend host or another target, and will modify the backend status based on the response, which must be one of the common HAProxy keyworks (eg. `MAINT` or `READY`).
|
||||||
|
|
||||||
So how does this help us? Well, if we had some way to obtain Patroni's `master`/`replica` status for each host, we could, instead of having the `replica` machines marked `DOWN`, put them into `MAINT` mode instead. This provides cleanliness for monitoring purposes while still letting us use the typical Patroni HAProxy configuration, with just minimal modifications to the HAProxy configuation and deploying an additional daemon on the Patroni hosts.
|
So how does this help us? Well, if we had some way to obtain Patroni's `primary`/`replica` status for each host, we could, instead of having the `replica` machines marked `DOWN`, put them into `MAINT` mode instead. This provides cleanliness for monitoring purposes while still letting us use the typical Patroni HAProxy configuration, with just minimal modifications to the HAProxy configuation and deploying an additional daemon on the Patroni hosts.
|
||||||
|
|
||||||
### The Code - Python 3 daemon
|
### The Code - Python 3 daemon
|
||||||
|
|
||||||
@ -41,7 +38,7 @@ Here is the code - I'm sure it can be improved significantly but it works for me
|
|||||||
```
|
```
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
# Simple agent check for HAProxy to determine Patroni master/replica status
|
# Simple agent check for HAProxy to determine Patroni primary/replica status
|
||||||
|
|
||||||
import socket, requests
|
import socket, requests
|
||||||
|
|
||||||
@ -78,8 +75,8 @@ while True:
|
|||||||
conn, addr = sock.accept()
|
conn, addr = sock.accept()
|
||||||
state = getstate()
|
state = getstate()
|
||||||
|
|
||||||
# Set our response based on the state; only `master` should be READY in read-write mode
|
# Set our response based on the state; only `primary` should be READY in read-write mode
|
||||||
if state == 'master':
|
if state == 'primary':
|
||||||
data = b'READY\n'
|
data = b'READY\n'
|
||||||
else:
|
else:
|
||||||
data = b'MAINT\n'
|
data = b'MAINT\n'
|
||||||
@ -127,7 +124,7 @@ Now finally, configure your HAProxy backend to use the agent check. Here's my (l
|
|||||||
backend mast-pgX_psql_readwrite
|
backend mast-pgX_psql_readwrite
|
||||||
mode tcp
|
mode tcp
|
||||||
option tcpka
|
option tcpka
|
||||||
option httpchk OPTIONS /master
|
option httpchk OPTIONS /primary
|
||||||
http-check expect status 200
|
http-check expect status 200
|
||||||
server mast-pg1 mast-pg1:5432 resolvers nsX resolve-prefer ipv4 maxconn 100 check agent-check agent-port 5555 inter 1s fall 2 rise 2 on-marked-down shutdown-sessions port 8008
|
server mast-pg1 mast-pg1:5432 resolvers nsX resolve-prefer ipv4 maxconn 100 check agent-check agent-port 5555 inter 1s fall 2 rise 2 on-marked-down shutdown-sessions port 8008
|
||||||
server mast-pg2 mast-pg2:5432 resolvers nsX resolve-prefer ipv4 maxconn 100 check agent-check agent-port 5555 inter 1s fall 2 rise 2 on-marked-down shutdown-sessions port 8008
|
server mast-pg2 mast-pg2:5432 resolvers nsX resolve-prefer ipv4 maxconn 100 check agent-check agent-port 5555 inter 1s fall 2 rise 2 on-marked-down shutdown-sessions port 8008
|
||||||
@ -136,8 +133,10 @@ backend mast-pgX_psql_readwrite
|
|||||||
|
|
||||||
And here it is in action:
|
And here it is in action:
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### Conclusion
|
### Conclusion
|
||||||
|
|
||||||
I hope that this provides some help to those who want to use Patroni fronted by HAProxy but don't want `DOWN` backends all the time! And of course, I'm open to suggestions for improvement or questions - just send me an email!
|
I hope that this provides some help to those who want to use Patroni fronted by HAProxy but don't want `DOWN` backends all the time! And of course, I'm open to suggestions for improvement or questions - just send me an email!
|
||||||
|
|
||||||
|
UPDATE 2024-12-01: Updated various instances of `master` to `primary` to reflect changes in Patroni since this post was originally written. Thanks to [Gary T. Giesen][https://fosstodon.org/@ggiesen] for pointing these out!
|
@ -1,15 +1,11 @@
|
|||||||
+++
|
---
|
||||||
|
title: "Problems in FLOSS Projects #1 - Feature: Burden or Boon?"
|
||||||
class = "post"
|
description: "Why it's hard to prioritize and balance advanced features with ease of use"
|
||||||
date = "2020-04-18T00:00:00-04:00"
|
date: 2020-04-18
|
||||||
tags = ["support", "floss"]
|
tags:
|
||||||
title = "Problems in FLOSS Projects #1 - Feature: Burden or Boon?"
|
- FLOSS
|
||||||
description = "Why it's hard to prioritize and balance advanced features with ease of use"
|
- Development
|
||||||
type = "post"
|
---
|
||||||
weight = 1
|
|
||||||
draft = false
|
|
||||||
|
|
||||||
+++
|
|
||||||
|
|
||||||
## Welcome
|
## Welcome
|
||||||
|
|
@ -1,15 +1,11 @@
|
|||||||
+++
|
---
|
||||||
|
title: "Problems in FLOSS Projects #2 - Support Vampires"
|
||||||
class = "post"
|
description: "How to spot and deal with people draining your community's life-force"
|
||||||
date = "2020-05-31T00:00:00-04:00"
|
date: 2020-05-31
|
||||||
tags = ["support", "floss"]
|
tags:
|
||||||
title = "Problems in FLOSS Projects #2 - Support Vampires"
|
- FLOSS
|
||||||
description = "How to spot and deal with people draining your community's life-force"
|
- Development
|
||||||
type = "post"
|
---
|
||||||
weight = 1
|
|
||||||
draft = false
|
|
||||||
|
|
||||||
+++
|
|
||||||
|
|
||||||
## Welcome
|
## Welcome
|
||||||
|
|
94
content/en/posts/problems-in-floss-3/index.md
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
---
|
||||||
|
title: "Problems in FLOSS Projects #3 - The Development Bystander Problem"
|
||||||
|
description: "The paradoxical link between user count and new developers"
|
||||||
|
date: 2022-12-07
|
||||||
|
tags:
|
||||||
|
- FLOSS
|
||||||
|
- Development
|
||||||
|
---
|
||||||
|
|
||||||
|
## Welcome
|
||||||
|
|
||||||
|
Welcome to part three of my "Problems in FLOSS Projects" series. Better late than never. In this entry, we talk about a paradoxical problem that I've observed within Jellyfin and several other large projects. I hope you enjoy.
|
||||||
|
|
||||||
|
## The Paradox
|
||||||
|
|
||||||
|
There is a seeming paradox in FLOSS projects when it comes to developer engagement versus user count. It can be summed up pretty simply:
|
||||||
|
|
||||||
|
> The larger a FLOSS project gets, in terms of user base, the less likely it is that new developers come onboard, causing the project to stagnate.
|
||||||
|
|
||||||
|
I call this a paradox because this is not what most new projects *think* will happen.
|
||||||
|
|
||||||
|
The conventional wisdom is that more users is always a *good* thing, because more users will bring a larger community which will in turn bring on more developers to aid the project.
|
||||||
|
|
||||||
|
But in my experience, this does not hold, and in fact, the opposite happens. The more users the project gets, the *fewer* new developers the project takes on.
|
||||||
|
|
||||||
|
Why? I have some ideas.
|
||||||
|
|
||||||
|
## The Bystander Effect and the Tragedy of the Commons
|
||||||
|
|
||||||
|
These are two somewhat related but distinct sociological phenomena that have been well described and documented by sociologists.
|
||||||
|
|
||||||
|
The [Bystander Effect](https://en.wikipedia.org/wiki/Bystander_effect) is, to quote Wikipedia:
|
||||||
|
|
||||||
|
> a social psychological theory that states that individuals are less likely to offer help to a victim when there are other people present
|
||||||
|
|
||||||
|
The Bystander Effect is most commonly described in terms of victim situations, for instance, a robbery. If many people see a person being robbed, the more people there are witnessing the crime, the less likely any single one is to take action and help the victim.
|
||||||
|
|
||||||
|
In short, the more people that there are around, the less likely any *single* person is to render assistance. The thinking is, in its simplest form, "someone else will help".
|
||||||
|
|
||||||
|
The [Tragedy of the Commons](https://en.wikipedia.org/wiki/Tragedy_of_the_commons) is a similar idea, to quote Wikipedia:
|
||||||
|
|
||||||
|
> a situation in which individual users, who have open access to a resource unhampered by shared social structures or formal rules that govern access and use, act independently according to their own self-interest and, contrary to the common good of all users, cause depletion of the resource through their uncoordinated action in case there are too many users related to the available resources
|
||||||
|
|
||||||
|
While the Bystander Effect is usually used for social situations, the Tragedy of the Commons is most often described in terms of environmental situations. A canonical example is that of a number of woodcutters: each woodcutter has an individual incentive to cut down as many trees as they possibly can to increase their individual wealth. However taken together, all woodcutters are likely to completely exhaust the forest. Despite this being something that negatively affects all woodcutters, because of the incentives involved, each woodcutter is incentivized to hurt everyone - including themselves - in the long-term to benefit themselves short-term, because the long-term consequences are abstracted among "the commons" of all woodcutters.
|
||||||
|
|
||||||
|
I posit that both effects are at play as FLOSS projects grow, to the detriment of the project at large and individual contributors and users over time.
|
||||||
|
|
||||||
|
## A Disclaimer
|
||||||
|
|
||||||
|
I had some backlash to the last post for my generalizations, so I want to make a quick disclaimer here.
|
||||||
|
|
||||||
|
Despite anything I say below, I am *not* saying that projects shouldn't grow, or that "users are bad", or anything of that sort. I am simply describing a problem I observe that I believe project managers, contributors, and users should be aware of.
|
||||||
|
|
||||||
|
I also don't have an easy solution. Like many sociological phenomena, these are complex, and there is no one-size-fits-all solution or magic bullet that will solve them. I simply hope that by bringing attention to this, that it can help projects understand what is happening and work to develop their own solutions that suit their project.
|
||||||
|
|
||||||
|
## How the Bystander Effect affects projects
|
||||||
|
|
||||||
|
The Bystander Effect is the easier of the two to map onto FLOSS projects.
|
||||||
|
|
||||||
|
As a project grows, and more users join, there *is* a much higher likelihood of any individual user being a developer who is capable, and even willing, to contribute to the project. This does of course depends on the nature of the project, as projects that focus primarily on end-users are likely to have a lower "developer pool" than those that target developers (i.e. libraries and such), but there are still likely many capable developers in the userbase of every project.
|
||||||
|
|
||||||
|
The Bystander Effect comes in because of the size of the userbase. Each individual developer is more likely to see both the size of the project, the number of other developers (active or not), and the number of users, and conclude that "someone else is working on that". In contrast, when a project is still new and small, a developer is much less likely to conclude this, and is thus more likely to make a contribution to fix a bug or implement a feature that they want.
|
||||||
|
|
||||||
|
We have seen this happen with Jellyfin in near real-time. Earlier on in the project, when issues came up, we were very likely to get a quick implementation of a fix by a new contributor; many of these contributors ended up joining the project team and helping long-term. However as time has gone on and the userbase has grown exponentially, this has become rarer and rarer. I'm certain these developers are out there, but that for some reason they are not making the jump from user to contributor, and I believe that this "FLOSS Bystander Effect" is the major reason why.
|
||||||
|
|
||||||
|
## How the Tragedy of the Commons affects projects
|
||||||
|
|
||||||
|
The Tragedy of the Commons has a slightly more tenuous connection to FLOSS projects, but I think it is still relevant here, though causing a slightly different result than the Bystander Effect.
|
||||||
|
|
||||||
|
This issue is more on the side of users who are also developers. Each individual user-developer has their own ideas about what the project should do. This is especially pronounced in very large, sprawling projects with many features, like Jellyfin. For each feature the developer may want, they have an incentive to implement it. And the user-developer *does* move past the Bystander Effect and start working on a feature or bugfix. They might even finish it. The tragedy of the commons comes into play when said feature is shared with the project at large.
|
||||||
|
|
||||||
|
Depending on the "cost" of the feature, in many terms - developer effort, review effort, migration paths, etc. - the project as a whole might not be interested in the feature. Either in general, or in specific implementation. This results in a major discouragement to the user-developer-turned-new-contributor, as their pull request languishes in the purgatory of "waiting on review", with no one being willing to dismiss it nor to actively accept it.
|
||||||
|
|
||||||
|
Now this may seem like a stretch, but there is one specific area where I think this particular phenomenon is decidedly at play: that of code quality.
|
||||||
|
|
||||||
|
In the Jellyfin project, we have a relatively small number of core "server" developers, the "server" being the backend API/database that the various clients (including the main "web" client) interface with. These developers have spent many years "cleaning up" the codebase, trying to bring in good development practices and clear, maintainable code.
|
||||||
|
|
||||||
|
In this situation, "the commons" is the codebase as a whole.
|
||||||
|
|
||||||
|
The tragedy comes because there is a conflicting incentive for the user-developer-turned-new-contributor. Without saying anything about their actual skill level, it is a lot of work for them to (a) get up to speed on the codebase, *and* (b) learn the rules and processes of the project, *and* (c) ensure that their code follows the often-institutionalized-and-undocumented knowledge practices that the current contributors have developed, all on top of the work of actually implementing the feature. However, there is incentive for the user-developer to implement the feature they want quickly, so they can use it, without too much concern for how it fits into the larger codebase (the "commons" of the project).
|
||||||
|
|
||||||
|
This can have two effects, both of which are alienating: first, if the project "doesn't care" about "the commons", you can end up with a situation where cleanup work is discarded, the codebase becomes messy as new contributions add code-paths that do not align with the structure, and this alienates those developers doing the cleanup; or, second, if the project *does* "care" about "the commons", this can alienate the new user-developer, who sees the constant requests for rewrites as "nitpicking" their contributions, alienating them and making them at best less likely to see their contribution through, and at worse cause them to fork and implement things their way.
|
||||||
|
|
||||||
|
Hopefully the analogy to the original "environmental" version of the Tragedy of the Commons makes more sense with that example.
|
||||||
|
|
||||||
|
Another example is that of feature creep. Here "the commons" is the conciseness and focus of the project, the few features that the (current) core contributors see as the most important. The tragedy comes about as users request more and more features and, potentially, new user-developers attempt to implement them, resulting in either a sprawling codebase that becomes harder and harder to maintain, or further alienation vis-a-vis "this feature isn't wanted".
|
||||||
|
|
||||||
|
I'm sure there are plenty more as well that maintainers of large, long-lived projects can think of, but these are the two major ones that I have observed, and neither is limited to Jellyfin specifically, but to many other large FLOSS projects.
|
||||||
|
|
||||||
|
## What is a project to do?
|
||||||
|
|
||||||
|
As mentioned in the disclaimer, I unfortunately do not have a good solution here. The problem of "new blood" in the project is one we've been struggling with in Jellyfin for over a year now. We've thrown around some ideas, but ultimately none have been particularly satisfactory.
|
||||||
|
|
||||||
|
Ultimately, I think the best solution to both is simply education. Knowing, from both sides, that these are potential pitfalls can go a long way to a shared understanding between users (and especially, developer-users) and core contributors/maintainers about how best to approach things like work-sharing, reviews, new features, and code quality. Once there is shared understanding, this hopefully makes finding solutions tailored to each specific project easier on everyone.
|
152
content/en/posts/pvc-ceph-tuning-adventures-part-2/index.md
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
---
|
||||||
|
title: "Adventures in Ceph tuning, part 2"
|
||||||
|
description: "A follow-up to my analysis of Ceph system tuning for Hyperconverged Infrastructure"
|
||||||
|
date: 2022-11-12
|
||||||
|
tags:
|
||||||
|
- PVC
|
||||||
|
- Development
|
||||||
|
- Systems Administration
|
||||||
|
---
|
||||||
|
|
||||||
|
Last year, [I made a post](https://www.boniface.me/posts/pvc-ceph-tuning-adventures/) about Ceph storage tuning with my [my Hyperconverged Infrastructure (HCI) project PVC](https://github.com/parallelvirtualcluster/pvc), with some interesting results. At the time, I outlined how two of the nodes were a newer, more robust server configuration, but I was still stuck with one old node which was potentially throwing off my performance results and analysis. Now, I have finally acquired a 3rd server matching the spec of the other 2, bringing all 3 of my hypervisor nodes into perfect balance. Also, earlier in the year, I upgraded the CPUs of the nodes to the Intel E5-2683 V4, which provides double the cores, threads, and L3 cache than the previous 8-core E5-2620 V4's, helping further boost performance.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
With my configuration now standardized across all the nodes, I can finally revisit the performance analysis from that post and make some more useful conclusions, without mismatched CPUs getting in the way.
|
||||||
|
|
||||||
|
If you haven't read that previous post, I recommend doing so now to get the context, as I will be jumping right in to the updated testing and results.
|
||||||
|
|
||||||
|
## The Cluster Specs
|
||||||
|
|
||||||
|
All 3 nodes in the cluster now have the following specifications:
|
||||||
|
|
||||||
|
| **Part**           | **node1 + node2 + node3** |
|
||||||
|
| :-------------------------------------------------------------- | :------------------------ |
|
||||||
|
| Chassis | Dell R430 |
|
||||||
|
| CPU | 1x [Intel E5-2683 v4](https://ark.intel.com/content/www/us/en/ark/products/91766/intel-xeon-processor-e52683-v4-40m-cache-2-10-ghz.html) (16 core, 32 thread, 2.1 GHz base, 3.0 GHz maximum boost) |
|
||||||
|
| Memory | 128 GB DDR4 (4x 32 GB) |
|
||||||
|
| OSD DB/WAL (NVMe) | 1x Intel DC P4801X 100 GB |
|
||||||
|
| OSD Data (SATA) | 2x Intel DC S3700 800 GB |
|
||||||
|
| Networking | 2x 10GbE in 802.3ad (LACP) bond |
|
||||||
|
|
||||||
|
## The OSD Database Device
|
||||||
|
|
||||||
|
As part of that original round of testing, I compared various configurations, including no WAL, with WAL, and various CPU set configurations with no WAL. After that testing was completed, the slight gains of the WAL prompted me to leave that configuration in place for production going forward, and I don't see much reason to remove it for further testing, due to the clear benefit (even if slight) that it gave to write performance with my fairly-slow-by-modern-standards SATA data SSDs. Thus, this follow-up post will focus exclusively on the CPU set configurations with the upgraded and balanced CPUs.
|
||||||
|
|
||||||
|
## The Fatal Flaw of my Previous Tests and Updated CPU Set Configuration
|
||||||
|
|
||||||
|
The CPU-limited tests as outlined in the original post were fatally flawed. While I was indeed able to use CPU sets with the `cset` tool to limit the OSD processes to specific cores, and this appeared to work, the problem was that I wasn't limiting *anything else* to the non-OSD CPU cores. Thus, the OSDs were likely being thrashed by the various other processes in addition to being limited to specific CPUs. This might explain some of the strange anomalies in performance that are visible in those tests.
|
||||||
|
|
||||||
|
To counteract this, I created a fresh, from-scratch CPU tuning mechanism for the PVC Ansible deployment scheme. With this new mechanism, CPUs are limited with the systemd `AllowedCPUs` and `CPUAffinity` flags, which are set on the various specific systemd slices that the system uses to organize processes, including a custom OSD slice. This ensures that the limit happens in both directions and everything is forced into its own proper CPU set.
|
||||||
|
|
||||||
|
In addition to separating the OSDs and VMs, a third CPU set is also added strictly for system processes. This is capped at 2 cores (plus hyperthreads) for all testing here, and the FIO processes are also limited to this CPU set.
|
||||||
|
|
||||||
|
Thus, the final layout of CPU core sets on all 3 nodes looks like this:
|
||||||
|
|
||||||
|
| **Slice/Processes**   | **Allowed CPUs + Hyperthreads**   | **Notes** |
|
||||||
|
| :------------------------- | :------------------------------------- | :-------- |
|
||||||
|
| system.slice | 0-1, 16-17 | All system processes, databases, etc. and non-OSD Ceph processes. |
|
||||||
|
| user.slice | 0-1, 16-17 | All user sessions, including FIO tasks. |
|
||||||
|
| osd.slice | 2-**?**, 18-**?** | All OSDs; how many (the ?) depends on test to find optimal number. |
|
||||||
|
| machine.slice| **?**-15, **?**-31 | All VMs; how many (the ?) depends on test as above. |
|
||||||
|
|
||||||
|
The previous tests were also, as mentioned above, significantly limited by the low CPU core counts of the old processors, and during those tests the node running the tests was flushed of VMs; the new CPUs allow both flaws to be corrected, and all 3 nodes will have VMs present, with the primary node running the OSD tests in the `user.slice` CPU set.
|
||||||
|
|
||||||
|
During all tests, node1 was both the testing node, as well as primary PVC coordinator (adding a slightly higher process burden to it).
|
||||||
|
|
||||||
|
## Test Outline and Hypothesis
|
||||||
|
|
||||||
|
To determine both whether limiting OSD CPUs, and if so, how many, is worthwhile, a set of 4 total tests was run.
|
||||||
|
|
||||||
|
* The first test is without any CPU limits, i.e. all cores can be used by all processes.
|
||||||
|
|
||||||
|
* The second test is with 2 total CPU cores dedicated to OSDs (1 "per" OSD).
|
||||||
|
|
||||||
|
* The third test is with 4 total CPU cores dedicated to OSDs (2 "per" OSD).
|
||||||
|
|
||||||
|
* The fourth test is with 6 total CPU cores dedicated to OSDs (3 "per" OSD).
|
||||||
|
|
||||||
|
The results are displayed as an average of 3 tests with each configuration, and include the 60-second post-test load average of all 3 nodes in addition to the raw test result to help identify trends in CPU utilization.
|
||||||
|
|
||||||
|
I would expect, with Ceph's CPU-bound nature, that each increase in the number of CPU cores dedicated to OSDs will increase performance. The two open questions are thus:
|
||||||
|
|
||||||
|
* Is doing no limit at all (pure scheduler allocations) better than any fixed limits?
|
||||||
|
* Is one of the numbers above optimal (no obvious performance hit, and diminishing returns thereafter).
|
||||||
|
|
||||||
|
## Test Results
|
||||||
|
|
||||||
|
### Sequential Bandwidth Read & Write
|
||||||
|
|
||||||
|
Sequential bandwidth tests tend to be "ideal situation" tests, not necessarily applicable to VM workloads except in very particular circumstances. However they can be useful for seeing the absolute maximum raw throughput performance that can be attained by the storage subsystem.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Sequential read shows a significant spike with the all-cores configuration, then a much more consistent performance curve in the limited configurations. There is a significant difference in performance between the configurations, with a margin of just over 450 MB/s between the best (all-cores) and worst (2+2+12) configurations.
|
||||||
|
|
||||||
|
The most interesting point to note is that the all-cores configuration has significantly higher sequential read performance than any limited configuration, and in such a way that even following the pattern of the limited configurations we would not reach this high performance even with all 16 cores dedicated. The Linux scheduler must be working some magic to ensure the raw data can transfer very quickly in the all-cores configuration.
|
||||||
|
|
||||||
|
System load also follows an interesting trend. The highest load on nodes 1 and 2, and the lowest on node 3, was with the all-cores configuration, indicating that Ceph OSDs will indeed use many CPU cores to spread read load around. The overall load became much more balanced with the 2+4+10 and 2+6+8 configurations.
|
||||||
|
|
||||||
|
This is overall an interesting result and, as will be shown below, the outlier in terms of all-core configuration performance. It does not adhere to the hypothesis, and provides a "yes" answer for the first question (thus negating the second).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Sequential write shows a much more consistent result in line with the hypothesis above, and providing a clear "no" answer for the first question and a fairly clear point of diminishing returns for the second. The overall margin between the configurations is minimal, with just 17 MB/s of performance difference between the best (2+6+8) and worst (2+2+12) configurations.
|
||||||
|
|
||||||
|
There is a clear drop going from the all-cores configuration to the 2+2+12 configuration, however performance immediately spikes to even higher levels with the 2+4+10 and 2+6+8 configurations, with those only showing a 1 MB/s difference between them. This points towards the 2+4+10 configuration as an optimal one for sequential write performance, as it leaves more cores for VMs and shows that OSD processes seem to use at most about 2 cores each for sequential write operations. The performance spread does however limit the applicability of this test to much higher-throughput devices (i.e. NVMe SSDs), leaving the question still somewhat open.
|
||||||
|
|
||||||
|
System load also follows a general upwards trend, indicating better overall CPU utilization.
|
||||||
|
|
||||||
|
### Random IOPS Read & Write
|
||||||
|
|
||||||
|
Random IO tests tend to better reflect the realities of VM clusters, and thus are likely the most applicable to PVC.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Random read, like sequential write above, shows a fairly consistent upward trend in line with the the original hypothesis, as well as clear answers to the two questions ("no", and "any limit"). The spread here is quite significant, with the difference between the best (2+6+8) and worst (all-cores) configurations being over 4100 IOs per second; this can be quite significant when speaking of many dozens of VMs doing random data operations in parallel.
|
||||||
|
|
||||||
|
This test shows the all-cores configuration as the clear loser, with a very significant performance benefit to even the most modest (2+2+12) limited configuration. Beyond that, the difference between 2 OSD cores and 6 OSD cores is a relatively small 643 IOs per second; still significant, but not nearly as much as the nearly 3500 IOs per second uplift between the all-cores and 2+2+12 configurations.
|
||||||
|
|
||||||
|
This test definitely points towards a trade-off between VM CPU allocations and maximum read performance, but also seems to indicate that, unlike sequential reads, Ceph does far better with just a few dedicated cores versus many shared cores when performing random reads.
|
||||||
|
|
||||||
|
System load follows a similar result to the sequential read tests, with more significant load on the testing node for the all-core and 2+2+12 configurations, before balancing out more in the 2+6+8 configuration.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Random write again continues a general trend in line with the hypothesis and providing nearly the same answers as the sequential write tests, with a similar precipitous drop for the 2+2+12 configuration versus the all-core configuration, before rebounding and increasing with the 2+4+10 and 2+6+8 configurations. The overall margin is a very significant 7832 IOs per second between the worst (2+2+12) and best (2+6+8) tests, more than double the performance.
|
||||||
|
|
||||||
|
This test definitely shows that Ceph random writes can consume many CPU cores per OSD process, and that providing more, dedicated cores can provide significant uplift in random write performance. Thus, like random reads, there is a definite trade-off between the CPU and storage performance requirements of VMs, so a balance must be struck. With regards to the second question, this test does show less clear diminishing returns as the number of dedicated cores increases, potentially indicating that it can scale almost indefinitely.
|
||||||
|
|
||||||
|
System load shows an interesting trend compared to the other tests. Overall, the load remains in a fairly consistent spread between all 3 nodes, though with a closing gap by the 2+6+8 configuration. Of note is that the overall load drops significantly on all nodes for the 2+2+12 configuration, showing quite clearly that the OSD processes are starved for CPU resources during those tests and explaining the overall poor performance there.
|
||||||
|
|
||||||
|
### 95th Percentile Latency Read & Write
|
||||||
|
|
||||||
|
Latency tests show the "best case" scenarios for the time individual writes can take to complete. A lower latency means the system can service writes far quicker. With Ceph, due to the inter-node replication, latency will always be based primarily on network latency, though there are some gains to be had.
|
||||||
|
|
||||||
|
These tests are based on the 95th percentile latency numbers; thus, these are the times in which 95% of operations will have completed, ignoring the outlying 5%. Though not shown here, the actual FIO test results show a fairly consistent spread up until the 99.9th percentile, so this number was chosen as a "good average" for everyday performance.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Read latency shows a consistent downwards trend like most of the tests so far, with a relatively large drop from the all-cores configuration to the 2+2+12 limited configuration, followed by steady decreases through each subsequent increase in cores. This does seem to indicate a clear benefit towards limiting CPUs, though like the random read tests, the point of diminishing returns comes fairly quickly.
|
||||||
|
|
||||||
|
System load also follows another hockey-stick-converging pattern, showing that CPU utilization is definitely correlated with the lower latency as the number of dedicated cores increases.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Write latency shows another result consistent with the other write tests, where the 2+2+12 configuration fares (slightly) worse than the all-cores configuration before rebounding. Here the latency difference becomes significant, with the spread of 252 μs being enough to become noticeable in high-performance applications. There is also no clear point of diminishing returns, just like the other write tests.
|
||||||
|
|
||||||
|
System load follows a very curious curve, with node1 load dropping off and levelling out with the 2+4+10 and 2+6+8 configurations, while the other nodes continue to increase. I'm not sure exactly what to make of this result, but the overall performance trend does seem to indicate that, like other write tests, more cores dedicated to the OSDs results in higher utilization and performance.
|
||||||
|
|
||||||
|
## Conclusions
|
||||||
|
|
||||||
|
With a valid testing methodology, I believe we can demonstrate some clear takeaways from this testing.
|
||||||
|
|
||||||
|
First, our original hypothesis that "more cores means better performance" certainly holds. Ceph is absolutely CPU-bound, and better (newer) CPUs at higher frequencies with more cores are always a benefit to a hyperconverged cluster system like PVC. It also clearly shows that Ceph OSD processes are not single-threaded in the latest versions, and that they can utilize many cores to benefit performance.
|
||||||
|
|
||||||
|
Second, our first unanswered question, "is a limit worthwhile over no limit", seems to be a definitive "yes" in all except for one case: sequential reads. Only in that situation was the all-cores configuration able to beat all other configurations. However, given that sequential read performance is, generally, a purely artificial benchmark, and also not particularly applicable to the PVC workload, I would say that it is definitely the case that a dedicated set of CPUs for the OSDs is a good best-practice to follow, as the results from all other tests do show a clear benefit.
|
||||||
|
|
||||||
|
Third, our second unanswered question, "how many dedicated cores should OSDs be given and what are the diminishing return points", is less clear cut. From the testing results, it is clear that only 1 core per OSD process is definitely too few, as this configuration always performed the worst out of the 3 tested. Beyond that, the workload on the cluster, and the balance between cores-for-VMs and storage performance, become more important. It is clear from the results that a read-heavy cluster would benefit most from a 2-cores-per-OSD configuration, as beyond that the returns seem to diminish quickly. For write-heavy clusters, though, more cores seem to provide an obvious benefit scaling up at least past our 2+6+8 configuration, and thus such clusters should be built with as many cores as possible and then with at least 3-4 (or more) cores dedicated to each OSD process.
|
||||||
|
|
||||||
|
The overall takeaway is thus: I will begin implementing some sort of CPU core affinity configuration on all new PVC clusters, and retrofit one befitting the required performance to all existing clusters; the benefits clearly outweigh the drawbacks.
|
||||||
|
|
||||||
|
The next post in this series will look at the same performance evaluation but with NVMe SSDs, and with several even-higher OSD allocations on some newer AMD Epyc-based machines. Stay tuned for more!
|
After Width: | Height: | Size: 47 KiB |
After Width: | Height: | Size: 54 KiB |
After Width: | Height: | Size: 31 KiB |
BIN
content/en/posts/pvc-ceph-tuning-adventures-part-2/rand-read.png
Normal file
After Width: | Height: | Size: 51 KiB |
After Width: | Height: | Size: 51 KiB |
BIN
content/en/posts/pvc-ceph-tuning-adventures-part-2/seq-read.png
Normal file
After Width: | Height: | Size: 53 KiB |
BIN
content/en/posts/pvc-ceph-tuning-adventures-part-2/seq-write.png
Normal file
After Width: | Height: | Size: 46 KiB |
156
content/en/posts/pvc-ceph-tuning-adventures-part-3/index.md
Normal file
@ -0,0 +1,156 @@
|
|||||||
|
---
|
||||||
|
title: "Adventures in Ceph tuning, part 3"
|
||||||
|
description: "A second follow-up to my analysis of Ceph system tuning for Hyperconverged Infrastructure"
|
||||||
|
date: 2023-07-29
|
||||||
|
tags:
|
||||||
|
- PVC
|
||||||
|
- Development
|
||||||
|
- Systems Administration
|
||||||
|
---
|
||||||
|
|
||||||
|
In 2021, [I made a post](https://www.boniface.me/posts/pvc-ceph-tuning-adventures/) about Ceph storage tuning with my [my Hyperconverged Infrastructure (HCI) project PVC](https://github.com/parallelvirtualcluster/pvc), and in 2022 [I wrote a follow-up](https://www.boniface.me/posts/pvc-ceph-tuning-adventures-part-2/) clarifying the test methodology with an upgraded hardware specification.
|
||||||
|
|
||||||
|
At the end of that second part, I said:
|
||||||
|
|
||||||
|
> The next post in this series will look at the same performance evaluation but with NVMe SSDs, and with several even-higher OSD allocations on some newer AMD Epyc-based machines.
|
||||||
|
|
||||||
|
Well, here is that next part!
|
||||||
|
|
||||||
|
Like part 2, I'll jump right into the cluster specifications, changes to the tests, and results. If you haven't read parts 1 and 2 yet, I suggest you do so now to get the proper context before proceeding.
|
||||||
|
|
||||||
|
## The Cluster Specs (only better)
|
||||||
|
|
||||||
|
Parts 1 and 2 used my own home server setup, based on Dell R430 servers using Broadwell-era Intel Xeon CPUs, for analysis. But being my homelab, I'm quite limited in what hardware I have access to: namely, I'm using several-generations-old hardware and SATA SSDs, so despite having some very interesting results, they are very limited by the hardware. So I wanted to get results with more modern hardware (new CPUs and NVMe SSDs). Luckily, I was able to test on just such a cluster thanks to my employer deploying my PVC solution to our customers using brand-new hardware.
|
||||||
|
|
||||||
|
Like my home cluster, these clusters use 3 nodes, with the following specifications:
|
||||||
|
|
||||||
|
| **Part**           | **node1 + node2 + node3** |
|
||||||
|
| :-------------------------------------------------------------- | :------------------------ |
|
||||||
|
| Chassis | Dell R6515
|
||||||
|
| CPU | 1x [AMD 7543P](https://www.amd.com/en/products/cpu/amd-epyc-7543p) (32 core, 64 thread, 2.8 GHz base, 3.7 GHz maximum boost) |
|
||||||
|
| Memory | 128 GB DDR4 (8x 16 GB) |
|
||||||
|
| OSD DB/WAL | N/A |
|
||||||
|
| OSD Data | 1x Dell PE8010 3.84TB U.2 NVMe SSD |
|
||||||
|
| Networking | 2x BCM57416 10GbE in 802.3ad (LACP) bond |
|
||||||
|
|
||||||
|
## The OSD Database Device
|
||||||
|
|
||||||
|
Because the main data disks in these servers are already NVMe, they do not feature an OSD DB/WAL device. As this made only a slight difference with the much slower SATA SSDs, I do not consider this important to use with ultra-fast NVMe OSDs.
|
||||||
|
|
||||||
|
## CPU Set Layout
|
||||||
|
|
||||||
|
These tests use the same methodology as the tests in part 2, with one minor change: instead of only dedicating 2 CPU cores (plus corresponding threads) to the system, here I dedicated 4 CPU cores instead. This was done simply due to the larger core count, as this would be the counts I would run in production on these nodes.
|
||||||
|
|
||||||
|
Thus, the layout of CPU core sets on all 3 nodes looks like this:
|
||||||
|
|
||||||
|
| **Slice/Processes**   | **Allowed CPUs + Hyperthreads**   | **Notes** |
|
||||||
|
| :------------------------- | :------------------------------------- | :-------- |
|
||||||
|
| system.slice | 0-3, 32-35 | All system processes, databases, etc. and non-OSD Ceph processes. |
|
||||||
|
| user.slice | 0-3, 32-35 | All user sessions, including FIO tasks. |
|
||||||
|
| osd.slice | 4-**?**, 32-**?** | All OSDs; how many (the ?) depends on test to find optimal number. |
|
||||||
|
| machine.slice| **?**-31, **?**-63 | All VMs; how many (the ?) depends on test as above. |
|
||||||
|
|
||||||
|
Due to an oversight, the primary PVC coordinator node actually flipped from node1 in tests 1 and 4-6 to node2 in tests 2 and 3, however as the results show this did not seem to make any appreciable difference in the CPU loads, and thus I think this can be ignored. I would expect this because the PVC processes running on the primary coordinator are not particularly intensive (maybe 1-2% of one core of CPU utilization).
|
||||||
|
|
||||||
|
## Test Outline and Hypothesis
|
||||||
|
|
||||||
|
This test used nearly the same test outline as the previous post, only with two additional tests:
|
||||||
|
|
||||||
|
* The first test is without any CPU limits, i.e. all cores can be used by all processes.
|
||||||
|
|
||||||
|
* The second test is with 1 total CPU cores dedicated to OSDs (1 "per" OSD).
|
||||||
|
|
||||||
|
* The third test is with 2 total CPU cores dedicated to OSDs (2 "per" OSD).
|
||||||
|
|
||||||
|
* The fourth test is with 3 total CPU cores dedicated to OSDs (3 "per" OSD).
|
||||||
|
|
||||||
|
* The fifth (new) test is with 4 total CPU cores dedicated to OSDs (4 "per" OSD).
|
||||||
|
|
||||||
|
* The sixth (new) test is with 8 total CPU cores dedicated to OSDs (8 "per" OSD).
|
||||||
|
|
||||||
|
Since there are half as many OSDs in these nodes (i.e. only 1 each), the OSD CPU count was scaled down to match the "per" numbers with the previous post.
|
||||||
|
|
||||||
|
The fifth test was added for more details on the scaling between configurations, and the sixth was added later due to an interesting observation in the results from the first 5 tests, specifically around random write performance, that will be discussed below.
|
||||||
|
|
||||||
|
The results are still displayed as an average of 3 tests with each configuration, and include the 60-second post-test load average of all 3 nodes in addition to the raw test result to help identify trends in CPU utilization.
|
||||||
|
|
||||||
|
Similarly, our hypothesis - that more dedicated OSD CPUs is better - and open questions remain the same:
|
||||||
|
|
||||||
|
* Is doing no limit at all (pure scheduler allocations) better than any fixed limits?
|
||||||
|
* Is one of the numbers above optimal (no obvious performance hit, and diminishing returns thereafter).
|
||||||
|
|
||||||
|
## Test Results
|
||||||
|
|
||||||
|
### Sequential Bandwidth Read & Write
|
||||||
|
|
||||||
|
Sequential bandwidth tests tend to be "ideal situation" tests, not necessarily applicable to VM workloads except in very particular circumstances. However they can be useful for seeing the absolute maximum raw throughput performance that can be attained by the storage subsystem.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Sequential read shows a significant difference with the NVMe SSDs and newer CPUs versus the SATA SSDs in the previous post, beyond just the near doubling of speed thanks to the higher performance of the NVMe drives. In that post, no-limit sequential read was by far the highest, and this was an outlier result.
|
||||||
|
|
||||||
|
This test instead shows a result much more inline with expectations: no-limit performance is significantly lower than the dedicated limits, and by a relatively large 13% margin.
|
||||||
|
|
||||||
|
The best result was with the 4+1+27 configuration, with a decreasing stair-step pattern to the 4+4+24 configuration. However, all the limit tests were within 1% of each other, which I would consider the margin of error.
|
||||||
|
|
||||||
|
Thus, this test upholds the hypothesis: a limit is a good thing to avoid scheduler overhead, though there is no clear winner in terms of the number of dedicated OSD CPUs.
|
||||||
|
|
||||||
|
CPU load does show an interesting drop with the 4+3+25 configuration before jumping back up in the 4+4+24 configuration, however all nodes track each other, and the node with the widest swing (node3) was not a coordinator in any of the tests, so this is likely due to the VMs rather than the OSD processes.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Sequential write shows a similar stair-step pattern, though more pronounced. The no-limit performance is actually the second-best here, which is an interesting result, though again the results are all within a nearly margin-of-error 2% of each other.
|
||||||
|
|
||||||
|
The highest performance was the 4+2+26, though interestingly the 4+3+25 configuration performed the worst. Though again since these are all within a reasonable margin of error, I think we can conclude that for sequential writes, there is no conclusive benefit to a CPU limit.
|
||||||
|
|
||||||
|
System load follows the same trend as did sequential reads, with a drop off for each test until a bottom with the 4+3+25 configuration before rebounding slightly higher for the 4+4+24 configuration. I'm not sure at this point if these load numbers are even showing anything at all, but it is still interesting to see.
|
||||||
|
|
||||||
|
Finally, in watching the live results, there was full saturation of the 10GbE NIC during this test:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
This is completely expected, since our configuration uses a `copies=3` replication mode, so we should expect about 50% of the performance of the sequential reads, since every write is replicated over the network twice. It definitely proves that our limitation here is not the drives but the network, but also shows that this is not completely linear, since instead of 50% we're actually seeing about 70% of the maximum network bandwidth in actual performance.
|
||||||
|
|
||||||
|
### Random IOPS Read & Write
|
||||||
|
|
||||||
|
Random IO tests tend to better reflect the realities of VM clusters, and thus are likely the most applicable to PVC.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Random read shows a similar trend as sequential reads, and one completely in-line with our hypothesis. There is definitely a more pronounced trend here though, with a clear increase in performance of about 8% between the worst (4+1+27) and best (4+8+24) results.
|
||||||
|
|
||||||
|
However this test shows yet another stair-step pattern where the 4+2+26 configuration outpaced the 4+3+25 configuration. I suspect this might be due to the on-package NUMA domains and chiplet architecture of the Epyc chips, whereby the 3rd core has to traverse a higher-latency interconnect and thus hurts performance when going from 2 to 3 dedicated CPUs, though more in-depth testing would be needed to definitively confirm this.
|
||||||
|
|
||||||
|
System load continues to show almost no correlation at all with performance, and thus can be ignored.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Random writes bring back the strange anomaly that we saw with sequential reads in the previous post. Namely, that for some reason, the no-limit configuration performs significantly better than all limits. After that, the performance seems to scale roughly linearly with each increase in CPU core count, exactly as was seen with the SATA SSDs in the previous post.
|
||||||
|
|
||||||
|
One possible explanation is again the NUMA domains within the CPU package. The Linux kernel is aware of these limitations, and thus could potentially be assigning CPU resources to optimize performance, especially for the CPU-to-NIC pipeline. Again this would need some more thorough, in-depth testing to confirm, but it is my hunch that this is occurring.
|
||||||
|
|
||||||
|
The system load here shows another possibly explanation for the anomalous results though. Random writes seem to hit the CPU much harder than the other tests, and the baseline load of all nodes with the no-limit configuration is about 8, which would indicate that the OSD processes want about 8 CPU cores per OSD here. Adding in the 4+8+20 configuration, we can see that this is definitely higher than all the other limit configurations, but is still less than the no-limit configuration, so this doesn't seem to be the *only* explanation. It does appear that the scaling is not linear as well, since doubling the cores only brought us about half-way up to the no-limit performance, thus pointing towards the NUMA limit as well and giving us a pretty conclusively "yes" answer to our first main question.
|
||||||
|
|
||||||
|
For write-heavy workloads, this is a very important takeaway. This test clearly shows that the no-limit configuration is ideal for random writes on NVMe drives, as the Linux scheduler seems better able to distribute the load among many cores. I'd be interested to see how this is affected by many CPU-heavy noisy-neighbour VMs, but testing this is extremely difficult and thus is not in scope for this series.
|
||||||
|
|
||||||
|
### 95th Percentile Latency Read & Write
|
||||||
|
|
||||||
|
Latency tests show the "best case" scenarios for the time individual writes can take to complete. A lower latency means the system can service writes far quicker. With Ceph, due to the inter-node replication, latency will always be based primarily on network latency, though there are some gains to be had.
|
||||||
|
|
||||||
|
These tests are based on the 95th percentile latency numbers; thus, these are the times in which 95% of operations will have completed, ignoring the outlying 5%. Though not shown here, the actual FIO test results show a fairly consistent spread up until the 99.9th percentile, so this number was chosen as a "good average" for everyday performance.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Read latency shows a consistent downwards trend throughout the configurations, though with the 4+4+24 and 4+8+24 results being outliers. However the latency here is very good, only 1/4 of the latency of the SATA SSDs in the previous post, and the results are all so low that they are not likely to be particularly impactful. We're really pushing raw network latency and packet processing overheads with these results.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Write latency also shows a major improvement over SATA SSDs, being only 1/5 of those results. It also, like the read latency, shows a fairly limited spread in results, though with a similar uptick from 4+3+25 to 4+4+24 to 4+8+20. Like read latency, I don't believe these numbers are significant enough to show a major benefit to the CPU limits.
|
||||||
|
|
||||||
|
## Conclusions
|
||||||
|
|
||||||
|
Our results with NVMe drives shows some interesting differences from SATA SSDs. For sequential reads, the outlier result of the SATA drives is eliminated, but it is replaced instead with an outlier result for random writes, likely one of the most important metrics when talking of VM workloads. In addition the better CPUs are also likely impacting the results, and the limitations of the 10GbE networking really come into play here: I expect we might see some differences if we were running on a much faster network interconnect.
|
||||||
|
|
||||||
|
Based primarily on that one result, I think we can safely conclude that while there are some minor gains to be made with sequential read performance and some more major gains with random read performance, overall a CPU limit on the Ceph OSD processes does not seem to be worth the trade-offs for NVMe SSDs, at least in write-heavy workloads. If your workload is extremely random-read-heavy, then a limit might be beneficial, but if it is more write-heavy, CPU limits seem to hurt more than help. This is in contrast to SATA SSDs on the older processors where there were clear benefits to the CPU limit.
|
||||||
|
|
||||||
|
The final part of this series will investigate the results if we put multiple OSDs on one NVMe drive and then rerun these same tests. Stay tuned for that in the next few months!
|
After Width: | Height: | Size: 58 KiB |
After Width: | Height: | Size: 57 KiB |
BIN
content/en/posts/pvc-ceph-tuning-adventures-part-3/rand-read.png
Normal file
After Width: | Height: | Size: 58 KiB |
After Width: | Height: | Size: 63 KiB |
BIN
content/en/posts/pvc-ceph-tuning-adventures-part-3/seq-read.png
Normal file
After Width: | Height: | Size: 67 KiB |
After Width: | Height: | Size: 487 KiB |
BIN
content/en/posts/pvc-ceph-tuning-adventures-part-3/seq-write.png
Normal file
After Width: | Height: | Size: 62 KiB |
After Width: | Height: | Size: 487 KiB |
173
content/en/posts/pvc-ceph-tuning-adventures-part-4/index.md
Normal file
@ -0,0 +1,173 @@
|
|||||||
|
---
|
||||||
|
title: "Adventures in Ceph tuning, part 4"
|
||||||
|
description: "A third follow-up to my analysis of Ceph system tuning for Hyperconverged Infrastructure"
|
||||||
|
date: 2024-09-23
|
||||||
|
tags:
|
||||||
|
- PVC
|
||||||
|
- Ceph
|
||||||
|
- Development
|
||||||
|
- Systems Administration
|
||||||
|
---
|
||||||
|
|
||||||
|
In 2021, [I made a post](https://www.boniface.me/posts/pvc-ceph-tuning-adventures/) about Ceph storage tuning with my [my Hyperconverged Infrastructure (HCI) project PVC](https://github.com/parallelvirtualcluster/pvc), and [in 2022](https://www.boniface.me/posts/pvc-ceph-tuning-adventures-part-2/) and [in 2023](https://www.boniface.me/posts/pvc-ceph-tuning-adventures-part-3/) I wrote two follow-ups. The original post covered some ideas about tuning, the second clarified the methodologies and tests to provide more accurate data, and the third covered the differences between SATA and NVMe SSDs and more modern systems.
|
||||||
|
|
||||||
|
At the end of that second part, I said:
|
||||||
|
|
||||||
|
> The final part of this series will investigate the results if we put multiple OSDs on one NVMe drive and then rerun these same tests.
|
||||||
|
|
||||||
|
Well, here is that final part!
|
||||||
|
|
||||||
|
Like parts 2 and 3, I'll jump right into the cluster specifications, changes to the tests, and results. If you haven't read the first 3 parts yet, I suggest you do so now to get the proper context before proceeding.
|
||||||
|
|
||||||
|
## The Cluster Specs (even better)
|
||||||
|
|
||||||
|
Parts 1 and 2 used my own home server setup with older components for analysis, then part 3 used more modern AMD Epyc and NVMe-based Dell systems through my employer instead. In this part, we have significantly more powerful machines, featuring a 64-core high speed Epyc processor, 1TB of RAM, and 2x 100GbE ports per node. Like all previous test clusters, there are 3 nodes:
|
||||||
|
|
||||||
|
| **Part**           | **node1 + node2 + node3** |
|
||||||
|
| :-------------------------------------------------------------- | :------------------------ |
|
||||||
|
| Chassis | Dell R6615 |
|
||||||
|
| CPU | 1x [AMD 9534](https://www.amd.com/en/products/processors/server/epyc/4th-generation-9004-and-8004-series/amd-epyc-9534.html) (64 core, 128 thread, 2.45 GHz base, 3.7 GHz maximum boost, 3.55 GHz all-core boost) |
|
||||||
|
| Memory | 1024 GB DDR5 (16x 64 GB) |
|
||||||
|
| OSD DB/WAL | N/A |
|
||||||
|
| OSD Data | 4x Dell CM7 6.4TB U.2 NVMe SSD |
|
||||||
|
| Networking | 2x Broadcom BCM57508 100GbE in 802.3ad (LACP) bond |
|
||||||
|
|
||||||
|
## Test Outline and Hypothesis
|
||||||
|
|
||||||
|
The primary hypothesis of this set of benchmarks is that there is a linear scaling of performance the more OSD processes that are added to the Ceph subsystem. In addition, a secondary hypothesis is that adding additional OSD processes per NVMe disk (i.e. splitting a single NVMe disk into several smaller "virtual" NVMe disks) will increase performance.
|
||||||
|
|
||||||
|
Based on the results of the last post, I've focused this test suite on two key areas: (1) determining the levels of performance scaling across multiple OSD processes; and (2) determining exactly how many OSDs will optimize performance on such a powerful system. CPU sets provided some very contradictory results for NVMe drives in part 3, so I have excluded them from any of the testing here, since I do not believe them to be significantly useful in most workloads. In addition, these tests were conducted on a completely empty cluster, with no VMs active, so these tests are truly of the theoretical maximum performance of the Ceph subsystem on the given hardware and nothing else.
|
||||||
|
|
||||||
|
There are 3 distinct OSD configurations being tested:
|
||||||
|
|
||||||
|
* 1 OSD process per disk (6.4TB each)
|
||||||
|
* 2 OSD processes per disk (3.2TB each)
|
||||||
|
* 4 OSD processes per disk (1.6TB each)
|
||||||
|
|
||||||
|
Then within each configuration, I ran tests with 1 physical disk, 2 physical disks, 3 physical disks, and all 4 physical disks active, providing a 3x4 matrix of 12 test types for each configuration.
|
||||||
|
|
||||||
|
Within each test type, I ran 3 benchmarks to provide an average, leveraging PVC's built-in benchmarking system, identical to the previous 2 posts, and plotted the results.
|
||||||
|
|
||||||
|
As preparation for this test, I implemented a new benchmark format in PVC (benchmark format 2, available in version 0.9.102) which, in addition to the previous FIO performance output, also collects and presents additional information on the overall (percentage) CPU and memory utilization of the testing node's Ceph monitor and OSD processes, as well as the testing node's average network throughput on the `brstorage` backend interface during the test. This helps ensure that all possible bottlenecks in the tests are accounted for and recorded, and provides useful numbers for comparison there.
|
||||||
|
|
||||||
|
The results here are presented with very minimal analysis, as the goal here is mostly to present the results on such a large cluster, and the hypothesis is quite general. Overall conclusions will be presented below the results.
|
||||||
|
|
||||||
|
## Test Results
|
||||||
|
|
||||||
|
The test results are provided as graphs of the various test phases and number of active disks for each type of test as outlined above. In addition to raw performance numbers (IOPS + latency for random I/O tests and bandwidth + latency for sequential I/O tests), I also provide graphs of the CPU utilization (total, `ceph-mon`, and `ceph-osd`), memory utilization (same), and network throughput (total, send, and receive) to provide additional context and to help spot any bottlenecks.
|
||||||
|
|
||||||
|
### Sequential I/O (high queue depth, high block size)
|
||||||
|
|
||||||
|
These tests are primarily to determine the maximum possible read and write speed of sequential data to the cluster, for instance copying large files. Within the PVC system, this is a fairly rare occurrence, but this test attempts to saturate the system with as much data as possible to find bottlenecks.
|
||||||
|
|
||||||
|
#### Read
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Sequential read speed does not seem to scale significantly with the number of OSD processes, being significantly above 45GB/s in all cases. There does seem to be a peak with 2 OSD processes per NVMe disk with both 1 and 4 disks, but this trend does not hold for 2 and 3 disks, or scale evenly, so we can conclude that there is no real benefit to sequential read from having either more OSDs total, or more OSD processes on each NVMe disk.
|
||||||
|
|
||||||
|
CPU utilization remains steady for all configurations, so this particular test is not taxing on the CPU. Memory usage increases steadily as would be expected from the increase in the number of OSD processes. Finally network throughput is minimal, as reads are done from the "closest" OSD and thus would always remain on the same system.
|
||||||
|
|
||||||
|
#### Write
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Sequential write speed seems to scale fairly dramatically between 1 and 4 OSDs per node, with over double the throughput, but this very quickly levels out at 4 total OSDs per node, and additional OSDs do not significantly increase performance further, and in fact slightly harm it, with the peak performance being a 2-disk-2-OSD-per-disk configuration. Latency also begins to increase significantly both as the number of disks increase, and as the number of OSDs per disk increases. Thus for write latency-sensitive workloads, fewer total OSDs is indeed better, at the cost of overall throughput.
|
||||||
|
|
||||||
|
OSD CPU utilization does climb in a similar pattern to the performance, indicating the tight correlation between those values, and memory utilization followes the standard expected increase from more OSD processes. Network utilization reveals a possible bottleneck here, the likely cause of both the latency increase and performance cap: total throughput on the two NICs caps out at a combined 100Gbps on multiple tests; given that these cards are full-duplex, it would seem the bottleneck is somewhere else, perhaps in the kernel or within the CPU I/O layer. This also seems to show a theoretical maximum write performance in general of about 6.5GB/s.
|
||||||
|
|
||||||
|
### Random I/O (high queue-depth, low block size)
|
||||||
|
|
||||||
|
High queue-depth random I/O is the primary real-world metric of a PVC cluster's storage subsystem, as many VMs all performing small operations is the normal storage load of a cluster. This test attempts to saturate the system with as much I/O as possible simulating VM traffic to determine the highest number of simultaneous I/O operations per second (IOPS).
|
||||||
|
|
||||||
|
#### Read
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Random read performance shows a similar pattern of performance scaling to sequential writes, with a clear jump between 1 and 4 OSDs per node, before similarly maxing out at around 120,000 IOPS. There is a clear increase as more OSDs are added to each disk as well, showing that a single OSD process is not quite enough to get all the read performance out of the NVMe disk.
|
||||||
|
|
||||||
|
CPU and memory utilization are identical to sequential read, and network throughput, while higher, is still less than 3.5Gbps total with plenty of available performance there.
|
||||||
|
|
||||||
|
#### Write
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Random write performance continues to show the same trend as random read and sequential write in terms of scaling from 1 to 4 OSDs before maxing out, with a similar signficant jump followed by a clear plateau. Latency also follows the same trajectory as sequential write, though overall much lower.
|
||||||
|
|
||||||
|
CPU utilization does climb fairly significantly as the total number of OSDs increases, while memory utilization follows the same trends based on total OSD count. Network throughput is higher still, matching the performance trend and maxing out around 6Gbps of total throughput.
|
||||||
|
|
||||||
|
### Random I/O (low queue-depth, low block size)
|
||||||
|
|
||||||
|
Low queue-depth random I/O primarily tests the actual latency of individual requests in the Ceph subsystem, to determine what the theoretical "best case" is for any single I/O operation to the storage cluster, without the I/O queue adding additional latency. While most real-world applications will see at least some queue latency due to noisy neighbours, this test shows the best case.
|
||||||
|
|
||||||
|
#### Read
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Single queue-depth random reads show an expected diminishing return as more OSDs are added, along with a very slight increase in latency. This is expected because individual read requests must hit more and more disks, and thus shuffle more and more data around between the PCIe bus, CPU, and main memory.
|
||||||
|
|
||||||
|
CPU utilization is consistently low, while memory follows the usual trend. Network throughput is also low but follows a slight downward trajectory matching the slight drops in performance.
|
||||||
|
|
||||||
|
#### Write
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Single queue-depth random writes show a similar dimishing return to reads, with spikier latency.
|
||||||
|
|
||||||
|
CPU, memory, and network throughput shows similar trends as well though network throughput is overall quite a bit higher as expected.
|
||||||
|
|
||||||
|
## Overall Conclusions and Key Lessons Learned
|
||||||
|
|
||||||
|
For sequentual read I/O, there is a clear benefit to more OSDs up to a point, with the maximum performance falling somewhere around 8 total OSD processes on 4 disks, or 4 total OSD processes on 1 disk. Overall for random reads there does not seem to be a clear performance benefit to more disks beyond 2, but there is a benefit to more OSD processes on those disks, especially with 1 disk.
|
||||||
|
|
||||||
|
For sequential write I/O, there is a similar benefit to more OSDs up to about 4 total, at which point it seems that network throughput - or, more specifically, throughput between the internal system components - becomes a bottleneck. CPU utilization also remains fairly low at ~10% maximum, so this does not appear to be a constraint on these systems.
|
||||||
|
|
||||||
|
Overall, while sequential performance is purely synthetic, these results do help us draw some useful conclusions: namely, that 1-2 disks per node is plenty, and that ~2 OSD processes per disk provides close to optimal performance.
|
||||||
|
|
||||||
|
For random read I/O, the returns of more OSD processes is signficant, with noticeable scaling, though nowhere close to linear once above 4 total OSD processes per node.
|
||||||
|
|
||||||
|
For random write I/O, the story is similar, with a clear peak around 4 total OSD processes per node, but whether these are on 1 or 4 disks does not seem to matter. Where the bottleneck seems to be on this system would need to be investigated further.
|
||||||
|
|
||||||
|
Overall, random I/O performance definitely points to a sweet spot of 4 OSD processes per node, though this appears to be a clear maximum; one disk per node with 4 OSD processes can also maintain the same throughput.
|
||||||
|
|
||||||
|
For low queue-depth I/O, as expected fewer OSDs are better in terms of performance, but latency seems to scale fairly consistently with no major changes, and thus, the number of disks does not significantly alter this metric for good or bad.
|
||||||
|
|
||||||
|
Thus, our overall conclusion would be that somewhere between 1 and 4 OSD processes is optimal with these systems, and that this seems to hold true regardless of the number of actual underlying disks. In terms of our hypotheses, we can definitely say that scaling is not linear beyond 4 OSD processes, and that for any case where there is a clear benefit, whether this is done purely with multiple processes on one disks, or on multiple disks, does not matter. Given this particular hardware configuration, the optimal choice would be 2 OSD processes per disk with all 4 disks being utilized, at least from a performance standpoint; more disks of course mean more space, which is more likely to be the constraint in real deployments versus a few percentage points of performance.
|
||||||
|
|
||||||
|
Thank you for joining me for this long-running series, which has hopefully provided some useful information into the scaling of storage performance within PVC and in small Ceph clusters more broadly. Hopefully you found this information useful; I know I have, and have made countless tweaks to the PVC system as a result! Happy serving.
|
@ -0,0 +1,172 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="160mm" height="90mm" viewBox="0 0 16000 9000" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="28.222" stroke-linejoin="round" xml:space="preserve">
|
||||||
|
<path fill="rgb(255,255,255)" stroke="none" d="M 7987,8986 L -13,8986 -13,-13 15986,-13 15986,8986 7987,8986 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8121,6215 L 2715,6215 2715,1460 13527,1460 13527,6215 8121,6215 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6213 L 2715,6213"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,5534 L 2715,5534"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4855 L 2715,4855"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4176 L 2715,4176"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3497 L 2715,3497"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2817 L 2715,2817"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2138 L 2715,2138"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6363 L 2715,6213"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6363 L 2715,6213"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6363 L 3698,6213"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6363 L 3698,6213"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6363 L 4681,6213"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6363 L 4681,6213"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6363 L 5664,6213"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6363 L 5664,6213"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6363 L 6647,6213"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6363 L 6647,6213"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6363 L 7630,6213"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6363 L 7630,6213"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6363 L 8612,6213"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6363 L 8612,6213"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6363 L 9595,6213"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6363 L 9595,6213"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6363 L 10578,6213"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6363 L 10578,6213"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6363 L 11561,6213"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6363 L 11561,6213"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6363 L 12544,6213"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6363 L 12544,6213"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6363 L 13527,6213"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6363 L 13527,6213"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6213 L 13527,6213"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6213 L 2715,6213"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6213 L 2715,6213"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5534 L 2715,5534"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5534 L 2715,5534"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4855 L 2715,4855"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4855 L 2715,4855"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4176 L 2715,4176"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4176 L 2715,4176"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3497 L 2715,3497"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3497 L 2715,3497"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2817 L 2715,2817"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2817 L 2715,2817"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2138 L 2715,2138"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2138 L 2715,2138"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6213 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,5738 L 13527,5738"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,5738 L 13527,5738"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,5262 L 13527,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,5262 L 13527,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,4787 L 13527,4787"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,4787 L 13527,4787"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,4312 L 13527,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,4312 L 13527,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,3837 L 13527,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,3837 L 13527,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,3361 L 13527,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,3361 L 13527,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,2885 L 13527,2885"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,2885 L 13527,2885"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,2410 L 13527,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,2410 L 13527,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,1934 L 13527,1934"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,1934 L 13527,1934"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,1459 L 13527,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,1459 L 13527,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6214 L 13527,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 2715,4705 L 3698,3508 4681,2388 5664,2928 6647,2564 7630,2526 8612,2986 9595,2385 10578,2299 11561,2909 12544,2388 13527,2787"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 2590,4580 L 2590,4830 2840,4830 2840,4580 2590,4580 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 2590,4580 L 2590,4830 2840,4830 2840,4580 2590,4580 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 3573,3383 L 3573,3633 3823,3633 3823,3383 3573,3383 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 3573,3383 L 3573,3633 3823,3633 3823,3383 3573,3383 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 4556,2263 L 4556,2513 4806,2513 4806,2263 4556,2263 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 4556,2263 L 4556,2513 4806,2513 4806,2263 4556,2263 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 5539,2803 L 5539,3053 5789,3053 5789,2803 5539,2803 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 5539,2803 L 5539,3053 5789,3053 5789,2803 5539,2803 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 6522,2439 L 6522,2689 6772,2689 6772,2439 6522,2439 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 6522,2439 L 6522,2689 6772,2689 6772,2439 6522,2439 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 7505,2401 L 7505,2651 7755,2651 7755,2401 7505,2401 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 7505,2401 L 7505,2651 7755,2651 7755,2401 7505,2401 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 8487,2861 L 8487,3111 8737,3111 8737,2861 8487,2861 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 8487,2861 L 8487,3111 8737,3111 8737,2861 8487,2861 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 9470,2260 L 9470,2510 9720,2510 9720,2260 9470,2260 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 9470,2260 L 9470,2510 9720,2510 9720,2260 9470,2260 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 10453,2174 L 10453,2424 10703,2424 10703,2174 10453,2174 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 10453,2174 L 10453,2424 10703,2424 10703,2174 10453,2174 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 11436,2784 L 11436,3034 11686,3034 11686,2784 11436,2784 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 11436,2784 L 11436,3034 11686,3034 11686,2784 11436,2784 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 12419,2263 L 12419,2513 12669,2513 12669,2263 12419,2263 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 12419,2263 L 12419,2513 12669,2513 12669,2263 12419,2263 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13402,2662 L 13402,2912 13652,2912 13652,2662 13402,2662 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13402,2662 L 13402,2912 13652,2912 13652,2662 13402,2662 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-width="80" stroke-linejoin="round" d="M 2715,4978 L 3698,4917 4681,4784 5664,4922 6647,4858 7630,4828 8612,4876 9595,4861 10578,4904 11561,4832 12544,4960 13527,4837"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 2590,4978 L 2715,5103 2840,4978 2715,4853 2590,4978 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 2590,4978 L 2715,5103 2840,4978 2715,4853 2590,4978 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 3573,4917 L 3698,5042 3823,4917 3698,4792 3573,4917 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 3573,4917 L 3698,5042 3823,4917 3698,4792 3573,4917 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 4556,4784 L 4681,4909 4806,4784 4681,4659 4556,4784 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 4556,4784 L 4681,4909 4806,4784 4681,4659 4556,4784 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 5539,4922 L 5664,5047 5789,4922 5664,4797 5539,4922 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 5539,4922 L 5664,5047 5789,4922 5664,4797 5539,4922 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 6522,4858 L 6647,4983 6772,4858 6647,4733 6522,4858 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 6522,4858 L 6647,4983 6772,4858 6647,4733 6522,4858 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 7505,4828 L 7630,4953 7755,4828 7630,4703 7505,4828 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 7505,4828 L 7630,4953 7755,4828 7630,4703 7505,4828 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 8487,4876 L 8612,5001 8737,4876 8612,4751 8487,4876 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 8487,4876 L 8612,5001 8737,4876 8612,4751 8487,4876 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 9470,4861 L 9595,4986 9720,4861 9595,4736 9470,4861 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 9470,4861 L 9595,4986 9720,4861 9595,4736 9470,4861 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 10453,4904 L 10578,5029 10703,4904 10578,4779 10453,4904 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 10453,4904 L 10578,5029 10703,4904 10578,4779 10453,4904 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 11436,4832 L 11561,4957 11686,4832 11561,4707 11436,4832 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 11436,4832 L 11561,4957 11686,4832 11561,4707 11436,4832 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 12419,4960 L 12544,5085 12669,4960 12544,4835 12419,4960 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 12419,4960 L 12544,5085 12669,4960 12544,4835 12419,4960 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 13402,4837 L 13527,4962 13652,4837 13527,4712 13402,4837 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 13402,4837 L 13527,4962 13652,4837 13527,4712 13402,4837 Z"/>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 740 8746)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="740" y="8746"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 1723 8746)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1723" y="8746"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 2706 8746)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2706" y="8746"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 3689 8746)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="3689" y="8746"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 4672 8746)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="4672" y="8746"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 5655 8746)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="5655" y="8746"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 6638 8746)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="6638" y="8746"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 7621 8746)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="7621" y="8746"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 8604 8746)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="8604" y="8746"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 9587 8746)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="9587" y="8746"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 10570 8746)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="10570" y="8746"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 11552 8746)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="11552" y="8746"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1539" y="6334"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">95000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1354" y="5655"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">100000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1354" y="4976"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">105000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1354" y="4296"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">110000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1354" y="3617"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">115000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1354" y="2937"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">120000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1354" y="2258"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">125000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1354" y="1579"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">130000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="6335"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1500</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="5859"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1700</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="5383"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1900</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="4908"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2100</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="4432"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2300</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="3957"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2500</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="3481"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2700</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="3005"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2900</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="2530"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3100</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="2054"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3300</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="1579"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3500</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="459px" font-weight="400"><tspan class="TextPosition" x="3409" y="739"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Random Read (4k block size, 64 queue depth)</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="388px" font-weight="400"><tspan class="TextPosition" x="6083" y="1248"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Throughput & Latency</tspan></tspan></tspan></text>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 13377,8056 L 14177,8056"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13671,7951 L 13671,8162 13882,8162 13882,7951 13671,7951 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13671,7951 L 13671,8162 13882,8162 13882,7951 13671,7951 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-width="80" stroke-linejoin="round" d="M 13377,8554 L 14177,8554"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 13671,8554 L 13777,8660 13882,8554 13777,8449 13671,8554 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 13671,8554 L 13777,8660 13882,8554 13777,8449 13671,8554 Z"/>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14277" y="8176"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">IOPS</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14277" y="8674"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Latency</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-90 973 5402)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="318px" font-weight="400"><tspan class="TextPosition" x="973" y="5402"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">IOPS (higher is better)</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-90 15227 5763)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="318px" font-weight="400"><tspan class="TextPosition" x="15227" y="5763"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Latency μs (lower is better)</tspan></tspan></tspan></text>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 25 KiB |
@ -0,0 +1,166 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="160mm" height="90mm" viewBox="0 0 16000 9000" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="28.222" stroke-linejoin="round" xml:space="preserve">
|
||||||
|
<path fill="rgb(255,255,255)" stroke="none" d="M 7987,8986 L -13,8986 -13,-13 15986,-13 15986,8986 7987,8986 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8121,6215 L 2715,6215 2715,1460 13527,1460 13527,6215 8121,6215 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,5534 L 2715,5534"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4855 L 2715,4855"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4176 L 2715,4176"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3497 L 2715,3497"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2817 L 2715,2817"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2138 L 2715,2138"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,1458 L 2715,1458"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5534 L 2715,5534"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5534 L 2715,5534"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4855 L 2715,4855"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4855 L 2715,4855"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4176 L 2715,4176"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4176 L 2715,4176"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3497 L 2715,3497"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3497 L 2715,3497"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2817 L 2715,2817"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2817 L 2715,2817"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2138 L 2715,2138"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2138 L 2715,2138"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1458 L 2715,1458"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1458 L 2715,1458"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 2715,1458"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 2715,2546 L 3698,2274 4681,2070 5664,2206 6647,2070 7630,2002 8612,2070 9595,2002 10578,1934 11561,2138 12544,2002 13527,2002"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 2590,2421 L 2590,2671 2840,2671 2840,2421 2590,2421 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 2590,2421 L 2590,2671 2840,2671 2840,2421 2590,2421 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 3573,2149 L 3573,2399 3823,2399 3823,2149 3573,2149 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 3573,2149 L 3573,2399 3823,2399 3823,2149 3573,2149 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 4556,1945 L 4556,2195 4806,2195 4806,1945 4556,1945 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 4556,1945 L 4556,2195 4806,2195 4806,1945 4556,1945 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 5539,2081 L 5539,2331 5789,2331 5789,2081 5539,2081 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 5539,2081 L 5539,2331 5789,2331 5789,2081 5539,2081 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 6522,1945 L 6522,2195 6772,2195 6772,1945 6522,1945 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 6522,1945 L 6522,2195 6772,2195 6772,1945 6522,1945 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 7505,1877 L 7505,2127 7755,2127 7755,1877 7505,1877 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 7505,1877 L 7505,2127 7755,2127 7755,1877 7505,1877 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 8487,1945 L 8487,2195 8737,2195 8737,1945 8487,1945 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 8487,1945 L 8487,2195 8737,2195 8737,1945 8487,1945 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 9470,1877 L 9470,2127 9720,2127 9720,1877 9470,1877 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 9470,1877 L 9470,2127 9720,2127 9720,1877 9470,1877 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 10453,1809 L 10453,2059 10703,2059 10703,1809 10453,1809 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 10453,1809 L 10453,2059 10703,2059 10703,1809 10453,1809 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 11436,2013 L 11436,2263 11686,2263 11686,2013 11436,2013 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 11436,2013 L 11436,2263 11686,2263 11686,2013 11436,2013 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 12419,1877 L 12419,2127 12669,2127 12669,1877 12419,1877 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 12419,1877 L 12419,2127 12669,2127 12669,1877 12419,1877 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13402,1877 L 13402,2127 13652,2127 13652,1877 13402,1877 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13402,1877 L 13402,2127 13652,2127 13652,1877 13402,1877 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-width="80" stroke-linejoin="round" d="M 2715,5194 L 3698,5126 4681,5058 5664,5126 6647,5058 7630,5058 8612,5058 9595,5058 10578,5058 11561,5058 12544,5058 13527,5058"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 2590,5069 L 2715,5319 2840,5069 2590,5069 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 2590,5069 L 2715,5319 2840,5069 2590,5069 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 3573,5001 L 3698,5251 3823,5001 3573,5001 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 3573,5001 L 3698,5251 3823,5001 3573,5001 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 4556,4933 L 4681,5183 4806,4933 4556,4933 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 4556,4933 L 4681,5183 4806,4933 4556,4933 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 5539,5001 L 5664,5251 5789,5001 5539,5001 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 5539,5001 L 5664,5251 5789,5001 5539,5001 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 6522,4933 L 6647,5183 6772,4933 6522,4933 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 6522,4933 L 6647,5183 6772,4933 6522,4933 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 7505,4933 L 7630,5183 7755,4933 7505,4933 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 7505,4933 L 7630,5183 7755,4933 7505,4933 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 8487,4933 L 8612,5183 8737,4933 8487,4933 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 8487,4933 L 8612,5183 8737,4933 8487,4933 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 9470,4933 L 9595,5183 9720,4933 9470,4933 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 9470,4933 L 9595,5183 9720,4933 9470,4933 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 10453,4933 L 10578,5183 10703,4933 10453,4933 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 10453,4933 L 10578,5183 10703,4933 10453,4933 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 11436,4933 L 11561,5183 11686,4933 11436,4933 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 11436,4933 L 11561,5183 11686,4933 11436,4933 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 12419,4933 L 12544,5183 12669,4933 12419,4933 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 12419,4933 L 12544,5183 12669,4933 12419,4933 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 13402,4933 L 13527,5183 13652,4933 13402,4933 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 13402,4933 L 13527,5183 13652,4933 13402,4933 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 2715,6214 L 3698,6214 4681,6214 5664,6214 6647,6214 7630,6214 8612,6214 9595,6214 10578,6214 11561,6214 12544,6214 13527,6214"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 2590,6214 L 2715,6339 2840,6214 2715,6089 2590,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 2590,6214 L 2715,6339 2840,6214 2715,6089 2590,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 3573,6214 L 3698,6339 3823,6214 3698,6089 3573,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 3573,6214 L 3698,6339 3823,6214 3698,6089 3573,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 4556,6214 L 4681,6339 4806,6214 4681,6089 4556,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 4556,6214 L 4681,6339 4806,6214 4681,6089 4556,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 5539,6214 L 5664,6339 5789,6214 5664,6089 5539,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 5539,6214 L 5664,6339 5789,6214 5664,6089 5539,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 6522,6214 L 6647,6339 6772,6214 6647,6089 6522,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 6522,6214 L 6647,6339 6772,6214 6647,6089 6522,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 7505,6214 L 7630,6339 7755,6214 7630,6089 7505,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 7505,6214 L 7630,6339 7755,6214 7630,6089 7505,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 8487,6214 L 8612,6339 8737,6214 8612,6089 8487,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 8487,6214 L 8612,6339 8737,6214 8612,6089 8487,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 9470,6214 L 9595,6339 9720,6214 9595,6089 9470,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 9470,6214 L 9595,6339 9720,6214 9595,6089 9470,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 10453,6214 L 10578,6339 10703,6214 10578,6089 10453,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 10453,6214 L 10578,6339 10703,6214 10578,6089 10453,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 11436,6214 L 11561,6339 11686,6214 11561,6089 11436,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 11436,6214 L 11561,6339 11686,6214 11561,6089 11436,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 12419,6214 L 12544,6339 12669,6214 12544,6089 12419,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 12419,6214 L 12544,6339 12669,6214 12544,6089 12419,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13402,6214 L 13527,6339 13652,6214 13527,6089 13402,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13402,6214 L 13527,6339 13652,6214 13527,6089 13402,6214 Z"/>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 740 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="740" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 1723 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1723" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 2706 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2706" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 3689 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="3689" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 4672 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="4672" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 5655 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="5655" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 6638 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="6638" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 7621 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="7621" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 8604 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="8604" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 9587 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="9587" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 10570 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="10570" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 11552 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="11552" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="6335"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="5655"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="4976"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="4296"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="3617"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="2937"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">5</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="2258"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">6</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="1578"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">7</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="459px" font-weight="400"><tspan class="TextPosition" x="3409" y="740"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Random Read (4k block size, 64 queue depth)</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="388px" font-weight="400"><tspan class="TextPosition" x="3184" y="1248"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">CPU Utilization of 128 logical cores, primary coordinator</tspan></tspan></tspan></text>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 13231,7856 L 14031,7856"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13525,7751 L 13525,7962 13736,7962 13736,7751 13525,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13525,7751 L 13525,7962 13736,7962 13736,7751 13525,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-width="80" stroke-linejoin="round" d="M 13231,8230 L 14031,8230"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 13525,8125 L 13631,8336 13736,8125 13525,8125 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 13525,8125 L 13631,8336 13736,8125 13525,8125 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 13231,8604 L 14031,8604"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13525,8604 L 13631,8710 13736,8604 13631,8499 13525,8604 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13525,8604 L 13631,8710 13736,8604 13631,8499 13525,8604 Z"/>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="7976"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Total</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="8350"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">ceph-osd</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="8724"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">ceph-mon</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-90 1573 6200)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="318px" font-weight="400"><tspan class="TextPosition" x="1573" y="6200"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">CPU Utilization % (lower is better)</tspan></tspan></tspan></text>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 23 KiB |
@ -0,0 +1,162 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="160mm" height="90mm" viewBox="0 0 16000 9000" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="28.222" stroke-linejoin="round" xml:space="preserve">
|
||||||
|
<path fill="rgb(255,255,255)" stroke="none" d="M 7987,8986 L -13,8986 -13,-13 15986,-13 15986,8986 7987,8986 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8121,6215 L 2715,6215 2715,1460 13527,1460 13527,6215 8121,6215 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,5421 L 2715,5421"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4628 L 2715,4628"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3044 L 2715,3044"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2251 L 2715,2251"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5421 L 2715,5421"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5421 L 2715,5421"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4628 L 2715,4628"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4628 L 2715,4628"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3044 L 2715,3044"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3044 L 2715,3044"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2251 L 2715,2251"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2251 L 2715,2251"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 2715,4707 L 3698,4628 4681,4312 5664,4312 6647,4074 7630,3678 8612,3916 9595,3599 10578,3123 11561,3599 12544,3202 13527,2410"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 2590,4582 L 2590,4832 2840,4832 2840,4582 2590,4582 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 2590,4582 L 2590,4832 2840,4832 2840,4582 2590,4582 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 3573,4503 L 3573,4753 3823,4753 3823,4503 3573,4503 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 3573,4503 L 3573,4753 3823,4753 3823,4503 3573,4503 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 4556,4187 L 4556,4437 4806,4437 4806,4187 4556,4187 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 4556,4187 L 4556,4437 4806,4437 4806,4187 4556,4187 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 5539,4187 L 5539,4437 5789,4437 5789,4187 5539,4187 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 5539,4187 L 5539,4437 5789,4437 5789,4187 5539,4187 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 6522,3949 L 6522,4199 6772,4199 6772,3949 6522,3949 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 6522,3949 L 6522,4199 6772,4199 6772,3949 6522,3949 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 7505,3553 L 7505,3803 7755,3803 7755,3553 7505,3553 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 7505,3553 L 7505,3803 7755,3803 7755,3553 7505,3553 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 8487,3791 L 8487,4041 8737,4041 8737,3791 8487,3791 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 8487,3791 L 8487,4041 8737,4041 8737,3791 8487,3791 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 9470,3474 L 9470,3724 9720,3724 9720,3474 9470,3474 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 9470,3474 L 9470,3724 9720,3724 9720,3474 9470,3474 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 10453,2998 L 10453,3248 10703,3248 10703,2998 10453,2998 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 10453,2998 L 10453,3248 10703,3248 10703,2998 10453,2998 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 11436,3474 L 11436,3724 11686,3724 11686,3474 11436,3474 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 11436,3474 L 11436,3724 11686,3724 11686,3474 11436,3474 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 12419,3077 L 12419,3327 12669,3327 12669,3077 12419,3077 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 12419,3077 L 12419,3327 12669,3327 12669,3077 12419,3077 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13402,2285 L 13402,2535 13652,2535 13652,2285 13402,2285 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13402,2285 L 13402,2535 13652,2535 13652,2285 13402,2285 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-width="80" stroke-linejoin="round" d="M 2715,5659 L 3698,5659 4681,5342 5664,5342 6647,5104 7630,4707 8612,4945 9595,4628 10578,4154 11561,4628 12544,4312 13527,3519"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 2590,5534 L 2715,5784 2840,5534 2590,5534 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 2590,5534 L 2715,5784 2840,5534 2590,5534 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 3573,5534 L 3698,5784 3823,5534 3573,5534 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 3573,5534 L 3698,5784 3823,5534 3573,5534 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 4556,5217 L 4681,5467 4806,5217 4556,5217 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 4556,5217 L 4681,5467 4806,5217 4556,5217 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 5539,5217 L 5664,5467 5789,5217 5539,5217 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 5539,5217 L 5664,5467 5789,5217 5539,5217 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 6522,4979 L 6647,5229 6772,4979 6522,4979 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 6522,4979 L 6647,5229 6772,4979 6522,4979 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 7505,4582 L 7630,4832 7755,4582 7505,4582 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 7505,4582 L 7630,4832 7755,4582 7505,4582 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 8487,4820 L 8612,5070 8737,4820 8487,4820 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 8487,4820 L 8612,5070 8737,4820 8487,4820 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 9470,4503 L 9595,4753 9720,4503 9470,4503 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 9470,4503 L 9595,4753 9720,4503 9470,4503 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 10453,4029 L 10578,4279 10703,4029 10453,4029 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 10453,4029 L 10578,4279 10703,4029 10453,4029 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 11436,4503 L 11561,4753 11686,4503 11436,4503 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 11436,4503 L 11561,4753 11686,4503 11436,4503 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 12419,4187 L 12544,4437 12669,4187 12419,4187 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 12419,4187 L 12544,4437 12669,4187 12419,4187 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 13402,3394 L 13527,3644 13652,3394 13402,3394 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 13402,3394 L 13527,3644 13652,3394 13402,3394 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 2715,6134 L 3698,6134 4681,6134 5664,6134 6647,6134 7630,6134 8612,6134 9595,6134 10578,6134 11561,6134 12544,6134 13527,6134"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 2590,6134 L 2715,6259 2840,6134 2715,6009 2590,6134 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 2590,6134 L 2715,6259 2840,6134 2715,6009 2590,6134 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 3573,6134 L 3698,6259 3823,6134 3698,6009 3573,6134 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 3573,6134 L 3698,6259 3823,6134 3698,6009 3573,6134 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 4556,6134 L 4681,6259 4806,6134 4681,6009 4556,6134 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 4556,6134 L 4681,6259 4806,6134 4681,6009 4556,6134 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 5539,6134 L 5664,6259 5789,6134 5664,6009 5539,6134 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 5539,6134 L 5664,6259 5789,6134 5664,6009 5539,6134 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 6522,6134 L 6647,6259 6772,6134 6647,6009 6522,6134 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 6522,6134 L 6647,6259 6772,6134 6647,6009 6522,6134 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 7505,6134 L 7630,6259 7755,6134 7630,6009 7505,6134 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 7505,6134 L 7630,6259 7755,6134 7630,6009 7505,6134 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 8487,6134 L 8612,6259 8737,6134 8612,6009 8487,6134 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 8487,6134 L 8612,6259 8737,6134 8612,6009 8487,6134 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 9470,6134 L 9595,6259 9720,6134 9595,6009 9470,6134 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 9470,6134 L 9595,6259 9720,6134 9595,6009 9470,6134 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 10453,6134 L 10578,6259 10703,6134 10578,6009 10453,6134 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 10453,6134 L 10578,6259 10703,6134 10578,6009 10453,6134 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 11436,6134 L 11561,6259 11686,6134 11561,6009 11436,6134 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 11436,6134 L 11561,6259 11686,6134 11561,6009 11436,6134 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 12419,6134 L 12544,6259 12669,6134 12544,6009 12419,6134 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 12419,6134 L 12544,6259 12669,6134 12544,6009 12419,6134 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13402,6134 L 13527,6259 13652,6134 13527,6009 13402,6134 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13402,6134 L 13527,6259 13652,6134 13527,6009 13402,6134 Z"/>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 740 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="740" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 1723 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1723" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 2706 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2706" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 3689 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="3689" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 4672 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="4672" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 5655 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="5655" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 6638 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="6638" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 7621 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="7621" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 8604 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="8604" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 9587 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="9587" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 10570 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="10570" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 11552 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="11552" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="6335"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="5542"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="4749"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="3957"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="3164"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="2371"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">5</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="1579"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">6</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="459px" font-weight="400"><tspan class="TextPosition" x="3409" y="741"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Random Read (4k block size, 64 queue depth)</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="388px" font-weight="400"><tspan class="TextPosition" x="3484" y="1248"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Memory Utilization of 1024 GB, primary coordinator</tspan></tspan></tspan></text>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 13231,7856 L 14031,7856"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13525,7751 L 13525,7962 13736,7962 13736,7751 13525,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13525,7751 L 13525,7962 13736,7962 13736,7751 13525,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-width="80" stroke-linejoin="round" d="M 13231,8242 L 14031,8242"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 13525,8137 L 13631,8348 13736,8137 13525,8137 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 13525,8137 L 13631,8348 13736,8137 13525,8137 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 13231,8628 L 14031,8628"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13525,8628 L 13631,8734 13736,8628 13631,8523 13525,8628 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13525,8628 L 13631,8734 13736,8628 13631,8523 13525,8628 Z"/>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="7976"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Total</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="8362"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">ceph-osd</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="8748"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">ceph-mon</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-90 1573 6400)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="318px" font-weight="400"><tspan class="TextPosition" x="1573" y="6400"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Memory Utilization % (lower is better)</tspan></tspan></tspan></text>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 22 KiB |
@ -0,0 +1,166 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="160mm" height="90mm" viewBox="0 0 16000 9000" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="28.222" stroke-linejoin="round" xml:space="preserve">
|
||||||
|
<path fill="rgb(255,255,255)" stroke="none" d="M 7987,8986 L -13,8986 -13,-13 15986,-13 15986,8986 7987,8986 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8121,6215 L 2715,6215 2715,1460 13527,1460 13527,6215 8121,6215 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,5534 L 2715,5534"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4855 L 2715,4855"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4176 L 2715,4176"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3497 L 2715,3497"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2817 L 2715,2817"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2138 L 2715,2138"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5534 L 2715,5534"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5534 L 2715,5534"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4855 L 2715,4855"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4855 L 2715,4855"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4176 L 2715,4176"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4176 L 2715,4176"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3497 L 2715,3497"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3497 L 2715,3497"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2817 L 2715,2817"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2817 L 2715,2817"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2138 L 2715,2138"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2138 L 2715,2138"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 2715,2383 L 3698,2099 4681,1786 5664,1910 6647,1805 7630,1790 8612,1935 9595,1753 10578,1721 11561,1911 12544,1736 13527,1896"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 2590,2258 L 2590,2508 2840,2508 2840,2258 2590,2258 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 2590,2258 L 2590,2508 2840,2508 2840,2258 2590,2258 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 3573,1974 L 3573,2224 3823,2224 3823,1974 3573,1974 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 3573,1974 L 3573,2224 3823,2224 3823,1974 3573,1974 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 4556,1661 L 4556,1911 4806,1911 4806,1661 4556,1661 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 4556,1661 L 4556,1911 4806,1911 4806,1661 4556,1661 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 5539,1785 L 5539,2035 5789,2035 5789,1785 5539,1785 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 5539,1785 L 5539,2035 5789,2035 5789,1785 5539,1785 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 6522,1680 L 6522,1930 6772,1930 6772,1680 6522,1680 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 6522,1680 L 6522,1930 6772,1930 6772,1680 6522,1680 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 7505,1665 L 7505,1915 7755,1915 7755,1665 7505,1665 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 7505,1665 L 7505,1915 7755,1915 7755,1665 7505,1665 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 8487,1810 L 8487,2060 8737,2060 8737,1810 8487,1810 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 8487,1810 L 8487,2060 8737,2060 8737,1810 8487,1810 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 9470,1628 L 9470,1878 9720,1878 9720,1628 9470,1628 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 9470,1628 L 9470,1878 9720,1878 9720,1628 9470,1628 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 10453,1596 L 10453,1846 10703,1846 10703,1596 10453,1596 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 10453,1596 L 10453,1846 10703,1846 10703,1596 10453,1596 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 11436,1786 L 11436,2036 11686,2036 11686,1786 11436,1786 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 11436,1786 L 11436,2036 11686,2036 11686,1786 11436,1786 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 12419,1611 L 12419,1861 12669,1861 12669,1611 12419,1611 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 12419,1611 L 12419,1861 12669,1861 12669,1611 12419,1611 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13402,1771 L 13402,2021 13652,2021 13652,1771 13402,1771 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13402,1771 L 13402,2021 13652,2021 13652,1771 13402,1771 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-width="80" stroke-linejoin="round" d="M 2715,5910 L 3698,5882 4681,5852 5664,5866 6647,5852 7630,5845 8612,5866 9595,5847 10578,5837 11561,5867 12544,5843 13527,5851"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 2590,5785 L 2715,6035 2840,5785 2590,5785 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 2590,5785 L 2715,6035 2840,5785 2590,5785 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 3573,5757 L 3698,6007 3823,5757 3573,5757 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 3573,5757 L 3698,6007 3823,5757 3573,5757 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 4556,5727 L 4681,5977 4806,5727 4556,5727 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 4556,5727 L 4681,5977 4806,5727 4556,5727 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 5539,5741 L 5664,5991 5789,5741 5539,5741 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 5539,5741 L 5664,5991 5789,5741 5539,5741 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 6522,5727 L 6647,5977 6772,5727 6522,5727 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 6522,5727 L 6647,5977 6772,5727 6522,5727 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 7505,5720 L 7630,5970 7755,5720 7505,5720 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 7505,5720 L 7630,5970 7755,5720 7505,5720 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 8487,5741 L 8612,5991 8737,5741 8487,5741 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 8487,5741 L 8612,5991 8737,5741 8487,5741 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 9470,5722 L 9595,5972 9720,5722 9470,5722 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 9470,5722 L 9595,5972 9720,5722 9470,5722 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 10453,5712 L 10578,5962 10703,5712 10453,5712 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 10453,5712 L 10578,5962 10703,5712 10453,5712 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 11436,5742 L 11561,5992 11686,5742 11436,5742 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 11436,5742 L 11561,5992 11686,5742 11436,5742 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 12419,5718 L 12544,5968 12669,5718 12419,5718 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 12419,5718 L 12544,5968 12669,5718 12419,5718 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 13402,5726 L 13527,5976 13652,5726 13402,5726 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 13402,5726 L 13527,5976 13652,5726 13402,5726 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 2715,2686 L 3698,2430 4681,2147 5664,2258 6647,2166 7630,2158 8612,2283 9595,2120 10578,2099 11561,2258 12544,2108 13527,2259"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 2590,2686 L 2715,2811 2840,2686 2715,2561 2590,2686 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 2590,2686 L 2715,2811 2840,2686 2715,2561 2590,2686 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 3573,2430 L 3698,2555 3823,2430 3698,2305 3573,2430 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 3573,2430 L 3698,2555 3823,2430 3698,2305 3573,2430 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 4556,2147 L 4681,2272 4806,2147 4681,2022 4556,2147 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 4556,2147 L 4681,2272 4806,2147 4681,2022 4556,2147 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 5539,2258 L 5664,2383 5789,2258 5664,2133 5539,2258 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 5539,2258 L 5664,2383 5789,2258 5664,2133 5539,2258 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 6522,2166 L 6647,2291 6772,2166 6647,2041 6522,2166 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 6522,2166 L 6647,2291 6772,2166 6647,2041 6522,2166 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 7505,2158 L 7630,2283 7755,2158 7630,2033 7505,2158 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 7505,2158 L 7630,2283 7755,2158 7630,2033 7505,2158 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 8487,2283 L 8612,2408 8737,2283 8612,2158 8487,2283 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 8487,2283 L 8612,2408 8737,2283 8612,2158 8487,2283 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 9470,2120 L 9595,2245 9720,2120 9595,1995 9470,2120 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 9470,2120 L 9595,2245 9720,2120 9595,1995 9470,2120 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 10453,2099 L 10578,2224 10703,2099 10578,1974 10453,2099 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 10453,2099 L 10578,2224 10703,2099 10578,1974 10453,2099 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 11436,2258 L 11561,2383 11686,2258 11561,2133 11436,2258 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 11436,2258 L 11561,2383 11686,2258 11561,2133 11436,2258 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 12419,2108 L 12544,2233 12669,2108 12544,1983 12419,2108 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 12419,2108 L 12544,2233 12669,2108 12544,1983 12419,2108 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13402,2259 L 13527,2384 13652,2259 13527,2134 13402,2259 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13402,2259 L 13527,2384 13652,2259 13527,2134 13402,2259 Z"/>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 740 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="740" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 1723 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1723" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 2706 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2706" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 3689 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="3689" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 4672 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="4672" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 5655 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="5655" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 6638 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="6638" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 7621 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="7621" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 8604 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="8604" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 9587 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="9587" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 10570 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="10570" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 11552 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="11552" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="6335"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1909" y="5655"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">500</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1724" y="4976"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1724" y="4296"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1500</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1724" y="3617"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1724" y="2937"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2500</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1724" y="2258"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1724" y="1579"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3500</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="459px" font-weight="400"><tspan class="TextPosition" x="3409" y="743"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Random Read (4k block size, 64 queue depth)</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="388px" font-weight="400"><tspan class="TextPosition" x="3685" y="1248"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Average Network Throughput, primary coordinator</tspan></tspan></tspan></text>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 13363,7856 L 14163,7856"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13657,7751 L 13657,7962 13868,7962 13868,7751 13657,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13657,7751 L 13657,7962 13868,7962 13868,7751 13657,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-width="80" stroke-linejoin="round" d="M 13363,8251 L 14163,8251"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 13657,8146 L 13763,8357 13868,8146 13657,8146 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 13657,8146 L 13763,8357 13868,8146 13657,8146 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 13363,8646 L 14163,8646"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13657,8646 L 13763,8752 13868,8646 13763,8541 13657,8646 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13657,8646 L 13763,8752 13868,8646 13763,8541 13657,8646 Z"/>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14263" y="7976"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Total</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14263" y="8371"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Send</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14263" y="8766"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Receive</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-90 1372 5799)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="318px" font-weight="400"><tspan class="TextPosition" x="1372" y="5799"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Network Throughput Mbps</tspan></tspan></tspan></text>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 23 KiB |
@ -0,0 +1,176 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="160mm" height="90mm" viewBox="0 0 16000 9000" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="28.222" stroke-linejoin="round" xml:space="preserve">
|
||||||
|
<path fill="rgb(255,255,255)" stroke="none" d="M 7987,8986 L -13,8986 -13,-13 15986,-13 15986,8986 7987,8986 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8121,6215 L 2715,6215 2715,1460 13527,1460 13527,6215 8121,6215 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,5619 L 2715,5619"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,5025 L 2715,5025"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4431 L 2715,4431"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3242 L 2715,3242"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2648 L 2715,2648"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2053 L 2715,2053"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5619 L 2715,5619"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5619 L 2715,5619"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5025 L 2715,5025"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5025 L 2715,5025"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4431 L 2715,4431"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4431 L 2715,4431"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3242 L 2715,3242"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3242 L 2715,3242"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2648 L 2715,2648"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2648 L 2715,2648"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2053 L 2715,2053"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2053 L 2715,2053"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,5738 L 13527,5738"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,5738 L 13527,5738"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,5262 L 13527,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,5262 L 13527,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,4787 L 13527,4787"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,4787 L 13527,4787"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,4312 L 13527,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,4312 L 13527,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,3837 L 13527,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,3837 L 13527,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,3361 L 13527,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,3361 L 13527,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,2885 L 13527,2885"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,2885 L 13527,2885"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,2410 L 13527,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,2410 L 13527,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,1934 L 13527,1934"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,1934 L 13527,1934"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,1459 L 13527,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,1459 L 13527,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6214 L 13527,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 2715,3850 L 3698,3502 4681,2192 5664,2837 6647,2217 7630,2181 8612,2375 9595,2209 10578,2159 11561,2317 12544,2226 13527,2193"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 2590,3725 L 2590,3975 2840,3975 2840,3725 2590,3725 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 2590,3725 L 2590,3975 2840,3975 2840,3725 2590,3725 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 3573,3377 L 3573,3627 3823,3627 3823,3377 3573,3377 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 3573,3377 L 3573,3627 3823,3627 3823,3377 3573,3377 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 4556,2067 L 4556,2317 4806,2317 4806,2067 4556,2067 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 4556,2067 L 4556,2317 4806,2317 4806,2067 4556,2067 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 5539,2712 L 5539,2962 5789,2962 5789,2712 5539,2712 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 5539,2712 L 5539,2962 5789,2962 5789,2712 5539,2712 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 6522,2092 L 6522,2342 6772,2342 6772,2092 6522,2092 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 6522,2092 L 6522,2342 6772,2342 6772,2092 6522,2092 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 7505,2056 L 7505,2306 7755,2306 7755,2056 7505,2056 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 7505,2056 L 7505,2306 7755,2306 7755,2056 7505,2056 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 8487,2250 L 8487,2500 8737,2500 8737,2250 8487,2250 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 8487,2250 L 8487,2500 8737,2500 8737,2250 8487,2250 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 9470,2084 L 9470,2334 9720,2334 9720,2084 9470,2084 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 9470,2084 L 9470,2334 9720,2334 9720,2084 9470,2084 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 10453,2034 L 10453,2284 10703,2284 10703,2034 10453,2034 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 10453,2034 L 10453,2284 10703,2284 10703,2034 10453,2034 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 11436,2192 L 11436,2442 11686,2442 11686,2192 11436,2192 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 11436,2192 L 11436,2442 11686,2442 11686,2192 11436,2192 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 12419,2101 L 12419,2351 12669,2351 12669,2101 12419,2101 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 12419,2101 L 12419,2351 12669,2351 12669,2101 12419,2101 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13402,2068 L 13402,2318 13652,2318 13652,2068 13402,2068 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13402,2068 L 13402,2318 13652,2318 13652,2068 13402,2068 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-width="80" stroke-linejoin="round" d="M 2715,5640 L 3698,4276 4681,4088 5664,3124 6647,3651 7630,3255 8612,3878 9595,3675 10578,3068 11561,2897 12544,3090 13527,2578"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 2590,5640 L 2715,5765 2840,5640 2715,5515 2590,5640 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 2590,5640 L 2715,5765 2840,5640 2715,5515 2590,5640 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 3573,4276 L 3698,4401 3823,4276 3698,4151 3573,4276 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 3573,4276 L 3698,4401 3823,4276 3698,4151 3573,4276 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 4556,4088 L 4681,4213 4806,4088 4681,3963 4556,4088 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 4556,4088 L 4681,4213 4806,4088 4681,3963 4556,4088 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 5539,3124 L 5664,3249 5789,3124 5664,2999 5539,3124 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 5539,3124 L 5664,3249 5789,3124 5664,2999 5539,3124 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 6522,3651 L 6647,3776 6772,3651 6647,3526 6522,3651 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 6522,3651 L 6647,3776 6772,3651 6647,3526 6522,3651 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 7505,3255 L 7630,3380 7755,3255 7630,3130 7505,3255 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 7505,3255 L 7630,3380 7755,3255 7630,3130 7505,3255 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 8487,3878 L 8612,4003 8737,3878 8612,3753 8487,3878 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 8487,3878 L 8612,4003 8737,3878 8612,3753 8487,3878 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 9470,3675 L 9595,3800 9720,3675 9595,3550 9470,3675 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 9470,3675 L 9595,3800 9720,3675 9595,3550 9470,3675 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 10453,3068 L 10578,3193 10703,3068 10578,2943 10453,3068 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 10453,3068 L 10578,3193 10703,3068 10578,2943 10453,3068 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 11436,2897 L 11561,3022 11686,2897 11561,2772 11436,2897 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 11436,2897 L 11561,3022 11686,2897 11561,2772 11436,2897 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 12419,3090 L 12544,3215 12669,3090 12544,2965 12419,3090 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 12419,3090 L 12544,3215 12669,3090 12544,2965 12419,3090 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 13402,2578 L 13527,2703 13652,2578 13527,2453 13402,2578 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 13402,2578 L 13527,2703 13652,2578 13527,2453 13402,2578 Z"/>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 740 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="740" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 1723 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1723" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 2706 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2706" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 3689 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="3689" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 4672 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="4672" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 5655 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="5655" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 6638 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="6638" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 7621 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="7621" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 8604 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="8604" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 9587 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="9587" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 10570 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="10570" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 11552 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="11552" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="6335"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1539" y="5740"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">10000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1539" y="5146"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">20000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1539" y="4551"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">30000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1539" y="3957"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">40000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1539" y="3362"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">50000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1539" y="2768"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">60000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1539" y="2173"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">70000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1539" y="1579"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">80000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="6335"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4500</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="5859"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4700</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="5383"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4900</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="4908"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">5100</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="4432"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">5300</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="3957"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">5500</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="3481"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">5700</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="3005"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">5900</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="2530"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">6100</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="2054"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">6300</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="1579"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">6500</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="459px" font-weight="400"><tspan class="TextPosition" x="3396" y="739"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Random Write (4k block size, 64 queue depth)</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="388px" font-weight="400"><tspan class="TextPosition" x="6083" y="1248"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Throughput & Latency</tspan></tspan></tspan></text>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 13377,8056 L 14177,8056"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13671,7951 L 13671,8162 13882,8162 13882,7951 13671,7951 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13671,7951 L 13671,8162 13882,8162 13882,7951 13671,7951 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-width="80" stroke-linejoin="round" d="M 13377,8554 L 14177,8554"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 13671,8554 L 13777,8660 13882,8554 13777,8449 13671,8554 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 13671,8554 L 13777,8660 13882,8554 13777,8449 13671,8554 Z"/>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14277" y="8176"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">IOPS</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14277" y="8674"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Latency</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-90 973 5402)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="318px" font-weight="400"><tspan class="TextPosition" x="973" y="5402"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">IOPS (higher is better)</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-90 15227 5763)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="318px" font-weight="400"><tspan class="TextPosition" x="15227" y="5763"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Latency μs (lower is better)</tspan></tspan></tspan></text>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 26 KiB |
@ -0,0 +1,158 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="160mm" height="90mm" viewBox="0 0 16000 9000" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="28.222" stroke-linejoin="round" xml:space="preserve">
|
||||||
|
<path fill="rgb(255,255,255)" stroke="none" d="M 7987,8986 L -13,8986 -13,-13 15986,-13 15986,8986 7987,8986 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8121,6215 L 2715,6215 2715,1460 13527,1460 13527,6215 8121,6215 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,5262 L 2715,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4312 L 2715,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3361 L 2715,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2410 L 2715,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5262 L 2715,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5262 L 2715,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4312 L 2715,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4312 L 2715,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3361 L 2715,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3361 L 2715,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2410 L 2715,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2410 L 2715,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 2715,4844 L 3698,4483 4681,3133 5664,3970 6647,3171 7630,2771 8612,3399 9595,2942 10578,2524 11561,3247 12544,2790 13527,2372"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 2590,4719 L 2590,4969 2840,4969 2840,4719 2590,4719 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 2590,4719 L 2590,4969 2840,4969 2840,4719 2590,4719 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 3573,4358 L 3573,4607 3823,4607 3823,4358 3573,4358 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 3573,4358 L 3573,4607 3823,4607 3823,4358 3573,4358 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 4556,3008 L 4556,3258 4806,3258 4806,3008 4556,3008 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 4556,3008 L 4556,3258 4806,3258 4806,3008 4556,3008 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 5539,3845 L 5539,4095 5789,4095 5789,3845 5539,3845 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 5539,3845 L 5539,4095 5789,4095 5789,3845 5539,3845 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 6522,3046 L 6522,3296 6772,3296 6772,3046 6522,3046 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 6522,3046 L 6522,3296 6772,3296 6772,3046 6522,3046 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 7505,2646 L 7505,2896 7755,2896 7755,2646 7505,2646 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 7505,2646 L 7505,2896 7755,2896 7755,2646 7505,2646 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 8487,3274 L 8487,3524 8737,3524 8737,3274 8487,3274 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 8487,3274 L 8487,3524 8737,3524 8737,3274 8487,3274 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 9470,2817 L 9470,3067 9720,3067 9720,2817 9470,2817 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 9470,2817 L 9470,3067 9720,3067 9720,2817 9470,2817 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 10453,2399 L 10453,2649 10703,2649 10703,2399 10453,2399 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 10453,2399 L 10453,2649 10703,2649 10703,2399 10453,2399 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 11436,3122 L 11436,3372 11686,3372 11686,3122 11436,3122 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 11436,3122 L 11436,3372 11686,3372 11686,3122 11436,3122 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 12419,2665 L 12419,2915 12669,2915 12669,2665 12419,2665 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 12419,2665 L 12419,2915 12669,2915 12669,2665 12419,2665 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13402,2247 L 13402,2497 13652,2497 13652,2247 13402,2247 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13402,2247 L 13402,2497 13652,2497 13652,2247 13402,2247 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-width="80" stroke-linejoin="round" d="M 2715,5205 L 3698,4958 4681,3932 5664,4539 6647,3951 7630,3608 8612,4141 9595,3741 10578,3399 11561,4008 12544,3627 13527,3266"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 2590,5080 L 2715,5330 2840,5080 2590,5080 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 2590,5080 L 2715,5330 2840,5080 2590,5080 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 3573,4833 L 3698,5083 3823,4833 3573,4833 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 3573,4833 L 3698,5083 3823,4833 3573,4833 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 4556,3807 L 4681,4057 4806,3807 4556,3807 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 4556,3807 L 4681,4057 4806,3807 4556,3807 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 5539,4415 L 5664,4664 5789,4415 5539,4415 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 5539,4415 L 5664,4664 5789,4415 5539,4415 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 6522,3826 L 6647,4076 6772,3826 6522,3826 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 6522,3826 L 6647,4076 6772,3826 6522,3826 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 7505,3483 L 7630,3733 7755,3483 7505,3483 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 7505,3483 L 7630,3733 7755,3483 7505,3483 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 8487,4016 L 8612,4266 8737,4016 8487,4016 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 8487,4016 L 8612,4266 8737,4016 8487,4016 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 9470,3616 L 9595,3866 9720,3616 9470,3616 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 9470,3616 L 9595,3866 9720,3616 9470,3616 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 10453,3274 L 10578,3524 10703,3274 10453,3274 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 10453,3274 L 10578,3524 10703,3274 10453,3274 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 11436,3883 L 11561,4133 11686,3883 11436,3883 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 11436,3883 L 11561,4133 11686,3883 11436,3883 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 12419,3502 L 12544,3752 12669,3502 12419,3502 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 12419,3502 L 12544,3752 12669,3502 12419,3502 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 13402,3141 L 13527,3391 13652,3141 13402,3141 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 13402,3141 L 13527,3391 13652,3141 13402,3141 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 2715,6214 L 3698,6214 4681,6214 5664,6214 6647,6214 7630,6214 8612,6214 9595,6214 10578,6214 11561,6214 12544,6214 13527,6214"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 2590,6214 L 2715,6339 2840,6214 2715,6089 2590,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 2590,6214 L 2715,6339 2840,6214 2715,6089 2590,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 3573,6214 L 3698,6339 3823,6214 3698,6089 3573,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 3573,6214 L 3698,6339 3823,6214 3698,6089 3573,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 4556,6214 L 4681,6339 4806,6214 4681,6089 4556,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 4556,6214 L 4681,6339 4806,6214 4681,6089 4556,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 5539,6214 L 5664,6339 5789,6214 5664,6089 5539,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 5539,6214 L 5664,6339 5789,6214 5664,6089 5539,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 6522,6214 L 6647,6339 6772,6214 6647,6089 6522,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 6522,6214 L 6647,6339 6772,6214 6647,6089 6522,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 7505,6214 L 7630,6339 7755,6214 7630,6089 7505,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 7505,6214 L 7630,6339 7755,6214 7630,6089 7505,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 8487,6214 L 8612,6339 8737,6214 8612,6089 8487,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 8487,6214 L 8612,6339 8737,6214 8612,6089 8487,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 9470,6214 L 9595,6339 9720,6214 9595,6089 9470,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 9470,6214 L 9595,6339 9720,6214 9595,6089 9470,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 10453,6214 L 10578,6339 10703,6214 10578,6089 10453,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 10453,6214 L 10578,6339 10703,6214 10578,6089 10453,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 11436,6214 L 11561,6339 11686,6214 11561,6089 11436,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 11436,6214 L 11561,6339 11686,6214 11561,6089 11436,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 12419,6214 L 12544,6339 12669,6214 12544,6089 12419,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 12419,6214 L 12544,6339 12669,6214 12544,6089 12419,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13402,6214 L 13527,6339 13652,6214 13527,6089 13402,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13402,6214 L 13527,6339 13652,6214 13527,6089 13402,6214 Z"/>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 740 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="740" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 1723 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1723" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 2706 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2706" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 3689 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="3689" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 4672 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="4672" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 5655 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="5655" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 6638 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="6638" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 7621 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="7621" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 8604 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="8604" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 9587 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="9587" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 10570 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="10570" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 11552 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="11552" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="6335"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="5383"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">5</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2095" y="4432"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">10</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2095" y="3481"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">15</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2095" y="2530"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">20</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2095" y="1579"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">25</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="459px" font-weight="400"><tspan class="TextPosition" x="3409" y="742"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Random Write (4k block size, 64 queue depth)</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="388px" font-weight="400"><tspan class="TextPosition" x="3184" y="1248"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">CPU Utilization of 128 logical cores, primary coordinator</tspan></tspan></tspan></text>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 13231,7856 L 14031,7856"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13525,7751 L 13525,7962 13736,7962 13736,7751 13525,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13525,7751 L 13525,7962 13736,7962 13736,7751 13525,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-width="80" stroke-linejoin="round" d="M 13231,8248 L 14031,8248"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 13525,8143 L 13631,8354 13736,8143 13525,8143 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 13525,8143 L 13631,8354 13736,8143 13525,8143 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 13231,8640 L 14031,8640"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13525,8640 L 13631,8746 13736,8640 13631,8535 13525,8640 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13525,8640 L 13631,8746 13736,8640 13631,8535 13525,8640 Z"/>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="7976"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Total</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="8368"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">ceph-osd</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="8760"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">ceph-mon</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-90 1573 6198)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="318px" font-weight="400"><tspan class="TextPosition" x="1573" y="6198"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">CPU Utilization % (lower is better)</tspan></tspan></tspan></text>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 22 KiB |
@ -0,0 +1,178 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="160mm" height="90mm" viewBox="0 0 16000 9000" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="28.222" stroke-linejoin="round" xml:space="preserve">
|
||||||
|
<path fill="rgb(255,255,255)" stroke="none" d="M 7987,8986 L -13,8986 -13,-13 15986,-13 15986,8986 7987,8986 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8121,6215 L 2715,6215 2715,1460 13527,1460 13527,6215 8121,6215 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,5738 L 2715,5738"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,5262 L 2715,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4787 L 2715,4787"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4312 L 2715,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3361 L 2715,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2885 L 2715,2885"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2410 L 2715,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,1934 L 2715,1934"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5738 L 2715,5738"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5738 L 2715,5738"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5262 L 2715,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5262 L 2715,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4787 L 2715,4787"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4787 L 2715,4787"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4312 L 2715,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4312 L 2715,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3361 L 2715,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3361 L 2715,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2885 L 2715,2885"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2885 L 2715,2885"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2410 L 2715,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2410 L 2715,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1934 L 2715,1934"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1934 L 2715,1934"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 2715,4407 L 3698,4312 4681,4027 5664,3932 6647,3646 7630,3076 8612,3456 9595,3076 10578,2505 11561,3076 12544,2695 13527,1744"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 2590,4282 L 2590,4531 2840,4531 2840,4282 2590,4282 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 2590,4282 L 2590,4531 2840,4531 2840,4282 2590,4282 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 3573,4187 L 3573,4437 3823,4437 3823,4187 3573,4187 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 3573,4187 L 3573,4437 3823,4437 3823,4187 3573,4187 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 4556,3902 L 4556,4152 4806,4152 4806,3902 4556,3902 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 4556,3902 L 4556,4152 4806,4152 4806,3902 4556,3902 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 5539,3807 L 5539,4057 5789,4057 5789,3807 5539,3807 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 5539,3807 L 5539,4057 5789,4057 5789,3807 5539,3807 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 6522,3521 L 6522,3771 6772,3771 6772,3521 6522,3521 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 6522,3521 L 6522,3771 6772,3771 6772,3521 6522,3521 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 7505,2951 L 7505,3201 7755,3201 7755,2951 7505,2951 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 7505,2951 L 7505,3201 7755,3201 7755,2951 7505,2951 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 8487,3331 L 8487,3581 8737,3581 8737,3331 8487,3331 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 8487,3331 L 8487,3581 8737,3581 8737,3331 8487,3331 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 9470,2951 L 9470,3201 9720,3201 9720,2951 9470,2951 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 9470,2951 L 9470,3201 9720,3201 9720,2951 9470,2951 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 10453,2380 L 10453,2630 10703,2630 10703,2380 10453,2380 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 10453,2380 L 10453,2630 10703,2630 10703,2380 10453,2380 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 11436,2951 L 11436,3201 11686,3201 11686,2951 11436,2951 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 11436,2951 L 11436,3201 11686,3201 11686,2951 11436,2951 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 12419,2570 L 12419,2820 12669,2820 12669,2570 12419,2570 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 12419,2570 L 12419,2820 12669,2820 12669,2570 12419,2570 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13402,1619 L 13402,1869 13652,1869 13652,1619 13402,1619 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13402,1619 L 13402,1869 13652,1869 13652,1619 13402,1619 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-width="80" stroke-linejoin="round" d="M 2715,5548 L 3698,5548 4681,5167 5664,5167 6647,4882 7630,4407 8612,4692 9595,4407 10578,3741 11561,4407 12544,3932 13527,2980"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 2590,5423 L 2715,5673 2840,5423 2590,5423 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 2590,5423 L 2715,5673 2840,5423 2590,5423 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 3573,5423 L 3698,5673 3823,5423 3573,5423 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 3573,5423 L 3698,5673 3823,5423 3573,5423 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 4556,5042 L 4681,5292 4806,5042 4556,5042 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 4556,5042 L 4681,5292 4806,5042 4556,5042 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 5539,5042 L 5664,5292 5789,5042 5539,5042 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 5539,5042 L 5664,5292 5789,5042 5539,5042 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 6522,4757 L 6647,5007 6772,4757 6522,4757 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 6522,4757 L 6647,5007 6772,4757 6522,4757 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 7505,4282 L 7630,4531 7755,4282 7505,4282 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 7505,4282 L 7630,4531 7755,4282 7505,4282 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 8487,4567 L 8612,4817 8737,4567 8487,4567 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 8487,4567 L 8612,4817 8737,4567 8487,4567 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 9470,4282 L 9595,4531 9720,4282 9470,4282 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 9470,4282 L 9595,4531 9720,4282 9470,4282 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 10453,3616 L 10578,3866 10703,3616 10453,3616 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 10453,3616 L 10578,3866 10703,3616 10453,3616 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 11436,4282 L 11561,4531 11686,4282 11436,4282 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 11436,4282 L 11561,4531 11686,4282 11436,4282 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 12419,3807 L 12544,4057 12669,3807 12419,3807 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 12419,3807 L 12544,4057 12669,3807 12419,3807 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 13402,2855 L 13527,3105 13652,2855 13402,2855 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 13402,2855 L 13527,3105 13652,2855 13402,2855 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 2715,6118 L 3698,6118 4681,6118 5664,6118 6647,6118 7630,6118 8612,6118 9595,6118 10578,6118 11561,6118 12544,6118 13527,6118"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 2590,6118 L 2715,6243 2840,6118 2715,5993 2590,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 2590,6118 L 2715,6243 2840,6118 2715,5993 2590,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 3573,6118 L 3698,6243 3823,6118 3698,5993 3573,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 3573,6118 L 3698,6243 3823,6118 3698,5993 3573,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 4556,6118 L 4681,6243 4806,6118 4681,5993 4556,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 4556,6118 L 4681,6243 4806,6118 4681,5993 4556,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 5539,6118 L 5664,6243 5789,6118 5664,5993 5539,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 5539,6118 L 5664,6243 5789,6118 5664,5993 5539,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 6522,6118 L 6647,6243 6772,6118 6647,5993 6522,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 6522,6118 L 6647,6243 6772,6118 6647,5993 6522,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 7505,6118 L 7630,6243 7755,6118 7630,5993 7505,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 7505,6118 L 7630,6243 7755,6118 7630,5993 7505,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 8487,6118 L 8612,6243 8737,6118 8612,5993 8487,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 8487,6118 L 8612,6243 8737,6118 8612,5993 8487,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 9470,6118 L 9595,6243 9720,6118 9595,5993 9470,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 9470,6118 L 9595,6243 9720,6118 9595,5993 9470,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 10453,6118 L 10578,6243 10703,6118 10578,5993 10453,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 10453,6118 L 10578,6243 10703,6118 10578,5993 10453,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 11436,6118 L 11561,6243 11686,6118 11561,5993 11436,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 11436,6118 L 11561,6243 11686,6118 11561,5993 11436,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 12419,6118 L 12544,6243 12669,6118 12544,5993 12419,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 12419,6118 L 12544,6243 12669,6118 12544,5993 12419,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13402,6118 L 13527,6243 13652,6118 13527,5993 13402,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13402,6118 L 13527,6243 13652,6118 13527,5993 13402,6118 Z"/>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 740 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="740" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 1723 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1723" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 2706 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2706" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 3689 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="3689" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 4672 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="4672" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 5655 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="5655" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 6638 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="6638" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 7621 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="7621" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 8604 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="8604" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 9587 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="9587" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 10570 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="10570" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 11552 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="11552" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="6335"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="5859"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0.5</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="5383"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="4908"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1.5</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="4432"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="3957"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2.5</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="3481"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="3005"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3.5</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="2530"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="2054"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4.5</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="1579"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">5</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="459px" font-weight="400"><tspan class="TextPosition" x="3409" y="743"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Random Write (4k block size, 64 queue depth)</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="388px" font-weight="400"><tspan class="TextPosition" x="3584" y="1248"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Memory Utilization of 1024 GB, primary coordinator</tspan></tspan></tspan></text>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 13231,7856 L 14031,7856"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13525,7751 L 13525,7962 13736,7962 13736,7751 13525,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13525,7751 L 13525,7962 13736,7962 13736,7751 13525,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-width="80" stroke-linejoin="round" d="M 13231,8251 L 14031,8251"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 13525,8146 L 13631,8357 13736,8146 13525,8146 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 13525,8146 L 13631,8357 13736,8146 13525,8146 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 13231,8646 L 14031,8646"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13525,8646 L 13631,8752 13736,8646 13631,8541 13525,8646 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13525,8646 L 13631,8752 13736,8646 13631,8541 13525,8646 Z"/>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="7976"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Total</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="8371"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">ceph-osd</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="8766"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">ceph-mon</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-90 1573 6398)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="318px" font-weight="400"><tspan class="TextPosition" x="1573" y="6398"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Memory Utilization % (lower is better)</tspan></tspan></tspan></text>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 25 KiB |
@ -0,0 +1,166 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="160mm" height="90mm" viewBox="0 0 16000 9000" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="28.222" stroke-linejoin="round" xml:space="preserve">
|
||||||
|
<path fill="rgb(255,255,255)" stroke="none" d="M 7987,8986 L -13,8986 -13,-13 15986,-13 15986,8986 7987,8986 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8121,6215 L 2715,6215 2715,1460 13527,1460 13527,6215 8121,6215 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,5534 L 2715,5534"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4855 L 2715,4855"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4176 L 2715,4176"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3497 L 2715,3497"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2817 L 2715,2817"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2138 L 2715,2138"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5534 L 2715,5534"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5534 L 2715,5534"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4855 L 2715,4855"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4855 L 2715,4855"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4176 L 2715,4176"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4176 L 2715,4176"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3497 L 2715,3497"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3497 L 2715,3497"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2817 L 2715,2817"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2817 L 2715,2817"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2138 L 2715,2138"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2138 L 2715,2138"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 2715,3898 L 3698,3535 4681,2137 5664,2842 6647,2192 7630,2125 8612,2381 9595,2157 10578,2086 11561,2315 12544,2191 13527,2128"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 2590,3773 L 2590,4023 2840,4023 2840,3773 2590,3773 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 2590,3773 L 2590,4023 2840,4023 2840,3773 2590,3773 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 3573,3410 L 3573,3660 3823,3660 3823,3410 3573,3410 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 3573,3410 L 3573,3660 3823,3660 3823,3410 3573,3410 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 4556,2012 L 4556,2262 4806,2262 4806,2012 4556,2012 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 4556,2012 L 4556,2262 4806,2262 4806,2012 4556,2012 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 5539,2717 L 5539,2967 5789,2967 5789,2717 5539,2717 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 5539,2717 L 5539,2967 5789,2967 5789,2717 5539,2717 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 6522,2067 L 6522,2317 6772,2317 6772,2067 6522,2067 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 6522,2067 L 6522,2317 6772,2317 6772,2067 6522,2067 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 7505,2000 L 7505,2250 7755,2250 7755,2000 7505,2000 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 7505,2000 L 7505,2250 7755,2250 7755,2000 7505,2000 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 8487,2256 L 8487,2506 8737,2506 8737,2256 8487,2256 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 8487,2256 L 8487,2506 8737,2506 8737,2256 8487,2256 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 9470,2032 L 9470,2282 9720,2282 9720,2032 9470,2032 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 9470,2032 L 9470,2282 9720,2282 9720,2032 9470,2032 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 10453,1961 L 10453,2211 10703,2211 10703,1961 10453,1961 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 10453,1961 L 10453,2211 10703,2211 10703,1961 10453,1961 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 11436,2190 L 11436,2440 11686,2440 11686,2190 11436,2190 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 11436,2190 L 11436,2440 11686,2440 11686,2190 11436,2190 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 12419,2066 L 12419,2316 12669,2316 12669,2066 12419,2066 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 12419,2066 L 12419,2316 12669,2316 12669,2066 12419,2066 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13402,2003 L 13402,2253 13652,2253 13652,2003 13402,2003 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13402,2003 L 13402,2253 13652,2253 13652,2003 13402,2003 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-width="80" stroke-linejoin="round" d="M 2715,4891 L 3698,4681 4681,3883 5664,4288 6647,3920 7630,3884 8612,4025 9595,3905 10578,3859 11561,3987 12544,3924 13527,3875"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 2590,4766 L 2715,5016 2840,4766 2590,4766 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 2590,4766 L 2715,5016 2840,4766 2590,4766 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 3573,4556 L 3698,4806 3823,4556 3573,4556 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 3573,4556 L 3698,4806 3823,4556 3573,4556 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 4556,3758 L 4681,4008 4806,3758 4556,3758 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 4556,3758 L 4681,4008 4806,3758 4556,3758 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 5539,4163 L 5664,4413 5789,4163 5539,4163 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 5539,4163 L 5664,4413 5789,4163 5539,4163 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 6522,3795 L 6647,4045 6772,3795 6522,3795 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 6522,3795 L 6647,4045 6772,3795 6522,3795 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 7505,3759 L 7630,4009 7755,3759 7505,3759 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 7505,3759 L 7630,4009 7755,3759 7505,3759 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 8487,3900 L 8612,4150 8737,3900 8487,3900 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 8487,3900 L 8612,4150 8737,3900 8487,3900 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 9470,3780 L 9595,4030 9720,3780 9470,3780 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 9470,3780 L 9595,4030 9720,3780 9470,3780 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 10453,3734 L 10578,3984 10703,3734 10453,3734 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 10453,3734 L 10578,3984 10703,3734 10453,3734 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 11436,3862 L 11561,4112 11686,3862 11436,3862 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 11436,3862 L 11561,4112 11686,3862 11436,3862 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 12419,3799 L 12544,4049 12669,3799 12419,3799 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 12419,3799 L 12544,4049 12669,3799 12419,3799 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 13402,3750 L 13527,4000 13652,3750 13402,3750 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 13402,3750 L 13527,4000 13652,3750 13402,3750 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 2715,5219 L 3698,5066 4681,4468 5664,4767 6647,4486 7630,4455 8612,4569 9595,4466 10578,4442 11561,4540 12544,4481 13527,4468"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 2590,5219 L 2715,5344 2840,5219 2715,5094 2590,5219 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 2590,5219 L 2715,5344 2840,5219 2715,5094 2590,5219 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 3573,5066 L 3698,5191 3823,5066 3698,4941 3573,5066 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 3573,5066 L 3698,5191 3823,5066 3698,4941 3573,5066 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 4556,4468 L 4681,4592 4806,4468 4681,4343 4556,4468 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 4556,4468 L 4681,4592 4806,4468 4681,4343 4556,4468 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 5539,4767 L 5664,4892 5789,4767 5664,4642 5539,4767 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 5539,4767 L 5664,4892 5789,4767 5664,4642 5539,4767 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 6522,4486 L 6647,4610 6772,4486 6647,4361 6522,4486 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 6522,4486 L 6647,4610 6772,4486 6647,4361 6522,4486 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 7505,4455 L 7630,4579 7755,4455 7630,4330 7505,4455 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 7505,4455 L 7630,4579 7755,4455 7630,4330 7505,4455 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 8487,4569 L 8612,4694 8737,4569 8612,4445 8487,4569 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 8487,4569 L 8612,4694 8737,4569 8612,4445 8487,4569 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 9470,4466 L 9595,4590 9720,4466 9595,4341 9470,4466 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 9470,4466 L 9595,4590 9720,4466 9595,4341 9470,4466 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 10453,4442 L 10578,4566 10703,4442 10578,4317 10453,4442 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 10453,4442 L 10578,4566 10703,4442 10578,4317 10453,4442 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 11436,4540 L 11561,4665 11686,4540 11561,4416 11436,4540 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 11436,4540 L 11561,4665 11686,4540 11561,4416 11436,4540 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 12419,4481 L 12544,4605 12669,4481 12544,4356 12419,4481 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 12419,4481 L 12544,4605 12669,4481 12544,4356 12419,4481 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13402,4468 L 13527,4592 13652,4468 13527,4343 13402,4468 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13402,4468 L 13527,4592 13652,4468 13527,4343 13402,4468 Z"/>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 740 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="740" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 1723 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1723" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 2706 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2706" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 3689 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="3689" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 4672 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="4672" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 5655 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="5655" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 6638 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="6638" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 7621 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="7621" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 8604 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="8604" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 9587 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="9587" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 10570 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="10570" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 11552 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="11552" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="6335"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1724" y="5655"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1724" y="4976"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1724" y="4296"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1724" y="3617"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1724" y="2937"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">5000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1724" y="2258"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">6000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1724" y="1579"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">7000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="459px" font-weight="400"><tspan class="TextPosition" x="3409" y="745"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Random Write (4k block size, 64 queue depth)</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="388px" font-weight="400"><tspan class="TextPosition" x="3685" y="1248"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Average Network Throughput, primary coordinator</tspan></tspan></tspan></text>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 13363,7856 L 14163,7856"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13657,7751 L 13657,7962 13868,7962 13868,7751 13657,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13657,7751 L 13657,7962 13868,7962 13868,7751 13657,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-width="80" stroke-linejoin="round" d="M 13363,8254 L 14163,8254"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 13657,8149 L 13763,8360 13868,8149 13657,8149 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 13657,8149 L 13763,8360 13868,8149 13657,8149 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 13363,8652 L 14163,8652"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13657,8652 L 13763,8758 13868,8652 13763,8547 13657,8652 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13657,8652 L 13763,8758 13868,8652 13763,8547 13657,8652 Z"/>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14263" y="7976"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Total</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14263" y="8374"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Send</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14263" y="8772"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Receive</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-90 1372 5697)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="318px" font-weight="400"><tspan class="TextPosition" x="1372" y="5697"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Network Throughput Mbps</tspan></tspan></tspan></text>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 23 KiB |
@ -0,0 +1,168 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="160mm" height="90mm" viewBox="0 0 16000 9000" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="28.222" stroke-linejoin="round" xml:space="preserve">
|
||||||
|
<path fill="rgb(255,255,255)" stroke="none" d="M 7987,8986 L -13,8986 -13,-13 15986,-13 15986,8986 7987,8986 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8121,6215 L 2715,6215 2715,1460 13527,1460 13527,6215 8121,6215 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,5421 L 2715,5421"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4628 L 2715,4628"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3044 L 2715,3044"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2251 L 2715,2251"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5421 L 2715,5421"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5421 L 2715,5421"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4628 L 2715,4628"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4628 L 2715,4628"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3044 L 2715,3044"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3044 L 2715,3044"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2251 L 2715,2251"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2251 L 2715,2251"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,5738 L 13527,5738"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,5738 L 13527,5738"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,5262 L 13527,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,5262 L 13527,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,4787 L 13527,4787"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,4787 L 13527,4787"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,4312 L 13527,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,4312 L 13527,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,3837 L 13527,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,3837 L 13527,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,3361 L 13527,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,3361 L 13527,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,2885 L 13527,2885"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,2885 L 13527,2885"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,2410 L 13527,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,2410 L 13527,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,1934 L 13527,1934"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,1934 L 13527,1934"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,1459 L 13527,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,1459 L 13527,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6214 L 13527,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 2715,1829 L 3698,2462 4681,3056 5664,2446 6647,3104 7630,3617 8612,2968 9595,3539 10578,3945 11561,3263 12544,3823 13527,4244"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 2590,1704 L 2590,1954 2840,1954 2840,1704 2590,1704 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 2590,1704 L 2590,1954 2840,1954 2840,1704 2590,1704 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 3573,2337 L 3573,2587 3823,2587 3823,2337 3573,2337 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 3573,2337 L 3573,2587 3823,2587 3823,2337 3573,2337 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 4556,2931 L 4556,3181 4806,3181 4806,2931 4556,2931 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 4556,2931 L 4556,3181 4806,3181 4806,2931 4556,2931 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 5539,2321 L 5539,2571 5789,2571 5789,2321 5539,2321 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 5539,2321 L 5539,2571 5789,2571 5789,2321 5539,2321 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 6522,2979 L 6522,3229 6772,3229 6772,2979 6522,2979 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 6522,2979 L 6522,3229 6772,3229 6772,2979 6522,2979 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 7505,3492 L 7505,3742 7755,3742 7755,3492 7505,3492 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 7505,3492 L 7505,3742 7755,3742 7755,3492 7505,3492 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 8487,2843 L 8487,3093 8737,3093 8737,2843 8487,2843 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 8487,2843 L 8487,3093 8737,3093 8737,2843 8487,2843 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 9470,3414 L 9470,3664 9720,3664 9720,3414 9470,3414 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 9470,3414 L 9470,3664 9720,3664 9720,3414 9470,3414 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 10453,3820 L 10453,4070 10703,4070 10703,3820 10453,3820 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 10453,3820 L 10453,4070 10703,4070 10703,3820 10453,3820 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 11436,3138 L 11436,3388 11686,3388 11686,3138 11436,3138 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 11436,3138 L 11436,3388 11686,3388 11686,3138 11436,3138 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 12419,3698 L 12419,3948 12669,3948 12669,3698 12419,3698 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 12419,3698 L 12419,3948 12669,3948 12669,3698 12419,3698 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13402,4119 L 13402,4369 13652,4369 13652,4119 13402,4119 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13402,4119 L 13402,4369 13652,4369 13652,4119 13402,4119 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-width="80" stroke-linejoin="round" d="M 2715,5001 L 3698,4906 4681,4916 5664,4916 6647,4976 7630,4872 8612,4754 9595,4880 10578,4878 11561,4938 12544,4605 13527,4849"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 2590,5001 L 2715,5126 2840,5001 2715,4876 2590,5001 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 2590,5001 L 2715,5126 2840,5001 2715,4876 2590,5001 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 3573,4906 L 3698,5031 3823,4906 3698,4781 3573,4906 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 3573,4906 L 3698,5031 3823,4906 3698,4781 3573,4906 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 4556,4916 L 4681,5041 4806,4916 4681,4791 4556,4916 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 4556,4916 L 4681,5041 4806,4916 4681,4791 4556,4916 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 5539,4916 L 5664,5041 5789,4916 5664,4791 5539,4916 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 5539,4916 L 5664,5041 5789,4916 5664,4791 5539,4916 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 6522,4976 L 6647,5101 6772,4976 6647,4851 6522,4976 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 6522,4976 L 6647,5101 6772,4976 6647,4851 6522,4976 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 7505,4872 L 7630,4997 7755,4872 7630,4747 7505,4872 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 7505,4872 L 7630,4997 7755,4872 7630,4747 7505,4872 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 8487,4754 L 8612,4879 8737,4754 8612,4629 8487,4754 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 8487,4754 L 8612,4879 8737,4754 8612,4629 8487,4754 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 9470,4880 L 9595,5005 9720,4880 9595,4755 9470,4880 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 9470,4880 L 9595,5005 9720,4880 9595,4755 9470,4880 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 10453,4878 L 10578,5003 10703,4878 10578,4753 10453,4878 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 10453,4878 L 10578,5003 10703,4878 10578,4753 10453,4878 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 11436,4938 L 11561,5063 11686,4938 11561,4813 11436,4938 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 11436,4938 L 11561,5063 11686,4938 11561,4813 11436,4938 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 12419,4605 L 12544,4730 12669,4605 12544,4481 12419,4605 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 12419,4605 L 12544,4730 12669,4605 12544,4481 12419,4605 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 13402,4849 L 13527,4974 13652,4849 13527,4724 13402,4849 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 13402,4849 L 13527,4974 13652,4849 13527,4724 13402,4849 Z"/>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 740 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="740" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 1723 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1723" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 2706 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2706" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 3689 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="3689" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 4672 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="4672" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 5655 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="5655" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 6638 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="6638" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 7621 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="7621" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 8604 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="8604" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 9587 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="9587" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 10570 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="10570" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 11552 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="11552" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1724" y="6335"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1724" y="5542"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4200</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1724" y="4749"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4400</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1724" y="3957"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4600</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1724" y="3164"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4800</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1724" y="2371"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">5000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1724" y="1579"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">5200</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="6335"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="5859"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1200</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="5383"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1400</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="4908"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1600</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="4432"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1800</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="3957"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="3481"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2200</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="3005"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2400</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="2530"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2600</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="2054"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2800</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="1579"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="459px" font-weight="400"><tspan class="TextPosition" x="3530" y="739"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Random Read (4k block size, 1 queue depth)</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="388px" font-weight="400"><tspan class="TextPosition" x="6083" y="1248"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Throughput & Latency</tspan></tspan></tspan></text>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 13377,8056 L 14177,8056"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13671,7951 L 13671,8162 13882,8162 13882,7951 13671,7951 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13671,7951 L 13671,8162 13882,8162 13882,7951 13671,7951 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-width="80" stroke-linejoin="round" d="M 13377,8554 L 14177,8554"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 13671,8554 L 13777,8660 13882,8554 13777,8449 13671,8554 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 13671,8554 L 13777,8660 13882,8554 13777,8449 13671,8554 Z"/>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14277" y="8176"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">IOPS</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14277" y="8674"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Latency</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-90 973 5402)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="318px" font-weight="400"><tspan class="TextPosition" x="973" y="5402"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">IOPS (higher is better)</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-90 15227 5763)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="318px" font-weight="400"><tspan class="TextPosition" x="15227" y="5763"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Latency μs (lower is better)</tspan></tspan></tspan></text>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 25 KiB |
@ -0,0 +1,166 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="160mm" height="90mm" viewBox="0 0 16000 9000" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="28.222" stroke-linejoin="round" xml:space="preserve">
|
||||||
|
<path fill="rgb(255,255,255)" stroke="none" d="M 7987,8986 L -13,8986 -13,-13 15986,-13 15986,8986 7987,8986 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8121,6215 L 2715,6215 2715,1460 13527,1460 13527,6215 8121,6215 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,5534 L 2715,5534"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4855 L 2715,4855"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4176 L 2715,4176"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3497 L 2715,3497"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2817 L 2715,2817"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2138 L 2715,2138"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,1458 L 2715,1458"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5534 L 2715,5534"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5534 L 2715,5534"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4855 L 2715,4855"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4855 L 2715,4855"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4176 L 2715,4176"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4176 L 2715,4176"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3497 L 2715,3497"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3497 L 2715,3497"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2817 L 2715,2817"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2817 L 2715,2817"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2138 L 2715,2138"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2138 L 2715,2138"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1458 L 2715,1458"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1458 L 2715,1458"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 2715,2138 L 3698,2138 4681,2138 5664,2817 6647,2138 7630,2138 8612,2817 9595,2138 10578,2138 11561,2138 12544,2138 13527,2138"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 2590,2013 L 2590,2263 2840,2263 2840,2013 2590,2013 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 2590,2013 L 2590,2263 2840,2263 2840,2013 2590,2013 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 3573,2013 L 3573,2263 3823,2263 3823,2013 3573,2013 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 3573,2013 L 3573,2263 3823,2263 3823,2013 3573,2013 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 4556,2013 L 4556,2263 4806,2263 4806,2013 4556,2013 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 4556,2013 L 4556,2263 4806,2263 4806,2013 4556,2013 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 5539,2692 L 5539,2942 5789,2942 5789,2692 5539,2692 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 5539,2692 L 5539,2942 5789,2942 5789,2692 5539,2692 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 6522,2013 L 6522,2263 6772,2263 6772,2013 6522,2013 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 6522,2013 L 6522,2263 6772,2263 6772,2013 6522,2013 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 7505,2013 L 7505,2263 7755,2263 7755,2013 7505,2013 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 7505,2013 L 7505,2263 7755,2263 7755,2013 7505,2013 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 8487,2692 L 8487,2942 8737,2942 8737,2692 8487,2692 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 8487,2692 L 8487,2942 8737,2942 8737,2692 8487,2692 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 9470,2013 L 9470,2263 9720,2263 9720,2013 9470,2013 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 9470,2013 L 9470,2263 9720,2263 9720,2013 9470,2013 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 10453,2013 L 10453,2263 10703,2263 10703,2013 10453,2013 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 10453,2013 L 10453,2263 10703,2263 10703,2013 10453,2013 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 11436,2013 L 11436,2263 11686,2263 11686,2013 11436,2013 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 11436,2013 L 11436,2263 11686,2263 11686,2013 11436,2013 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 12419,2013 L 12419,2263 12669,2263 12669,2013 12419,2013 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 12419,2013 L 12419,2263 12669,2263 12669,2013 12419,2013 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13402,2013 L 13402,2263 13652,2263 13652,2013 13402,2013 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13402,2013 L 13402,2263 13652,2263 13652,2013 13402,2013 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-width="80" stroke-linejoin="round" d="M 2715,5534 L 3698,5534 4681,5534 5664,5534 6647,5534 7630,5534 8612,5534 9595,5534 10578,5534 11561,5534 12544,5534 13527,5534"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 2590,5409 L 2715,5659 2840,5409 2590,5409 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 2590,5409 L 2715,5659 2840,5409 2590,5409 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 3573,5409 L 3698,5659 3823,5409 3573,5409 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 3573,5409 L 3698,5659 3823,5409 3573,5409 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 4556,5409 L 4681,5659 4806,5409 4556,5409 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 4556,5409 L 4681,5659 4806,5409 4556,5409 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 5539,5409 L 5664,5659 5789,5409 5539,5409 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 5539,5409 L 5664,5659 5789,5409 5539,5409 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 6522,5409 L 6647,5659 6772,5409 6522,5409 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 6522,5409 L 6647,5659 6772,5409 6522,5409 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 7505,5409 L 7630,5659 7755,5409 7505,5409 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 7505,5409 L 7630,5659 7755,5409 7505,5409 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 8487,5409 L 8612,5659 8737,5409 8487,5409 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 8487,5409 L 8612,5659 8737,5409 8487,5409 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 9470,5409 L 9595,5659 9720,5409 9470,5409 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 9470,5409 L 9595,5659 9720,5409 9470,5409 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 10453,5409 L 10578,5659 10703,5409 10453,5409 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 10453,5409 L 10578,5659 10703,5409 10453,5409 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 11436,5409 L 11561,5659 11686,5409 11436,5409 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 11436,5409 L 11561,5659 11686,5409 11436,5409 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 12419,5409 L 12544,5659 12669,5409 12419,5409 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 12419,5409 L 12544,5659 12669,5409 12419,5409 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 13402,5409 L 13527,5659 13652,5409 13402,5409 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 13402,5409 L 13527,5659 13652,5409 13402,5409 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 2715,6214 L 3698,6214 4681,6214 5664,6214 6647,6214 7630,6214 8612,6214 9595,6214 10578,6214 11561,6214 12544,6214 13527,6214"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 2590,6214 L 2715,6339 2840,6214 2715,6089 2590,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 2590,6214 L 2715,6339 2840,6214 2715,6089 2590,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 3573,6214 L 3698,6339 3823,6214 3698,6089 3573,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 3573,6214 L 3698,6339 3823,6214 3698,6089 3573,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 4556,6214 L 4681,6339 4806,6214 4681,6089 4556,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 4556,6214 L 4681,6339 4806,6214 4681,6089 4556,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 5539,6214 L 5664,6339 5789,6214 5664,6089 5539,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 5539,6214 L 5664,6339 5789,6214 5664,6089 5539,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 6522,6214 L 6647,6339 6772,6214 6647,6089 6522,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 6522,6214 L 6647,6339 6772,6214 6647,6089 6522,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 7505,6214 L 7630,6339 7755,6214 7630,6089 7505,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 7505,6214 L 7630,6339 7755,6214 7630,6089 7505,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 8487,6214 L 8612,6339 8737,6214 8612,6089 8487,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 8487,6214 L 8612,6339 8737,6214 8612,6089 8487,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 9470,6214 L 9595,6339 9720,6214 9595,6089 9470,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 9470,6214 L 9595,6339 9720,6214 9595,6089 9470,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 10453,6214 L 10578,6339 10703,6214 10578,6089 10453,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 10453,6214 L 10578,6339 10703,6214 10578,6089 10453,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 11436,6214 L 11561,6339 11686,6214 11561,6089 11436,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 11436,6214 L 11561,6339 11686,6214 11561,6089 11436,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 12419,6214 L 12544,6339 12669,6214 12544,6089 12419,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 12419,6214 L 12544,6339 12669,6214 12544,6089 12419,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13402,6214 L 13527,6339 13652,6214 13527,6089 13402,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13402,6214 L 13527,6339 13652,6214 13527,6089 13402,6214 Z"/>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 740 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="740" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 1723 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1723" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 2706 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2706" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 3689 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="3689" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 4672 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="4672" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 5655 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="5655" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 6638 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="6638" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 7621 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="7621" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 8604 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="8604" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 9587 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="9587" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 10570 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="10570" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 11552 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="11552" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="6335"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="5655"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0.1</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="4976"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0.2</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="4296"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0.3</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="3617"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0.4</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="2937"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0.5</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="2258"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0.6</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="1578"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0.7</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="459px" font-weight="400"><tspan class="TextPosition" x="3410" y="742"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Random Read (4k block size, 1 queue depth)</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="388px" font-weight="400"><tspan class="TextPosition" x="3084" y="1248"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">CPU Utilization of 128 logical cores, primary coordinator</tspan></tspan></tspan></text>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 13231,7856 L 14031,7856"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13525,7751 L 13525,7962 13736,7962 13736,7751 13525,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13525,7751 L 13525,7962 13736,7962 13736,7751 13525,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-width="80" stroke-linejoin="round" d="M 13231,8248 L 14031,8248"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 13525,8143 L 13631,8354 13736,8143 13525,8143 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 13525,8143 L 13631,8354 13736,8143 13525,8143 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 13231,8640 L 14031,8640"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13525,8640 L 13631,8746 13736,8640 13631,8535 13525,8640 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13525,8640 L 13631,8746 13736,8640 13631,8535 13525,8640 Z"/>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="7976"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Total</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="8368"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">ceph-osd</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="8760"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">ceph-mon</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-90 1573 6198)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="318px" font-weight="400"><tspan class="TextPosition" x="1573" y="6198"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">CPU Utilization % (lower is better)</tspan></tspan></tspan></text>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 23 KiB |
@ -0,0 +1,162 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="160mm" height="90mm" viewBox="0 0 16000 9000" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="28.222" stroke-linejoin="round" xml:space="preserve">
|
||||||
|
<path fill="rgb(255,255,255)" stroke="none" d="M 7987,8986 L -13,8986 -13,-13 15986,-13 15986,8986 7987,8986 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8121,6215 L 2715,6215 2715,1460 13527,1460 13527,6215 8121,6215 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,5421 L 2715,5421"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4628 L 2715,4628"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3044 L 2715,3044"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2251 L 2715,2251"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5421 L 2715,5421"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5421 L 2715,5421"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4628 L 2715,4628"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4628 L 2715,4628"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3044 L 2715,3044"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3044 L 2715,3044"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2251 L 2715,2251"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2251 L 2715,2251"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 2715,4628 L 3698,4628 4681,4312 5664,4312 6647,3995 7630,3599 8612,3916 9595,3678 10578,3044 11561,3599 12544,3282 13527,2410"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 2590,4503 L 2590,4753 2840,4753 2840,4503 2590,4503 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 2590,4503 L 2590,4753 2840,4753 2840,4503 2590,4503 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 3573,4503 L 3573,4753 3823,4753 3823,4503 3573,4503 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 3573,4503 L 3573,4753 3823,4753 3823,4503 3573,4503 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 4556,4187 L 4556,4437 4806,4437 4806,4187 4556,4187 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 4556,4187 L 4556,4437 4806,4437 4806,4187 4556,4187 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 5539,4187 L 5539,4437 5789,4437 5789,4187 5539,4187 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 5539,4187 L 5539,4437 5789,4437 5789,4187 5539,4187 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 6522,3870 L 6522,4120 6772,4120 6772,3870 6522,3870 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 6522,3870 L 6522,4120 6772,4120 6772,3870 6522,3870 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 7505,3474 L 7505,3724 7755,3724 7755,3474 7505,3474 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 7505,3474 L 7505,3724 7755,3724 7755,3474 7505,3474 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 8487,3791 L 8487,4041 8737,4041 8737,3791 8487,3791 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 8487,3791 L 8487,4041 8737,4041 8737,3791 8487,3791 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 9470,3553 L 9470,3803 9720,3803 9720,3553 9470,3553 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 9470,3553 L 9470,3803 9720,3803 9720,3553 9470,3553 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 10453,2919 L 10453,3169 10703,3169 10703,2919 10453,2919 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 10453,2919 L 10453,3169 10703,3169 10703,2919 10453,2919 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 11436,3474 L 11436,3724 11686,3724 11686,3474 11436,3474 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 11436,3474 L 11436,3724 11686,3724 11686,3474 11436,3474 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 12419,3157 L 12419,3407 12669,3407 12669,3157 12419,3157 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 12419,3157 L 12419,3407 12669,3407 12669,3157 12419,3157 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13402,2285 L 13402,2535 13652,2535 13652,2285 13402,2285 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13402,2285 L 13402,2535 13652,2535 13652,2285 13402,2285 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-width="80" stroke-linejoin="round" d="M 2715,5659 L 3698,5659 4681,5342 5664,5342 6647,5104 7630,4707 8612,4945 9595,4707 10578,4074 11561,4707 12544,4312 13527,3519"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 2590,5534 L 2715,5784 2840,5534 2590,5534 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 2590,5534 L 2715,5784 2840,5534 2590,5534 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 3573,5534 L 3698,5784 3823,5534 3573,5534 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 3573,5534 L 3698,5784 3823,5534 3573,5534 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 4556,5217 L 4681,5467 4806,5217 4556,5217 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 4556,5217 L 4681,5467 4806,5217 4556,5217 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 5539,5217 L 5664,5467 5789,5217 5539,5217 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 5539,5217 L 5664,5467 5789,5217 5539,5217 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 6522,4979 L 6647,5229 6772,4979 6522,4979 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 6522,4979 L 6647,5229 6772,4979 6522,4979 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 7505,4582 L 7630,4832 7755,4582 7505,4582 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 7505,4582 L 7630,4832 7755,4582 7505,4582 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 8487,4820 L 8612,5070 8737,4820 8487,4820 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 8487,4820 L 8612,5070 8737,4820 8487,4820 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 9470,4582 L 9595,4832 9720,4582 9470,4582 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 9470,4582 L 9595,4832 9720,4582 9470,4582 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 10453,3949 L 10578,4199 10703,3949 10453,3949 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 10453,3949 L 10578,4199 10703,3949 10453,3949 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 11436,4582 L 11561,4832 11686,4582 11436,4582 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 11436,4582 L 11561,4832 11686,4582 11436,4582 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 12419,4187 L 12544,4437 12669,4187 12419,4187 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 12419,4187 L 12544,4437 12669,4187 12419,4187 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 13402,3394 L 13527,3644 13652,3394 13402,3394 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 13402,3394 L 13527,3644 13652,3394 13402,3394 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 2715,6134 L 3698,6134 4681,6134 5664,6134 6647,6134 7630,6134 8612,6134 9595,6134 10578,6134 11561,6134 12544,6134 13527,6134"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 2590,6134 L 2715,6259 2840,6134 2715,6009 2590,6134 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 2590,6134 L 2715,6259 2840,6134 2715,6009 2590,6134 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 3573,6134 L 3698,6259 3823,6134 3698,6009 3573,6134 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 3573,6134 L 3698,6259 3823,6134 3698,6009 3573,6134 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 4556,6134 L 4681,6259 4806,6134 4681,6009 4556,6134 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 4556,6134 L 4681,6259 4806,6134 4681,6009 4556,6134 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 5539,6134 L 5664,6259 5789,6134 5664,6009 5539,6134 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 5539,6134 L 5664,6259 5789,6134 5664,6009 5539,6134 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 6522,6134 L 6647,6259 6772,6134 6647,6009 6522,6134 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 6522,6134 L 6647,6259 6772,6134 6647,6009 6522,6134 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 7505,6134 L 7630,6259 7755,6134 7630,6009 7505,6134 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 7505,6134 L 7630,6259 7755,6134 7630,6009 7505,6134 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 8487,6134 L 8612,6259 8737,6134 8612,6009 8487,6134 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 8487,6134 L 8612,6259 8737,6134 8612,6009 8487,6134 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 9470,6134 L 9595,6259 9720,6134 9595,6009 9470,6134 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 9470,6134 L 9595,6259 9720,6134 9595,6009 9470,6134 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 10453,6134 L 10578,6259 10703,6134 10578,6009 10453,6134 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 10453,6134 L 10578,6259 10703,6134 10578,6009 10453,6134 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 11436,6134 L 11561,6259 11686,6134 11561,6009 11436,6134 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 11436,6134 L 11561,6259 11686,6134 11561,6009 11436,6134 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 12419,6134 L 12544,6259 12669,6134 12544,6009 12419,6134 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 12419,6134 L 12544,6259 12669,6134 12544,6009 12419,6134 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13402,6134 L 13527,6259 13652,6134 13527,6009 13402,6134 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13402,6134 L 13527,6259 13652,6134 13527,6009 13402,6134 Z"/>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 740 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="740" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 1723 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1723" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 2706 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2706" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 3689 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="3689" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 4672 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="4672" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 5655 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="5655" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 6638 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="6638" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 7621 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="7621" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 8604 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="8604" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 9587 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="9587" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 10570 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="10570" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 11552 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="11552" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="6335"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="5542"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="4749"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="3957"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="3164"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="2371"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">5</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="1579"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">6</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="459px" font-weight="400"><tspan class="TextPosition" x="3411" y="743"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Random Read (4k block size, 1 queue depth)</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="388px" font-weight="400"><tspan class="TextPosition" x="3484" y="1248"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Memory Utilization of 1024 GB, primary coordinator</tspan></tspan></tspan></text>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 13231,7856 L 14031,7856"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13525,7751 L 13525,7962 13736,7962 13736,7751 13525,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13525,7751 L 13525,7962 13736,7962 13736,7751 13525,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-width="80" stroke-linejoin="round" d="M 13231,8251 L 14031,8251"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 13525,8146 L 13631,8357 13736,8146 13525,8146 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 13525,8146 L 13631,8357 13736,8146 13525,8146 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 13231,8646 L 14031,8646"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13525,8646 L 13631,8752 13736,8646 13631,8541 13525,8646 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13525,8646 L 13631,8752 13736,8646 13631,8541 13525,8646 Z"/>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="7976"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Total</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="8371"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">ceph-osd</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="8766"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">ceph-mon</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-90 1573 6398)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="318px" font-weight="400"><tspan class="TextPosition" x="1573" y="6398"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Memory Utilization % (lower is better)</tspan></tspan></tspan></text>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 22 KiB |
@ -0,0 +1,170 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="160mm" height="90mm" viewBox="0 0 16000 9000" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="28.222" stroke-linejoin="round" xml:space="preserve">
|
||||||
|
<path fill="rgb(255,255,255)" stroke="none" d="M 7987,8986 L -13,8986 -13,-13 15986,-13 15986,8986 7987,8986 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8121,6215 L 2715,6215 2715,1460 13527,1460 13527,6215 8121,6215 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,5619 L 2715,5619"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,5025 L 2715,5025"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4431 L 2715,4431"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3242 L 2715,3242"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2648 L 2715,2648"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2053 L 2715,2053"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5619 L 2715,5619"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5619 L 2715,5619"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5025 L 2715,5025"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5025 L 2715,5025"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4431 L 2715,4431"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4431 L 2715,4431"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3242 L 2715,3242"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3242 L 2715,3242"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2648 L 2715,2648"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2648 L 2715,2648"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2053 L 2715,2053"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2053 L 2715,2053"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 2715,2112 L 3698,2231 4681,2321 5664,2202 6647,2321 7630,2380 8612,2321 9595,2380 10578,2410 11561,2350 12544,2410 13527,2439"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 2590,1987 L 2590,2237 2840,2237 2840,1987 2590,1987 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 2590,1987 L 2590,2237 2840,2237 2840,1987 2590,1987 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 3573,2106 L 3573,2356 3823,2356 3823,2106 3573,2106 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 3573,2106 L 3573,2356 3823,2356 3823,2106 3573,2106 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 4556,2196 L 4556,2446 4806,2446 4806,2196 4556,2196 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 4556,2196 L 4556,2446 4806,2446 4806,2196 4556,2196 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 5539,2077 L 5539,2327 5789,2327 5789,2077 5539,2077 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 5539,2077 L 5539,2327 5789,2327 5789,2077 5539,2077 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 6522,2196 L 6522,2446 6772,2446 6772,2196 6522,2196 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 6522,2196 L 6522,2446 6772,2446 6772,2196 6522,2196 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 7505,2255 L 7505,2505 7755,2505 7755,2255 7505,2255 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 7505,2255 L 7505,2505 7755,2505 7755,2255 7505,2255 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 8487,2196 L 8487,2446 8737,2446 8737,2196 8487,2196 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 8487,2196 L 8487,2446 8737,2446 8737,2196 8487,2196 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 9470,2255 L 9470,2505 9720,2505 9720,2255 9470,2255 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 9470,2255 L 9470,2505 9720,2505 9720,2255 9470,2255 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 10453,2285 L 10453,2535 10703,2535 10703,2285 10453,2285 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 10453,2285 L 10453,2535 10703,2535 10703,2285 10453,2285 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 11436,2225 L 11436,2475 11686,2475 11686,2225 11436,2225 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 11436,2225 L 11436,2475 11686,2475 11686,2225 11436,2225 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 12419,2285 L 12419,2535 12669,2535 12669,2285 12419,2285 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 12419,2285 L 12419,2535 12669,2535 12669,2285 12419,2285 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13402,2314 L 13402,2564 13652,2564 13652,2314 13402,2314 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13402,2314 L 13402,2564 13652,2564 13652,2314 13402,2314 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-width="80" stroke-linejoin="round" d="M 2715,5857 L 3698,5857 4681,5857 5664,5857 6647,5857 7630,5827 8612,5857 9595,5827 10578,5827 11561,5857 12544,5827 13527,5797"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 2590,5732 L 2715,5982 2840,5732 2590,5732 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 2590,5732 L 2715,5982 2840,5732 2590,5732 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 3573,5732 L 3698,5982 3823,5732 3573,5732 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 3573,5732 L 3698,5982 3823,5732 3573,5732 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 4556,5732 L 4681,5982 4806,5732 4556,5732 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 4556,5732 L 4681,5982 4806,5732 4556,5732 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 5539,5732 L 5664,5982 5789,5732 5539,5732 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 5539,5732 L 5664,5982 5789,5732 5539,5732 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 6522,5732 L 6647,5982 6772,5732 6522,5732 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 6522,5732 L 6647,5982 6772,5732 6522,5732 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 7505,5702 L 7630,5952 7755,5702 7505,5702 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 7505,5702 L 7630,5952 7755,5702 7505,5702 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 8487,5732 L 8612,5982 8737,5732 8487,5732 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 8487,5732 L 8612,5982 8737,5732 8487,5732 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 9470,5702 L 9595,5952 9720,5702 9470,5702 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 9470,5702 L 9595,5952 9720,5702 9470,5702 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 10453,5702 L 10578,5952 10703,5702 10453,5702 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 10453,5702 L 10578,5952 10703,5702 10453,5702 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 11436,5732 L 11561,5982 11686,5732 11436,5732 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 11436,5732 L 11561,5982 11686,5732 11436,5732 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 12419,5702 L 12544,5952 12669,5702 12419,5702 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 12419,5702 L 12544,5952 12669,5702 12419,5702 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 13402,5672 L 13527,5922 13652,5672 13402,5672 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 13402,5672 L 13527,5922 13652,5672 13402,5672 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 2715,2469 L 3698,2588 4681,2707 5664,2558 6647,2677 7630,2766 8612,2677 9595,2737 10578,2796 11561,2737 12544,2796 13527,2856"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 2590,2469 L 2715,2594 2840,2469 2715,2344 2590,2469 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 2590,2469 L 2715,2594 2840,2469 2715,2344 2590,2469 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 3573,2588 L 3698,2713 3823,2588 3698,2463 3573,2588 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 3573,2588 L 3698,2713 3823,2588 3698,2463 3573,2588 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 4556,2707 L 4681,2832 4806,2707 4681,2582 4556,2707 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 4556,2707 L 4681,2832 4806,2707 4681,2582 4556,2707 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 5539,2558 L 5664,2683 5789,2558 5664,2433 5539,2558 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 5539,2558 L 5664,2683 5789,2558 5664,2433 5539,2558 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 6522,2677 L 6647,2802 6772,2677 6647,2552 6522,2677 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 6522,2677 L 6647,2802 6772,2677 6647,2552 6522,2677 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 7505,2766 L 7630,2891 7755,2766 7630,2641 7505,2766 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 7505,2766 L 7630,2891 7755,2766 7630,2641 7505,2766 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 8487,2677 L 8612,2802 8737,2677 8612,2552 8487,2677 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 8487,2677 L 8612,2802 8737,2677 8612,2552 8487,2677 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 9470,2737 L 9595,2862 9720,2737 9595,2612 9470,2737 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 9470,2737 L 9595,2862 9720,2737 9595,2612 9470,2737 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 10453,2796 L 10578,2921 10703,2796 10578,2671 10453,2796 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 10453,2796 L 10578,2921 10703,2796 10578,2671 10453,2796 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 11436,2737 L 11561,2862 11686,2737 11561,2612 11436,2737 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 11436,2737 L 11561,2862 11686,2737 11561,2612 11436,2737 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 12419,2796 L 12544,2921 12669,2796 12544,2671 12419,2796 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 12419,2796 L 12544,2921 12669,2796 12544,2671 12419,2796 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13402,2856 L 13527,2981 13652,2856 13527,2731 13402,2856 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13402,2856 L 13527,2981 13652,2856 13527,2731 13402,2856 Z"/>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 740 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="740" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 1723 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1723" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 2706 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2706" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 3689 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="3689" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 4672 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="4672" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 5655 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="5655" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 6638 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="6638" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 7621 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="7621" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 8604 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="8604" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 9587 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="9587" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 10570 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="10570" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 11552 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="11552" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="6335"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2095" y="5740"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">20</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2095" y="5146"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">40</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2095" y="4551"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">60</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2095" y="3957"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">80</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1909" y="3362"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">100</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1909" y="2768"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">120</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1909" y="2173"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">140</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1909" y="1579"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">160</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="459px" font-weight="400"><tspan class="TextPosition" x="3413" y="745"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Random Read (4k block size, 1 queue depth)</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="388px" font-weight="400"><tspan class="TextPosition" x="3485" y="1248"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Average Network Throughput, primary coordinator</tspan></tspan></tspan></text>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 13363,7856 L 14163,7856"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13657,7751 L 13657,7962 13868,7962 13868,7751 13657,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13657,7751 L 13657,7962 13868,7962 13868,7751 13657,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-width="80" stroke-linejoin="round" d="M 13363,8254 L 14163,8254"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 13657,8149 L 13763,8360 13868,8149 13657,8149 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 13657,8149 L 13763,8360 13868,8149 13657,8149 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 13363,8652 L 14163,8652"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13657,8652 L 13763,8758 13868,8652 13763,8547 13657,8652 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13657,8652 L 13763,8758 13868,8652 13763,8547 13657,8652 Z"/>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14263" y="7976"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Total</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14263" y="8374"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Send</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14263" y="8772"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Receive</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-90 1372 5697)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="318px" font-weight="400"><tspan class="TextPosition" x="1372" y="5697"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Network Throughput Mbps</tspan></tspan></tspan></text>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 24 KiB |
@ -0,0 +1,164 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="160mm" height="90mm" viewBox="0 0 16000 9000" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="28.222" stroke-linejoin="round" xml:space="preserve">
|
||||||
|
<path fill="rgb(255,255,255)" stroke="none" d="M 7987,8986 L -13,8986 -13,-13 15986,-13 15986,8986 7987,8986 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8121,6215 L 2715,6215 2715,1460 13527,1460 13527,6215 8121,6215 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,5262 L 2715,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4312 L 2715,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3361 L 2715,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2410 L 2715,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5262 L 2715,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5262 L 2715,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4312 L 2715,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4312 L 2715,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3361 L 2715,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3361 L 2715,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2410 L 2715,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2410 L 2715,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,5738 L 13527,5738"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,5738 L 13527,5738"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,5262 L 13527,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,5262 L 13527,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,4787 L 13527,4787"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,4787 L 13527,4787"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,4312 L 13527,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,4312 L 13527,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,3837 L 13527,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,3837 L 13527,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,3361 L 13527,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,3361 L 13527,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,2885 L 13527,2885"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,2885 L 13527,2885"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,2410 L 13527,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,2410 L 13527,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,1934 L 13527,1934"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,1934 L 13527,1934"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,1459 L 13527,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,1459 L 13527,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6214 L 13527,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 2715,1847 L 3698,2261 4681,2671 5664,2341 6647,2708 7630,2997 8612,2599 9595,2907 10578,3195 11561,2720 12544,3030 13527,3304"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 2590,1722 L 2590,1972 2840,1972 2840,1722 2590,1722 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 2590,1722 L 2590,1972 2840,1972 2840,1722 2590,1722 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 3573,2136 L 3573,2386 3823,2386 3823,2136 3573,2136 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 3573,2136 L 3573,2386 3823,2386 3823,2136 3573,2136 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 4556,2546 L 4556,2796 4806,2796 4806,2546 4556,2546 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 4556,2546 L 4556,2796 4806,2796 4806,2546 4556,2546 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 5539,2216 L 5539,2466 5789,2466 5789,2216 5539,2216 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 5539,2216 L 5539,2466 5789,2466 5789,2216 5539,2216 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 6522,2583 L 6522,2833 6772,2833 6772,2583 6522,2583 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 6522,2583 L 6522,2833 6772,2833 6772,2583 6522,2583 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 7505,2872 L 7505,3122 7755,3122 7755,2872 7505,2872 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 7505,2872 L 7505,3122 7755,3122 7755,2872 7505,2872 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 8487,2474 L 8487,2724 8737,2724 8737,2474 8487,2474 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 8487,2474 L 8487,2724 8737,2724 8737,2474 8487,2474 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 9470,2782 L 9470,3032 9720,3032 9720,2782 9470,2782 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 9470,2782 L 9470,3032 9720,3032 9720,2782 9470,2782 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 10453,3070 L 10453,3320 10703,3320 10703,3070 10453,3070 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 10453,3070 L 10453,3320 10703,3320 10703,3070 10453,3070 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 11436,2595 L 11436,2845 11686,2845 11686,2595 11436,2595 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 11436,2595 L 11436,2845 11686,2845 11686,2595 11436,2595 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 12419,2905 L 12419,3155 12669,3155 12669,2905 12419,2905 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 12419,2905 L 12419,3155 12669,3155 12669,2905 12419,2905 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13402,3179 L 13402,3429 13652,3429 13652,3179 13402,3179 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13402,3179 L 13402,3429 13652,3429 13652,3179 13402,3179 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-width="80" stroke-linejoin="round" d="M 2715,5046 L 3698,5368 4681,5307 5664,4991 6647,4436 7630,5162 8612,4093 9595,4724 10578,5068 11561,5466 12544,4465 13527,4570"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 2590,5046 L 2715,5171 2840,5046 2715,4921 2590,5046 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 2590,5046 L 2715,5171 2840,5046 2715,4921 2590,5046 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 3573,5368 L 3698,5493 3823,5368 3698,5243 3573,5368 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 3573,5368 L 3698,5493 3823,5368 3698,5243 3573,5368 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 4556,5307 L 4681,5432 4806,5307 4681,5182 4556,5307 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 4556,5307 L 4681,5432 4806,5307 4681,5182 4556,5307 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 5539,4991 L 5664,5116 5789,4991 5664,4866 5539,4991 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 5539,4991 L 5664,5116 5789,4991 5664,4866 5539,4991 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 6522,4436 L 6647,4560 6772,4436 6647,4311 6522,4436 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 6522,4436 L 6647,4560 6772,4436 6647,4311 6522,4436 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 7505,5162 L 7630,5287 7755,5162 7630,5037 7505,5162 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 7505,5162 L 7630,5287 7755,5162 7630,5037 7505,5162 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 8487,4093 L 8612,4218 8737,4093 8612,3968 8487,4093 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 8487,4093 L 8612,4218 8737,4093 8612,3968 8487,4093 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 9470,4724 L 9595,4849 9720,4724 9595,4599 9470,4724 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 9470,4724 L 9595,4849 9720,4724 9595,4599 9470,4724 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 10453,5068 L 10578,5193 10703,5068 10578,4943 10453,5068 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 10453,5068 L 10578,5193 10703,5068 10578,4943 10453,5068 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 11436,5466 L 11561,5591 11686,5466 11561,5341 11436,5466 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 11436,5466 L 11561,5591 11686,5466 11561,5341 11436,5466 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 12419,4465 L 12544,4589 12669,4465 12544,4340 12419,4465 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 12419,4465 L 12544,4589 12669,4465 12544,4340 12419,4465 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 13402,4570 L 13527,4695 13652,4570 13527,4446 13402,4570 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 13402,4570 L 13527,4695 13652,4570 13527,4446 13402,4570 Z"/>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 740 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="740" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 1723 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1723" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 2706 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2706" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 3689 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="3689" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 4672 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="4672" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 5655 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="5655" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 6638 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="6638" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 7621 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="7621" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 8604 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="8604" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 9587 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="9587" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 10570 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="10570" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 11552 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="11552" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="6335"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1909" y="5383"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">500</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1724" y="4432"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1724" y="3481"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1500</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1724" y="2530"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1724" y="1579"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2500</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="6335"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2700</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="5859"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2900</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="5383"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3100</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="4908"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3300</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="4432"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3500</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="3957"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3700</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="3481"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3900</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="3005"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4100</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="2530"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4300</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="2054"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4500</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="1579"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4700</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="459px" font-weight="400"><tspan class="TextPosition" x="3515" y="739"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Random Write (4k block size, 1 queue depth)</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="388px" font-weight="400"><tspan class="TextPosition" x="6083" y="1248"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Throughput & Latency</tspan></tspan></tspan></text>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 13377,8056 L 14177,8056"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13671,7951 L 13671,8162 13882,8162 13882,7951 13671,7951 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13671,7951 L 13671,8162 13882,8162 13882,7951 13671,7951 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-width="80" stroke-linejoin="round" d="M 13377,8554 L 14177,8554"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 13671,8554 L 13777,8660 13882,8554 13777,8449 13671,8554 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 13671,8554 L 13777,8660 13882,8554 13777,8449 13671,8554 Z"/>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14277" y="8176"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">IOPS</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14277" y="8674"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Latency</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-90 973 5402)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="318px" font-weight="400"><tspan class="TextPosition" x="973" y="5402"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">IOPS (higher is better)</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-90 15227 5763)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="318px" font-weight="400"><tspan class="TextPosition" x="15227" y="5763"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Latency μs (lower is better)</tspan></tspan></tspan></text>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 24 KiB |
@ -0,0 +1,178 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="160mm" height="90mm" viewBox="0 0 16000 9000" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="28.222" stroke-linejoin="round" xml:space="preserve">
|
||||||
|
<path fill="rgb(255,255,255)" stroke="none" d="M 7987,8986 L -13,8986 -13,-13 15986,-13 15986,8986 7987,8986 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8121,6215 L 2715,6215 2715,1460 13527,1460 13527,6215 8121,6215 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,5738 L 2715,5738"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,5262 L 2715,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4787 L 2715,4787"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4312 L 2715,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3361 L 2715,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2885 L 2715,2885"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2410 L 2715,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,1934 L 2715,1934"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5738 L 2715,5738"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5738 L 2715,5738"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5262 L 2715,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5262 L 2715,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4787 L 2715,4787"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4787 L 2715,4787"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4312 L 2715,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4312 L 2715,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3361 L 2715,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3361 L 2715,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2885 L 2715,2885"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2885 L 2715,2885"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2410 L 2715,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2410 L 2715,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1934 L 2715,1934"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1934 L 2715,1934"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 2715,2410 L 3698,2410 4681,2410 5664,2410 6647,2410 7630,2410 8612,2410 9595,2410 10578,1934 11561,2410 12544,2410 13527,2410"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 2590,2285 L 2590,2535 2840,2535 2840,2285 2590,2285 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 2590,2285 L 2590,2535 2840,2535 2840,2285 2590,2285 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 3573,2285 L 3573,2535 3823,2535 3823,2285 3573,2285 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 3573,2285 L 3573,2535 3823,2535 3823,2285 3573,2285 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 4556,2285 L 4556,2535 4806,2535 4806,2285 4556,2285 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 4556,2285 L 4556,2535 4806,2535 4806,2285 4556,2285 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 5539,2285 L 5539,2535 5789,2535 5789,2285 5539,2285 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 5539,2285 L 5539,2535 5789,2535 5789,2285 5539,2285 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 6522,2285 L 6522,2535 6772,2535 6772,2285 6522,2285 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 6522,2285 L 6522,2535 6772,2535 6772,2285 6522,2285 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 7505,2285 L 7505,2535 7755,2535 7755,2285 7505,2285 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 7505,2285 L 7505,2535 7755,2535 7755,2285 7505,2285 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 8487,2285 L 8487,2535 8737,2535 8737,2285 8487,2285 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 8487,2285 L 8487,2535 8737,2535 8737,2285 8487,2285 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 9470,2285 L 9470,2535 9720,2535 9720,2285 9470,2285 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 9470,2285 L 9470,2535 9720,2535 9720,2285 9470,2285 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 10453,1809 L 10453,2059 10703,2059 10703,1809 10453,1809 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 10453,1809 L 10453,2059 10703,2059 10703,1809 10453,1809 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 11436,2285 L 11436,2535 11686,2535 11686,2285 11436,2285 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 11436,2285 L 11436,2535 11686,2535 11686,2285 11436,2285 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 12419,2285 L 12419,2535 12669,2535 12669,2285 12419,2285 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 12419,2285 L 12419,2535 12669,2535 12669,2285 12419,2285 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13402,2285 L 13402,2535 13652,2535 13652,2285 13402,2285 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13402,2285 L 13402,2535 13652,2535 13652,2285 13402,2285 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-width="80" stroke-linejoin="round" d="M 2715,4312 L 3698,4312 4681,4312 5664,4312 6647,4312 7630,4312 8612,4312 9595,4312 10578,4312 11561,4312 12544,4312 13527,4312"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 2590,4187 L 2715,4437 2840,4187 2590,4187 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 2590,4187 L 2715,4437 2840,4187 2590,4187 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 3573,4187 L 3698,4437 3823,4187 3573,4187 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 3573,4187 L 3698,4437 3823,4187 3573,4187 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 4556,4187 L 4681,4437 4806,4187 4556,4187 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 4556,4187 L 4681,4437 4806,4187 4556,4187 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 5539,4187 L 5664,4437 5789,4187 5539,4187 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 5539,4187 L 5664,4437 5789,4187 5539,4187 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 6522,4187 L 6647,4437 6772,4187 6522,4187 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 6522,4187 L 6647,4437 6772,4187 6522,4187 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 7505,4187 L 7630,4437 7755,4187 7505,4187 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 7505,4187 L 7630,4437 7755,4187 7505,4187 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 8487,4187 L 8612,4437 8737,4187 8487,4187 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 8487,4187 L 8612,4437 8737,4187 8487,4187 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 9470,4187 L 9595,4437 9720,4187 9470,4187 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 9470,4187 L 9595,4437 9720,4187 9470,4187 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 10453,4187 L 10578,4437 10703,4187 10453,4187 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 10453,4187 L 10578,4437 10703,4187 10453,4187 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 11436,4187 L 11561,4437 11686,4187 11436,4187 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 11436,4187 L 11561,4437 11686,4187 11436,4187 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 12419,4187 L 12544,4437 12669,4187 12419,4187 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 12419,4187 L 12544,4437 12669,4187 12419,4187 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 13402,4187 L 13527,4437 13652,4187 13402,4187 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 13402,4187 L 13527,4437 13652,4187 13402,4187 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 2715,6214 L 3698,6214 4681,6214 5664,6214 6647,6214 7630,6214 8612,6214 9595,6214 10578,6214 11561,6214 12544,6214 13527,6214"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 2590,6214 L 2715,6339 2840,6214 2715,6089 2590,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 2590,6214 L 2715,6339 2840,6214 2715,6089 2590,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 3573,6214 L 3698,6339 3823,6214 3698,6089 3573,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 3573,6214 L 3698,6339 3823,6214 3698,6089 3573,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 4556,6214 L 4681,6339 4806,6214 4681,6089 4556,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 4556,6214 L 4681,6339 4806,6214 4681,6089 4556,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 5539,6214 L 5664,6339 5789,6214 5664,6089 5539,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 5539,6214 L 5664,6339 5789,6214 5664,6089 5539,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 6522,6214 L 6647,6339 6772,6214 6647,6089 6522,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 6522,6214 L 6647,6339 6772,6214 6647,6089 6522,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 7505,6214 L 7630,6339 7755,6214 7630,6089 7505,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 7505,6214 L 7630,6339 7755,6214 7630,6089 7505,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 8487,6214 L 8612,6339 8737,6214 8612,6089 8487,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 8487,6214 L 8612,6339 8737,6214 8612,6089 8487,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 9470,6214 L 9595,6339 9720,6214 9595,6089 9470,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 9470,6214 L 9595,6339 9720,6214 9595,6089 9470,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 10453,6214 L 10578,6339 10703,6214 10578,6089 10453,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 10453,6214 L 10578,6339 10703,6214 10578,6089 10453,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 11436,6214 L 11561,6339 11686,6214 11561,6089 11436,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 11436,6214 L 11561,6339 11686,6214 11561,6089 11436,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 12419,6214 L 12544,6339 12669,6214 12544,6089 12419,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 12419,6214 L 12544,6339 12669,6214 12544,6089 12419,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13402,6214 L 13527,6339 13652,6214 13527,6089 13402,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13402,6214 L 13527,6339 13652,6214 13527,6089 13402,6214 Z"/>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 740 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="740" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 1723 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1723" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 2706 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2706" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 3689 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="3689" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 4672 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="4672" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 5655 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="5655" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 6638 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="6638" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 7621 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="7621" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 8604 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="8604" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 9587 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="9587" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 10570 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="10570" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 11552 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="11552" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="6335"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="5859"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0.1</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="5383"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0.2</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="4908"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0.3</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="4432"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0.4</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="3957"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0.5</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="3481"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0.6</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="3005"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0.7</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="2530"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0.8</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="2054"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0.9</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="1579"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="459px" font-weight="400"><tspan class="TextPosition" x="3409" y="744"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Random Write (4k block size, 1 queue depth)</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="388px" font-weight="400"><tspan class="TextPosition" x="3084" y="1248"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">CPU Utilization of 128 logical cores, primary coordinator</tspan></tspan></tspan></text>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 13231,7856 L 14031,7856"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13525,7751 L 13525,7962 13736,7962 13736,7751 13525,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13525,7751 L 13525,7962 13736,7962 13736,7751 13525,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-width="80" stroke-linejoin="round" d="M 13231,8253 L 14031,8253"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 13525,8148 L 13631,8359 13736,8148 13525,8148 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 13525,8148 L 13631,8359 13736,8148 13525,8148 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 13231,8650 L 14031,8650"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13525,8650 L 13631,8756 13736,8650 13631,8545 13525,8650 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13525,8650 L 13631,8756 13736,8650 13631,8545 13525,8650 Z"/>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="7976"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Total</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="8373"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">ceph-osd</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="8770"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">ceph-mon</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-90 1573 6196)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="318px" font-weight="400"><tspan class="TextPosition" x="1573" y="6196"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">CPU Utilization % (lower is better)</tspan></tspan></tspan></text>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 25 KiB |
@ -0,0 +1,178 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="160mm" height="90mm" viewBox="0 0 16000 9000" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="28.222" stroke-linejoin="round" xml:space="preserve">
|
||||||
|
<path fill="rgb(255,255,255)" stroke="none" d="M 7987,8986 L -13,8986 -13,-13 15986,-13 15986,8986 7987,8986 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8121,6215 L 2715,6215 2715,1460 13527,1460 13527,6215 8121,6215 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,5738 L 2715,5738"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,5262 L 2715,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4787 L 2715,4787"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4312 L 2715,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3361 L 2715,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2885 L 2715,2885"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2410 L 2715,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,1934 L 2715,1934"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5738 L 2715,5738"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5738 L 2715,5738"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5262 L 2715,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5262 L 2715,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4787 L 2715,4787"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4787 L 2715,4787"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4312 L 2715,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4312 L 2715,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3361 L 2715,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3361 L 2715,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2885 L 2715,2885"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2885 L 2715,2885"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2410 L 2715,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2410 L 2715,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1934 L 2715,1934"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1934 L 2715,1934"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 2715,4407 L 3698,4312 4681,3932 5664,3932 6647,3646 7630,3076 8612,3456 9595,3171 10578,2410 11561,3076 12544,2695 13527,1744"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 2590,4282 L 2590,4531 2840,4531 2840,4282 2590,4282 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 2590,4282 L 2590,4531 2840,4531 2840,4282 2590,4282 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 3573,4187 L 3573,4437 3823,4437 3823,4187 3573,4187 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 3573,4187 L 3573,4437 3823,4437 3823,4187 3573,4187 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 4556,3807 L 4556,4057 4806,4057 4806,3807 4556,3807 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 4556,3807 L 4556,4057 4806,4057 4806,3807 4556,3807 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 5539,3807 L 5539,4057 5789,4057 5789,3807 5539,3807 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 5539,3807 L 5539,4057 5789,4057 5789,3807 5539,3807 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 6522,3521 L 6522,3771 6772,3771 6772,3521 6522,3521 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 6522,3521 L 6522,3771 6772,3771 6772,3521 6522,3521 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 7505,2951 L 7505,3201 7755,3201 7755,2951 7505,2951 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 7505,2951 L 7505,3201 7755,3201 7755,2951 7505,2951 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 8487,3331 L 8487,3581 8737,3581 8737,3331 8487,3331 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 8487,3331 L 8487,3581 8737,3581 8737,3331 8487,3331 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 9470,3046 L 9470,3296 9720,3296 9720,3046 9470,3046 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 9470,3046 L 9470,3296 9720,3296 9720,3046 9470,3046 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 10453,2285 L 10453,2535 10703,2535 10703,2285 10453,2285 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 10453,2285 L 10453,2535 10703,2535 10703,2285 10453,2285 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 11436,2951 L 11436,3201 11686,3201 11686,2951 11436,2951 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 11436,2951 L 11436,3201 11686,3201 11686,2951 11436,2951 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 12419,2570 L 12419,2820 12669,2820 12669,2570 12419,2570 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 12419,2570 L 12419,2820 12669,2820 12669,2570 12419,2570 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13402,1619 L 13402,1869 13652,1869 13652,1619 13402,1619 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13402,1619 L 13402,1869 13652,1869 13652,1619 13402,1619 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-width="80" stroke-linejoin="round" d="M 2715,5548 L 3698,5548 4681,5167 5664,5167 6647,4882 7630,4407 8612,4692 9595,4407 10578,3646 11561,4407 12544,3932 13527,2980"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 2590,5423 L 2715,5673 2840,5423 2590,5423 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 2590,5423 L 2715,5673 2840,5423 2590,5423 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 3573,5423 L 3698,5673 3823,5423 3573,5423 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 3573,5423 L 3698,5673 3823,5423 3573,5423 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 4556,5042 L 4681,5292 4806,5042 4556,5042 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 4556,5042 L 4681,5292 4806,5042 4556,5042 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 5539,5042 L 5664,5292 5789,5042 5539,5042 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 5539,5042 L 5664,5292 5789,5042 5539,5042 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 6522,4757 L 6647,5007 6772,4757 6522,4757 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 6522,4757 L 6647,5007 6772,4757 6522,4757 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 7505,4282 L 7630,4531 7755,4282 7505,4282 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 7505,4282 L 7630,4531 7755,4282 7505,4282 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 8487,4567 L 8612,4817 8737,4567 8487,4567 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 8487,4567 L 8612,4817 8737,4567 8487,4567 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 9470,4282 L 9595,4531 9720,4282 9470,4282 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 9470,4282 L 9595,4531 9720,4282 9470,4282 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 10453,3521 L 10578,3771 10703,3521 10453,3521 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 10453,3521 L 10578,3771 10703,3521 10453,3521 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 11436,4282 L 11561,4531 11686,4282 11436,4282 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 11436,4282 L 11561,4531 11686,4282 11436,4282 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 12419,3807 L 12544,4057 12669,3807 12419,3807 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 12419,3807 L 12544,4057 12669,3807 12419,3807 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 13402,2855 L 13527,3105 13652,2855 13402,2855 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 13402,2855 L 13527,3105 13652,2855 13402,2855 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 2715,6118 L 3698,6118 4681,6118 5664,6118 6647,6118 7630,6118 8612,6118 9595,6118 10578,6118 11561,6118 12544,6118 13527,6118"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 2590,6118 L 2715,6243 2840,6118 2715,5993 2590,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 2590,6118 L 2715,6243 2840,6118 2715,5993 2590,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 3573,6118 L 3698,6243 3823,6118 3698,5993 3573,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 3573,6118 L 3698,6243 3823,6118 3698,5993 3573,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 4556,6118 L 4681,6243 4806,6118 4681,5993 4556,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 4556,6118 L 4681,6243 4806,6118 4681,5993 4556,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 5539,6118 L 5664,6243 5789,6118 5664,5993 5539,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 5539,6118 L 5664,6243 5789,6118 5664,5993 5539,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 6522,6118 L 6647,6243 6772,6118 6647,5993 6522,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 6522,6118 L 6647,6243 6772,6118 6647,5993 6522,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 7505,6118 L 7630,6243 7755,6118 7630,5993 7505,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 7505,6118 L 7630,6243 7755,6118 7630,5993 7505,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 8487,6118 L 8612,6243 8737,6118 8612,5993 8487,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 8487,6118 L 8612,6243 8737,6118 8612,5993 8487,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 9470,6118 L 9595,6243 9720,6118 9595,5993 9470,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 9470,6118 L 9595,6243 9720,6118 9595,5993 9470,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 10453,6118 L 10578,6243 10703,6118 10578,5993 10453,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 10453,6118 L 10578,6243 10703,6118 10578,5993 10453,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 11436,6118 L 11561,6243 11686,6118 11561,5993 11436,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 11436,6118 L 11561,6243 11686,6118 11561,5993 11436,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 12419,6118 L 12544,6243 12669,6118 12544,5993 12419,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 12419,6118 L 12544,6243 12669,6118 12544,5993 12419,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13402,6118 L 13527,6243 13652,6118 13527,5993 13402,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13402,6118 L 13527,6243 13652,6118 13527,5993 13402,6118 Z"/>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 740 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="740" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 1723 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1723" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 2706 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2706" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 3689 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="3689" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 4672 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="4672" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 5655 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="5655" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 6638 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="6638" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 7621 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="7621" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 8604 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="8604" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 9587 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="9587" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 10570 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="10570" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 11552 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="11552" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="6335"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="5859"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0.5</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="5383"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="4908"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1.5</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="4432"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="3957"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2.5</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="3481"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="3005"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3.5</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="2530"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="2054"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4.5</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="1579"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">5</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="459px" font-weight="400"><tspan class="TextPosition" x="3409" y="745"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Random Write (4k block size, 1 queue depth)</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="388px" font-weight="400"><tspan class="TextPosition" x="3484" y="1248"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Memory Utilization of 1024 GB, primary coordinator</tspan></tspan></tspan></text>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 13231,7856 L 14031,7856"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13525,7751 L 13525,7962 13736,7962 13736,7751 13525,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13525,7751 L 13525,7962 13736,7962 13736,7751 13525,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-width="80" stroke-linejoin="round" d="M 13231,8254 L 14031,8254"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 13525,8149 L 13631,8360 13736,8149 13525,8149 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 13525,8149 L 13631,8360 13736,8149 13525,8149 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 13231,8652 L 14031,8652"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13525,8652 L 13631,8758 13736,8652 13631,8547 13525,8652 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13525,8652 L 13631,8758 13736,8652 13631,8547 13525,8652 Z"/>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="7976"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Total</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="8374"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">ceph-osd</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="8772"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">ceph-mon</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-90 1573 6395)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="318px" font-weight="400"><tspan class="TextPosition" x="1573" y="6395"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Memory Utilization % (lower is better)</tspan></tspan></tspan></text>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 25 KiB |
@ -0,0 +1,158 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="160mm" height="90mm" viewBox="0 0 16000 9000" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="28.222" stroke-linejoin="round" xml:space="preserve">
|
||||||
|
<path fill="rgb(255,255,255)" stroke="none" d="M 7987,8986 L -13,8986 -13,-13 15986,-13 15986,8986 7987,8986 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8121,6215 L 2715,6215 2715,1460 13527,1460 13527,6215 8121,6215 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,5262 L 2715,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4312 L 2715,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3361 L 2715,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2410 L 2715,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5262 L 2715,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5262 L 2715,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4312 L 2715,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4312 L 2715,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3361 L 2715,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3361 L 2715,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2410 L 2715,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2410 L 2715,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 2715,2296 L 3698,2657 4681,2999 5664,2733 6647,3037 7630,3247 8612,2942 9595,3190 10578,3399 11561,3037 12544,3285 13527,3475"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 2590,2171 L 2590,2421 2840,2421 2840,2171 2590,2171 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 2590,2171 L 2590,2421 2840,2421 2840,2171 2590,2171 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 3573,2532 L 3573,2782 3823,2782 3823,2532 3573,2532 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 3573,2532 L 3573,2782 3823,2782 3823,2532 3573,2532 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 4556,2874 L 4556,3124 4806,3124 4806,2874 4556,2874 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 4556,2874 L 4556,3124 4806,3124 4806,2874 4556,2874 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 5539,2608 L 5539,2858 5789,2858 5789,2608 5539,2608 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 5539,2608 L 5539,2858 5789,2858 5789,2608 5539,2608 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 6522,2912 L 6522,3162 6772,3162 6772,2912 6522,2912 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 6522,2912 L 6522,3162 6772,3162 6772,2912 6522,2912 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 7505,3122 L 7505,3372 7755,3372 7755,3122 7505,3122 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 7505,3122 L 7505,3372 7755,3372 7755,3122 7505,3122 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 8487,2817 L 8487,3067 8737,3067 8737,2817 8487,2817 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 8487,2817 L 8487,3067 8737,3067 8737,2817 8487,2817 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 9470,3065 L 9470,3315 9720,3315 9720,3065 9470,3065 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 9470,3065 L 9470,3315 9720,3315 9720,3065 9470,3065 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 10453,3274 L 10453,3524 10703,3524 10703,3274 10453,3274 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 10453,3274 L 10453,3524 10703,3524 10703,3274 10453,3274 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 11436,2912 L 11436,3162 11686,3162 11686,2912 11436,2912 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 11436,2912 L 11436,3162 11686,3162 11686,2912 11436,2912 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 12419,3160 L 12419,3410 12669,3410 12669,3160 12419,3160 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 12419,3160 L 12419,3410 12669,3410 12669,3160 12419,3160 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13402,3350 L 13402,3600 13652,3600 13652,3350 13402,3350 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13402,3350 L 13402,3600 13652,3600 13652,3350 13402,3350 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-width="80" stroke-linejoin="round" d="M 2715,3989 L 3698,4179 4681,4369 5664,4236 6647,4407 7630,4520 8612,4350 9595,4483 10578,4596 11561,4407 12544,4558 13527,4654"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 2590,3864 L 2715,4114 2840,3864 2590,3864 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 2590,3864 L 2715,4114 2840,3864 2590,3864 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 3573,4054 L 3698,4304 3823,4054 3573,4054 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 3573,4054 L 3698,4304 3823,4054 3573,4054 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 4556,4244 L 4681,4493 4806,4244 4556,4244 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 4556,4244 L 4681,4493 4806,4244 4556,4244 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 5539,4111 L 5664,4361 5789,4111 5539,4111 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 5539,4111 L 5664,4361 5789,4111 5539,4111 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 6522,4282 L 6647,4531 6772,4282 6522,4282 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 6522,4282 L 6647,4531 6772,4282 6522,4282 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 7505,4396 L 7630,4645 7755,4396 7505,4396 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 7505,4396 L 7630,4645 7755,4396 7505,4396 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 8487,4225 L 8612,4475 8737,4225 8487,4225 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 8487,4225 L 8612,4475 8737,4225 8487,4225 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 9470,4358 L 9595,4607 9720,4358 9470,4358 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 9470,4358 L 9595,4607 9720,4358 9470,4358 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 10453,4472 L 10578,4721 10703,4472 10453,4472 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 10453,4472 L 10578,4721 10703,4472 10453,4472 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 11436,4282 L 11561,4531 11686,4282 11436,4282 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 11436,4282 L 11561,4531 11686,4282 11436,4282 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 12419,4434 L 12544,4683 12669,4434 12419,4434 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 12419,4434 L 12544,4683 12669,4434 12419,4434 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 13402,4529 L 13527,4779 13652,4529 13402,4529 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 13402,4529 L 13527,4779 13652,4529 13402,4529 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 2715,4520 L 3698,4692 4681,4844 5664,4711 6647,4844 7630,4939 8612,4806 9595,4920 10578,4996 11561,4863 12544,4958 13527,5034"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 2590,4520 L 2715,4645 2840,4520 2715,4396 2590,4520 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 2590,4520 L 2715,4645 2840,4520 2715,4396 2590,4520 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 3573,4692 L 3698,4817 3823,4692 3698,4567 3573,4692 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 3573,4692 L 3698,4817 3823,4692 3698,4567 3573,4692 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 4556,4844 L 4681,4969 4806,4844 4681,4719 4556,4844 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 4556,4844 L 4681,4969 4806,4844 4681,4719 4556,4844 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 5539,4711 L 5664,4836 5789,4711 5664,4586 5539,4711 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 5539,4711 L 5664,4836 5789,4711 5664,4586 5539,4711 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 6522,4844 L 6647,4969 6772,4844 6647,4719 6522,4844 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 6522,4844 L 6647,4969 6772,4844 6647,4719 6522,4844 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 7505,4939 L 7630,5064 7755,4939 7630,4814 7505,4939 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 7505,4939 L 7630,5064 7755,4939 7630,4814 7505,4939 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 8487,4806 L 8612,4931 8737,4806 8612,4681 8487,4806 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 8487,4806 L 8612,4931 8737,4806 8612,4681 8487,4806 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 9470,4920 L 9595,5045 9720,4920 9595,4795 9470,4920 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 9470,4920 L 9595,5045 9720,4920 9595,4795 9470,4920 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 10453,4996 L 10578,5121 10703,4996 10578,4871 10453,4996 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 10453,4996 L 10578,5121 10703,4996 10578,4871 10453,4996 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 11436,4863 L 11561,4988 11686,4863 11561,4738 11436,4863 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 11436,4863 L 11561,4988 11686,4863 11561,4738 11436,4863 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 12419,4958 L 12544,5083 12669,4958 12544,4833 12419,4958 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 12419,4958 L 12544,5083 12669,4958 12544,4833 12419,4958 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13402,5034 L 13527,5159 13652,5034 13527,4909 13402,5034 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13402,5034 L 13527,5159 13652,5034 13527,4909 13402,5034 Z"/>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 740 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="740" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 1723 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1723" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 2706 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2706" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 3689 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="3689" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 4672 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="4672" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 5655 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="5655" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 6638 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="6638" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 7621 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="7621" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 8604 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="8604" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 9587 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="9587" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 10570 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="10570" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 11552 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="11552" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="6335"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2095" y="5383"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">50</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1909" y="4432"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">100</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1909" y="3481"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">150</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1909" y="2530"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">200</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1909" y="1579"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">250</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="459px" font-weight="400"><tspan class="TextPosition" x="3409" y="747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Random Write (4k block size, 1 queue depth)</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="388px" font-weight="400"><tspan class="TextPosition" x="3585" y="1248"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Average Network Throughput, primary coordinator</tspan></tspan></tspan></text>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 13363,7856 L 14163,7856"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13657,7751 L 13657,7962 13868,7962 13868,7751 13657,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13657,7751 L 13657,7962 13868,7962 13868,7751 13657,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-width="80" stroke-linejoin="round" d="M 13363,8254 L 14163,8254"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 13657,8149 L 13763,8360 13868,8149 13657,8149 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 13657,8149 L 13763,8360 13868,8149 13657,8149 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 13363,8652 L 14163,8652"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13657,8652 L 13763,8758 13868,8652 13763,8547 13657,8652 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13657,8652 L 13763,8758 13868,8652 13763,8547 13657,8652 Z"/>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14263" y="7976"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Total</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14263" y="8374"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Send</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14263" y="8772"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Receive</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-90 1372 5694)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="318px" font-weight="400"><tspan class="TextPosition" x="1372" y="5694"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Network Throughput Mbps</tspan></tspan></tspan></text>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 22 KiB |
@ -0,0 +1,176 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="160mm" height="90mm" viewBox="0 0 16000 9000" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="28.222" stroke-linejoin="round" xml:space="preserve">
|
||||||
|
<path fill="rgb(255,255,255)" stroke="none" d="M 7987,8986 L -13,8986 -13,-13 15986,-13 15986,8986 7987,8986 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8121,6215 L 2715,6215 2715,1460 13527,1460 13527,6215 8121,6215 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,5619 L 2715,5619"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,5025 L 2715,5025"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4431 L 2715,4431"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3242 L 2715,3242"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2648 L 2715,2648"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2053 L 2715,2053"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5619 L 2715,5619"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5619 L 2715,5619"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5025 L 2715,5025"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5025 L 2715,5025"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4431 L 2715,4431"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4431 L 2715,4431"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3242 L 2715,3242"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3242 L 2715,3242"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2648 L 2715,2648"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2648 L 2715,2648"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2053 L 2715,2053"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2053 L 2715,2053"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,5738 L 13527,5738"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,5738 L 13527,5738"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,5262 L 13527,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,5262 L 13527,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,4787 L 13527,4787"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,4787 L 13527,4787"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,4312 L 13527,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,4312 L 13527,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,3837 L 13527,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,3837 L 13527,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,3361 L 13527,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,3361 L 13527,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,2885 L 13527,2885"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,2885 L 13527,2885"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,2410 L 13527,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,2410 L 13527,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,1934 L 13527,1934"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,1934 L 13527,1934"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,1459 L 13527,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,1459 L 13527,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6214 L 13527,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 2715,3915 L 3698,1978 4681,4701 5664,4638 6647,3284 7630,3099 8612,3569 9595,4021 10578,3212 11561,2720 12544,1815 13527,2802"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 2590,3790 L 2590,4040 2840,4040 2840,3790 2590,3790 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 2590,3790 L 2590,4040 2840,4040 2840,3790 2590,3790 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 3573,1853 L 3573,2103 3823,2103 3823,1853 3573,1853 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 3573,1853 L 3573,2103 3823,2103 3823,1853 3573,1853 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 4556,4576 L 4556,4826 4806,4826 4806,4576 4556,4576 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 4556,4576 L 4556,4826 4806,4826 4806,4576 4556,4576 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 5539,4513 L 5539,4763 5789,4763 5789,4513 5539,4513 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 5539,4513 L 5539,4763 5789,4763 5789,4513 5539,4513 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 6522,3159 L 6522,3409 6772,3409 6772,3159 6522,3159 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 6522,3159 L 6522,3409 6772,3409 6772,3159 6522,3159 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 7505,2974 L 7505,3224 7755,3224 7755,2974 7505,2974 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 7505,2974 L 7505,3224 7755,3224 7755,2974 7505,2974 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 8487,3444 L 8487,3694 8737,3694 8737,3444 8487,3444 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 8487,3444 L 8487,3694 8737,3694 8737,3444 8487,3444 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 9470,3896 L 9470,4146 9720,4146 9720,3896 9470,3896 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 9470,3896 L 9470,4146 9720,4146 9720,3896 9470,3896 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 10453,3087 L 10453,3337 10703,3337 10703,3087 10453,3087 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 10453,3087 L 10453,3337 10703,3337 10703,3087 10453,3087 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 11436,2595 L 11436,2845 11686,2845 11686,2595 11436,2595 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 11436,2595 L 11436,2845 11686,2845 11686,2595 11436,2595 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 12419,1690 L 12419,1940 12669,1940 12669,1690 12419,1690 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 12419,1690 L 12419,1940 12669,1940 12669,1690 12419,1690 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13402,2677 L 13402,2927 13652,2927 13652,2677 13402,2677 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13402,2677 L 13402,2927 13652,2927 13652,2677 13402,2677 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-width="80" stroke-linejoin="round" d="M 2715,5315 L 3698,5202 4681,5073 5664,5111 6647,5236 7630,4947 8612,5077 9595,5304 10578,5155 11561,5270 12544,5139 13527,5182"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 2590,5315 L 2715,5440 2840,5315 2715,5190 2590,5315 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 2590,5315 L 2715,5440 2840,5315 2715,5190 2590,5315 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 3573,5202 L 3698,5327 3823,5202 3698,5077 3573,5202 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 3573,5202 L 3698,5327 3823,5202 3698,5077 3573,5202 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 4556,5073 L 4681,5198 4806,5073 4681,4948 4556,5073 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 4556,5073 L 4681,5198 4806,5073 4681,4948 4556,5073 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 5539,5111 L 5664,5236 5789,5111 5664,4986 5539,5111 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 5539,5111 L 5664,5236 5789,5111 5664,4986 5539,5111 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 6522,5236 L 6647,5361 6772,5236 6647,5111 6522,5236 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 6522,5236 L 6647,5361 6772,5236 6647,5111 6522,5236 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 7505,4947 L 7630,5072 7755,4947 7630,4822 7505,4947 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 7505,4947 L 7630,5072 7755,4947 7630,4822 7505,4947 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 8487,5077 L 8612,5202 8737,5077 8612,4952 8487,5077 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 8487,5077 L 8612,5202 8737,5077 8612,4952 8487,5077 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 9470,5304 L 9595,5429 9720,5304 9595,5179 9470,5304 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 9470,5304 L 9595,5429 9720,5304 9595,5179 9470,5304 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 10453,5155 L 10578,5280 10703,5155 10578,5030 10453,5155 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 10453,5155 L 10578,5280 10703,5155 10578,5030 10453,5155 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 11436,5270 L 11561,5395 11686,5270 11561,5145 11436,5270 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 11436,5270 L 11561,5395 11686,5270 11561,5145 11436,5270 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 12419,5139 L 12544,5264 12669,5139 12544,5014 12419,5139 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 12419,5139 L 12544,5264 12669,5139 12544,5014 12419,5139 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 13402,5182 L 13527,5307 13652,5182 13527,5057 13402,5182 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 13402,5182 L 13527,5307 13652,5182 13527,5057 13402,5182 Z"/>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 740 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="740" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 1723 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1723" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 2706 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2706" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 3689 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="3689" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 4672 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="4672" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 5655 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="5655" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 6638 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="6638" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 7621 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="7621" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 8604 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="8604" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 9587 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="9587" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 10570 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="10570" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 11552 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="11552" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1539" y="6335"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">44500</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1539" y="5740"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">45000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1539" y="5146"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">45500</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1539" y="4551"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">46000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1539" y="3957"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">46500</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1539" y="3362"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">47000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1539" y="2768"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">47500</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1539" y="2173"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">48000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1539" y="1579"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">48500</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="6335"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1200</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="5859"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1400</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="5383"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1600</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="4908"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1800</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="4432"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="3957"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2200</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="3481"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2400</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="3005"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2600</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="2530"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2800</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="2054"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="1579"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3200</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="459px" font-weight="400"><tspan class="TextPosition" x="3133" y="739"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Sequential Read (4M block size, 64 queue depth)</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="388px" font-weight="400"><tspan class="TextPosition" x="6083" y="1248"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Throughput & Latency</tspan></tspan></tspan></text>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 13191,8077 L 13991,8077"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13485,7972 L 13485,8183 13696,8183 13696,7972 13485,7972 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13485,7972 L 13485,8183 13696,8183 13696,7972 13485,7972 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-width="80" stroke-linejoin="round" d="M 13191,8596 L 13991,8596"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 13485,8596 L 13591,8702 13696,8596 13591,8491 13485,8596 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 13485,8596 L 13591,8702 13696,8596 13591,8491 13485,8596 Z"/>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14091" y="8197"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Bandwidth</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14091" y="8716"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Latency</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-90 973 6201)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="318px" font-weight="400"><tspan class="TextPosition" x="973" y="6201"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Bandwidth MB/s (higher is better)</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-90 15227 5763)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="318px" font-weight="400"><tspan class="TextPosition" x="15227" y="5763"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Latency μs (lower is better)</tspan></tspan></tspan></text>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 26 KiB |
@ -0,0 +1,158 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="160mm" height="90mm" viewBox="0 0 16000 9000" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="28.222" stroke-linejoin="round" xml:space="preserve">
|
||||||
|
<path fill="rgb(255,255,255)" stroke="none" d="M 7987,8986 L -13,8986 -13,-13 15986,-13 15986,8986 7987,8986 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8121,6215 L 2715,6215 2715,1460 13527,1460 13527,6215 8121,6215 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,5262 L 2715,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4312 L 2715,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3361 L 2715,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2410 L 2715,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5262 L 2715,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5262 L 2715,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4312 L 2715,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4312 L 2715,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3361 L 2715,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3361 L 2715,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2410 L 2715,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2410 L 2715,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 2715,2219 L 3698,2029 4681,2029 5664,2029 6647,2029 7630,2029 8612,2029 9595,2029 10578,2029 11561,2029 12544,2029 13527,2029"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 2590,2094 L 2590,2344 2840,2344 2840,2094 2590,2094 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 2590,2094 L 2590,2344 2840,2344 2840,2094 2590,2094 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 3573,1904 L 3573,2154 3823,2154 3823,1904 3573,1904 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 3573,1904 L 3573,2154 3823,2154 3823,1904 3573,1904 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 4556,1904 L 4556,2154 4806,2154 4806,1904 4556,1904 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 4556,1904 L 4556,2154 4806,2154 4806,1904 4556,1904 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 5539,1904 L 5539,2154 5789,2154 5789,1904 5539,1904 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 5539,1904 L 5539,2154 5789,2154 5789,1904 5539,1904 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 6522,1904 L 6522,2154 6772,2154 6772,1904 6522,1904 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 6522,1904 L 6522,2154 6772,2154 6772,1904 6522,1904 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 7505,1904 L 7505,2154 7755,2154 7755,1904 7505,1904 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 7505,1904 L 7505,2154 7755,2154 7755,1904 7505,1904 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 8487,1904 L 8487,2154 8737,2154 8737,1904 8487,1904 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 8487,1904 L 8487,2154 8737,2154 8737,1904 8487,1904 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 9470,1904 L 9470,2154 9720,2154 9720,1904 9470,1904 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 9470,1904 L 9470,2154 9720,2154 9720,1904 9470,1904 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 10453,1904 L 10453,2154 10703,2154 10703,1904 10453,1904 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 10453,1904 L 10453,2154 10703,2154 10703,1904 10453,1904 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 11436,1904 L 11436,2154 11686,2154 11686,1904 11436,1904 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 11436,1904 L 11436,2154 11686,2154 11686,1904 11436,1904 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 12419,1904 L 12419,2154 12669,2154 12669,1904 12419,1904 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 12419,1904 L 12419,2154 12669,2154 12669,1904 12419,1904 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13402,1904 L 13402,2154 13652,2154 13652,1904 13402,1904 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13402,1904 L 13402,2154 13652,2154 13652,1904 13402,1904 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-width="80" stroke-linejoin="round" d="M 2715,6023 L 3698,6023 4681,6023 5664,6023 6647,6023 7630,6023 8612,6023 9595,6023 10578,5833 11561,6023 12544,5833 13527,5833"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 2590,5898 L 2715,6148 2840,5898 2590,5898 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 2590,5898 L 2715,6148 2840,5898 2590,5898 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 3573,5898 L 3698,6148 3823,5898 3573,5898 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 3573,5898 L 3698,6148 3823,5898 3573,5898 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 4556,5898 L 4681,6148 4806,5898 4556,5898 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 4556,5898 L 4681,6148 4806,5898 4556,5898 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 5539,5898 L 5664,6148 5789,5898 5539,5898 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 5539,5898 L 5664,6148 5789,5898 5539,5898 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 6522,5898 L 6647,6148 6772,5898 6522,5898 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 6522,5898 L 6647,6148 6772,5898 6522,5898 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 7505,5898 L 7630,6148 7755,5898 7505,5898 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 7505,5898 L 7630,6148 7755,5898 7505,5898 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 8487,5898 L 8612,6148 8737,5898 8487,5898 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 8487,5898 L 8612,6148 8737,5898 8487,5898 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 9470,5898 L 9595,6148 9720,5898 9470,5898 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 9470,5898 L 9595,6148 9720,5898 9470,5898 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 10453,5708 L 10578,5958 10703,5708 10453,5708 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 10453,5708 L 10578,5958 10703,5708 10453,5708 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 11436,5898 L 11561,6148 11686,5898 11436,5898 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 11436,5898 L 11561,6148 11686,5898 11436,5898 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 12419,5708 L 12544,5958 12669,5708 12419,5708 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 12419,5708 L 12544,5958 12669,5708 12419,5708 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 13402,5708 L 13527,5958 13652,5708 13402,5708 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 13402,5708 L 13527,5958 13652,5708 13402,5708 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 2715,6214 L 3698,6214 4681,6214 5664,6214 6647,6214 7630,6214 8612,6214 9595,6214 10578,6214 11561,6214 12544,6214 13527,6214"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 2590,6214 L 2715,6339 2840,6214 2715,6089 2590,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 2590,6214 L 2715,6339 2840,6214 2715,6089 2590,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 3573,6214 L 3698,6339 3823,6214 3698,6089 3573,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 3573,6214 L 3698,6339 3823,6214 3698,6089 3573,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 4556,6214 L 4681,6339 4806,6214 4681,6089 4556,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 4556,6214 L 4681,6339 4806,6214 4681,6089 4556,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 5539,6214 L 5664,6339 5789,6214 5664,6089 5539,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 5539,6214 L 5664,6339 5789,6214 5664,6089 5539,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 6522,6214 L 6647,6339 6772,6214 6647,6089 6522,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 6522,6214 L 6647,6339 6772,6214 6647,6089 6522,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 7505,6214 L 7630,6339 7755,6214 7630,6089 7505,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 7505,6214 L 7630,6339 7755,6214 7630,6089 7505,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 8487,6214 L 8612,6339 8737,6214 8612,6089 8487,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 8487,6214 L 8612,6339 8737,6214 8612,6089 8487,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 9470,6214 L 9595,6339 9720,6214 9595,6089 9470,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 9470,6214 L 9595,6339 9720,6214 9595,6089 9470,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 10453,6214 L 10578,6339 10703,6214 10578,6089 10453,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 10453,6214 L 10578,6339 10703,6214 10578,6089 10453,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 11436,6214 L 11561,6339 11686,6214 11561,6089 11436,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 11436,6214 L 11561,6339 11686,6214 11561,6089 11436,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 12419,6214 L 12544,6339 12669,6214 12544,6089 12419,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 12419,6214 L 12544,6339 12669,6214 12544,6089 12419,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13402,6214 L 13527,6339 13652,6214 13527,6089 13402,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13402,6214 L 13527,6339 13652,6214 13527,6089 13402,6214 Z"/>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 740 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="740" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 1723 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1723" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 2706 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2706" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 3689 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="3689" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 4672 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="4672" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 5655 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="5655" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 6638 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="6638" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 7621 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="7621" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 8604 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="8604" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 9587 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="9587" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 10570 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="10570" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 11552 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="11552" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="6335"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="5383"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0.5</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="4432"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="3481"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1.5</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="2530"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="1579"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2.5</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="459px" font-weight="400"><tspan class="TextPosition" x="3412" y="744"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Sequential Read (4M block size, 64 queue depth)</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="388px" font-weight="400"><tspan class="TextPosition" x="3484" y="1248"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">CPU Utilization of 128 logical cores, primary coordinator</tspan></tspan></tspan></text>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 13231,7856 L 14031,7856"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13525,7751 L 13525,7962 13736,7962 13736,7751 13525,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13525,7751 L 13525,7962 13736,7962 13736,7751 13525,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-width="80" stroke-linejoin="round" d="M 13231,8253 L 14031,8253"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 13525,8148 L 13631,8359 13736,8148 13525,8148 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 13525,8148 L 13631,8359 13736,8148 13525,8148 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 13231,8650 L 14031,8650"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13525,8650 L 13631,8756 13736,8650 13631,8545 13525,8650 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13525,8650 L 13631,8756 13736,8650 13631,8545 13525,8650 Z"/>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="7976"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Total</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="8373"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">ceph-osd</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="8770"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">ceph-mon</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-90 1573 6196)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="318px" font-weight="400"><tspan class="TextPosition" x="1573" y="6196"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">CPU Utilization % (lower is better)</tspan></tspan></tspan></text>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 22 KiB |
@ -0,0 +1,178 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="160mm" height="90mm" viewBox="0 0 16000 9000" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="28.222" stroke-linejoin="round" xml:space="preserve">
|
||||||
|
<path fill="rgb(255,255,255)" stroke="none" d="M 7987,8986 L -13,8986 -13,-13 15986,-13 15986,8986 7987,8986 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8121,6215 L 2715,6215 2715,1460 13527,1460 13527,6215 8121,6215 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,5738 L 2715,5738"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,5262 L 2715,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4787 L 2715,4787"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4312 L 2715,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3361 L 2715,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2885 L 2715,2885"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2410 L 2715,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,1934 L 2715,1934"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5738 L 2715,5738"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5738 L 2715,5738"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5262 L 2715,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5262 L 2715,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4787 L 2715,4787"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4787 L 2715,4787"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4312 L 2715,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4312 L 2715,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3361 L 2715,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3361 L 2715,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2885 L 2715,2885"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2885 L 2715,2885"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2410 L 2715,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2410 L 2715,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1934 L 2715,1934"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1934 L 2715,1934"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 2715,4501 L 3698,4407 4681,4122 5664,4027 6647,3741 7630,3266 8612,3456 9595,3171 10578,2505 11561,3171 12544,2695 13527,1839"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 2590,4377 L 2590,4626 2840,4626 2840,4377 2590,4377 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 2590,4377 L 2590,4626 2840,4626 2840,4377 2590,4377 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 3573,4282 L 3573,4531 3823,4531 3823,4282 3573,4282 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 3573,4282 L 3573,4531 3823,4531 3823,4282 3573,4282 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 4556,3997 L 4556,4247 4806,4247 4806,3997 4556,3997 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 4556,3997 L 4556,4247 4806,4247 4806,3997 4556,3997 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 5539,3902 L 5539,4152 5789,4152 5789,3902 5539,3902 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 5539,3902 L 5539,4152 5789,4152 5789,3902 5539,3902 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 6522,3616 L 6522,3866 6772,3866 6772,3616 6522,3616 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 6522,3616 L 6522,3866 6772,3866 6772,3616 6522,3616 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 7505,3141 L 7505,3391 7755,3391 7755,3141 7505,3141 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 7505,3141 L 7505,3391 7755,3391 7755,3141 7505,3141 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 8487,3331 L 8487,3581 8737,3581 8737,3331 8487,3331 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 8487,3331 L 8487,3581 8737,3581 8737,3331 8487,3331 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 9470,3046 L 9470,3296 9720,3296 9720,3046 9470,3046 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 9470,3046 L 9470,3296 9720,3296 9720,3046 9470,3046 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 10453,2380 L 10453,2630 10703,2630 10703,2380 10453,2380 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 10453,2380 L 10453,2630 10703,2630 10703,2380 10453,2380 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 11436,3046 L 11436,3296 11686,3296 11686,3046 11436,3046 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 11436,3046 L 11436,3296 11686,3296 11686,3046 11436,3046 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 12419,2570 L 12419,2820 12669,2820 12669,2570 12419,2570 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 12419,2570 L 12419,2820 12669,2820 12669,2570 12419,2570 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13402,1714 L 13402,1964 13652,1964 13652,1714 13402,1714 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13402,1714 L 13402,1964 13652,1964 13652,1714 13402,1714 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-width="80" stroke-linejoin="round" d="M 2715,5738 L 3698,5643 4681,5357 5664,5262 6647,4977 7630,4501 8612,4787 9595,4501 10578,3837 11561,4407 12544,4027 13527,3076"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 2590,5613 L 2715,5863 2840,5613 2590,5613 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 2590,5613 L 2715,5863 2840,5613 2590,5613 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 3573,5518 L 3698,5768 3823,5518 3573,5518 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 3573,5518 L 3698,5768 3823,5518 3573,5518 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 4556,5232 L 4681,5482 4806,5232 4556,5232 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 4556,5232 L 4681,5482 4806,5232 4556,5232 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 5539,5137 L 5664,5387 5789,5137 5539,5137 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 5539,5137 L 5664,5387 5789,5137 5539,5137 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 6522,4852 L 6647,5102 6772,4852 6522,4852 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 6522,4852 L 6647,5102 6772,4852 6522,4852 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 7505,4377 L 7630,4626 7755,4377 7505,4377 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 7505,4377 L 7630,4626 7755,4377 7505,4377 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 8487,4662 L 8612,4912 8737,4662 8487,4662 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 8487,4662 L 8612,4912 8737,4662 8487,4662 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 9470,4377 L 9595,4626 9720,4377 9470,4377 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 9470,4377 L 9595,4626 9720,4377 9470,4377 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 10453,3712 L 10578,3962 10703,3712 10453,3712 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 10453,3712 L 10578,3962 10703,3712 10453,3712 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 11436,4282 L 11561,4531 11686,4282 11436,4282 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 11436,4282 L 11561,4531 11686,4282 11436,4282 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 12419,3902 L 12544,4152 12669,3902 12419,3902 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 12419,3902 L 12544,4152 12669,3902 12419,3902 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 13402,2951 L 13527,3201 13652,2951 13402,2951 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 13402,2951 L 13527,3201 13652,2951 13402,2951 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 2715,6118 L 3698,6118 4681,6118 5664,6118 6647,6118 7630,6118 8612,6118 9595,6118 10578,6118 11561,6118 12544,6118 13527,6118"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 2590,6118 L 2715,6243 2840,6118 2715,5993 2590,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 2590,6118 L 2715,6243 2840,6118 2715,5993 2590,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 3573,6118 L 3698,6243 3823,6118 3698,5993 3573,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 3573,6118 L 3698,6243 3823,6118 3698,5993 3573,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 4556,6118 L 4681,6243 4806,6118 4681,5993 4556,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 4556,6118 L 4681,6243 4806,6118 4681,5993 4556,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 5539,6118 L 5664,6243 5789,6118 5664,5993 5539,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 5539,6118 L 5664,6243 5789,6118 5664,5993 5539,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 6522,6118 L 6647,6243 6772,6118 6647,5993 6522,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 6522,6118 L 6647,6243 6772,6118 6647,5993 6522,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 7505,6118 L 7630,6243 7755,6118 7630,5993 7505,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 7505,6118 L 7630,6243 7755,6118 7630,5993 7505,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 8487,6118 L 8612,6243 8737,6118 8612,5993 8487,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 8487,6118 L 8612,6243 8737,6118 8612,5993 8487,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 9470,6118 L 9595,6243 9720,6118 9595,5993 9470,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 9470,6118 L 9595,6243 9720,6118 9595,5993 9470,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 10453,6118 L 10578,6243 10703,6118 10578,5993 10453,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 10453,6118 L 10578,6243 10703,6118 10578,5993 10453,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 11436,6118 L 11561,6243 11686,6118 11561,5993 11436,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 11436,6118 L 11561,6243 11686,6118 11561,5993 11436,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 12419,6118 L 12544,6243 12669,6118 12544,5993 12419,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 12419,6118 L 12544,6243 12669,6118 12544,5993 12419,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13402,6118 L 13527,6243 13652,6118 13527,5993 13402,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13402,6118 L 13527,6243 13652,6118 13527,5993 13402,6118 Z"/>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 740 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="740" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 1723 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1723" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 2706 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2706" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 3689 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="3689" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 4672 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="4672" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 5655 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="5655" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 6638 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="6638" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 7621 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="7621" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 8604 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="8604" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 9587 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="9587" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 10570 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="10570" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 11552 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="11552" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="6335"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="5859"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0.5</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="5383"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="4908"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1.5</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="4432"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="3957"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2.5</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="3481"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="3005"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3.5</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="2530"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="2054"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4.5</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="1579"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">5</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="459px" font-weight="400"><tspan class="TextPosition" x="3413" y="745"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Sequential Read (4M block size, 64 queue depth)</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="388px" font-weight="400"><tspan class="TextPosition" x="3784" y="1248"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Memory Utilization of 1024 GB, primary coordinator</tspan></tspan></tspan></text>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 13231,7856 L 14031,7856"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13525,7751 L 13525,7962 13736,7962 13736,7751 13525,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13525,7751 L 13525,7962 13736,7962 13736,7751 13525,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-width="80" stroke-linejoin="round" d="M 13231,8254 L 14031,8254"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 13525,8149 L 13631,8360 13736,8149 13525,8149 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 13525,8149 L 13631,8360 13736,8149 13525,8149 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 13231,8652 L 14031,8652"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13525,8652 L 13631,8758 13736,8652 13631,8547 13525,8652 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13525,8652 L 13631,8758 13736,8652 13631,8547 13525,8652 Z"/>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="7976"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Total</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="8374"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">ceph-osd</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="8772"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">ceph-mon</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-90 1573 6395)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="318px" font-weight="400"><tspan class="TextPosition" x="1573" y="6395"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Memory Utilization % (lower is better)</tspan></tspan></tspan></text>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 25 KiB |
@ -0,0 +1,162 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="160mm" height="90mm" viewBox="0 0 16000 9000" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="28.222" stroke-linejoin="round" xml:space="preserve">
|
||||||
|
<path fill="rgb(255,255,255)" stroke="none" d="M 7987,8986 L -13,8986 -13,-13 15986,-13 15986,8986 7987,8986 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8121,6215 L 2715,6215 2715,1460 13527,1460 13527,6215 8121,6215 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,5421 L 2715,5421"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4628 L 2715,4628"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3044 L 2715,3044"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2251 L 2715,2251"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5421 L 2715,5421"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5421 L 2715,5421"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4628 L 2715,4628"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4628 L 2715,4628"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3044 L 2715,3044"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3044 L 2715,3044"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2251 L 2715,2251"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2251 L 2715,2251"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 2715,2489 L 3698,2251 4681,2330 5664,2410 6647,2251 7630,2093 8612,2330 9595,2172 10578,1934 11561,2172 12544,1934 13527,1855"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 2590,2364 L 2590,2614 2840,2614 2840,2364 2590,2364 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 2590,2364 L 2590,2614 2840,2614 2840,2364 2590,2364 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 3573,2126 L 3573,2376 3823,2376 3823,2126 3573,2126 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 3573,2126 L 3573,2376 3823,2376 3823,2126 3573,2126 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 4556,2205 L 4556,2455 4806,2455 4806,2205 4556,2205 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 4556,2205 L 4556,2455 4806,2455 4806,2205 4556,2205 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 5539,2285 L 5539,2535 5789,2535 5789,2285 5539,2285 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 5539,2285 L 5539,2535 5789,2535 5789,2285 5539,2285 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 6522,2126 L 6522,2376 6772,2376 6772,2126 6522,2126 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 6522,2126 L 6522,2376 6772,2376 6772,2126 6522,2126 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 7505,1968 L 7505,2218 7755,2218 7755,1968 7505,1968 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 7505,1968 L 7505,2218 7755,2218 7755,1968 7505,1968 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 8487,2205 L 8487,2455 8737,2455 8737,2205 8487,2205 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 8487,2205 L 8487,2455 8737,2455 8737,2205 8487,2205 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 9470,2047 L 9470,2297 9720,2297 9720,2047 9470,2047 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 9470,2047 L 9470,2297 9720,2297 9720,2047 9470,2047 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 10453,1809 L 10453,2059 10703,2059 10703,1809 10453,1809 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 10453,1809 L 10453,2059 10703,2059 10703,1809 10453,1809 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 11436,2047 L 11436,2297 11686,2297 11686,2047 11436,2047 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 11436,2047 L 11436,2297 11686,2297 11686,2047 11436,2047 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 12419,1809 L 12419,2059 12669,2059 12669,1809 12419,1809 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 12419,1809 L 12419,2059 12669,2059 12669,1809 12419,1809 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13402,1730 L 13402,1980 13652,1980 13652,1730 13402,1730 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13402,1730 L 13402,1980 13652,1980 13652,1730 13402,1730 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-width="80" stroke-linejoin="round" d="M 2715,4074 L 3698,3995 4681,4074 5664,4074 6647,3995 7630,3916 8612,3995 9595,3995 10578,3837 11561,3916 12544,3837 13527,3837"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 2590,3949 L 2715,4199 2840,3949 2590,3949 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 2590,3949 L 2715,4199 2840,3949 2590,3949 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 3573,3870 L 3698,4120 3823,3870 3573,3870 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 3573,3870 L 3698,4120 3823,3870 3573,3870 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 4556,3949 L 4681,4199 4806,3949 4556,3949 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 4556,3949 L 4681,4199 4806,3949 4556,3949 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 5539,3949 L 5664,4199 5789,3949 5539,3949 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 5539,3949 L 5664,4199 5789,3949 5539,3949 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 6522,3870 L 6647,4120 6772,3870 6522,3870 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 6522,3870 L 6647,4120 6772,3870 6522,3870 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 7505,3791 L 7630,4041 7755,3791 7505,3791 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 7505,3791 L 7630,4041 7755,3791 7505,3791 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 8487,3870 L 8612,4120 8737,3870 8487,3870 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 8487,3870 L 8612,4120 8737,3870 8487,3870 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 9470,3870 L 9595,4120 9720,3870 9470,3870 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 9470,3870 L 9595,4120 9720,3870 9470,3870 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 10453,3712 L 10578,3962 10703,3712 10453,3712 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 10453,3712 L 10578,3962 10703,3712 10453,3712 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 11436,3791 L 11561,4041 11686,3791 11436,3791 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 11436,3791 L 11561,4041 11686,3791 11436,3791 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 12419,3712 L 12544,3962 12669,3712 12419,3712 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 12419,3712 L 12544,3962 12669,3712 12419,3712 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 13402,3712 L 13527,3962 13652,3712 13402,3712 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 13402,3712 L 13527,3962 13652,3712 13402,3712 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 2715,4549 L 3698,4471 4681,4471 5664,4549 6647,4471 7630,4391 8612,4471 9595,4391 10578,4312 11561,4391 12544,4312 13527,4233"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 2590,4549 L 2715,4674 2840,4549 2715,4425 2590,4549 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 2590,4549 L 2715,4674 2840,4549 2715,4425 2590,4549 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 3573,4471 L 3698,4595 3823,4471 3698,4346 3573,4471 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 3573,4471 L 3698,4595 3823,4471 3698,4346 3573,4471 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 4556,4471 L 4681,4595 4806,4471 4681,4346 4556,4471 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 4556,4471 L 4681,4595 4806,4471 4681,4346 4556,4471 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 5539,4549 L 5664,4674 5789,4549 5664,4425 5539,4549 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 5539,4549 L 5664,4674 5789,4549 5664,4425 5539,4549 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 6522,4471 L 6647,4595 6772,4471 6647,4346 6522,4471 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 6522,4471 L 6647,4595 6772,4471 6647,4346 6522,4471 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 7505,4391 L 7630,4515 7755,4391 7630,4266 7505,4391 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 7505,4391 L 7630,4515 7755,4391 7630,4266 7505,4391 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 8487,4471 L 8612,4595 8737,4471 8612,4346 8487,4471 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 8487,4471 L 8612,4595 8737,4471 8612,4346 8487,4471 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 9470,4391 L 9595,4515 9720,4391 9595,4266 9470,4391 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 9470,4391 L 9595,4515 9720,4391 9595,4266 9470,4391 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 10453,4312 L 10578,4437 10703,4312 10578,4187 10453,4312 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 10453,4312 L 10578,4437 10703,4312 10578,4187 10453,4312 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 11436,4391 L 11561,4515 11686,4391 11561,4266 11436,4391 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 11436,4391 L 11561,4515 11686,4391 11561,4266 11436,4391 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 12419,4312 L 12544,4437 12669,4312 12544,4187 12419,4312 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 12419,4312 L 12544,4437 12669,4312 12544,4187 12419,4312 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13402,4233 L 13527,4358 13652,4233 13527,4108 13402,4233 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13402,4233 L 13527,4358 13652,4233 13527,4108 13402,4233 Z"/>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 740 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="740" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 1723 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1723" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 2706 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2706" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 3689 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="3689" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 4672 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="4672" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 5655 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="5655" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 6638 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="6638" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 7621 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="7621" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 8604 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="8604" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 9587 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="9587" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 10570 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="10570" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 11552 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="11552" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="6335"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2095" y="5542"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">10</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2095" y="4749"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">20</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2095" y="3957"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">30</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2095" y="3164"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">40</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2095" y="2371"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">50</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2095" y="1579"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">60</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="459px" font-weight="400"><tspan class="TextPosition" x="3415" y="747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Sequential Read (4M block size, 64 queue depth)</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="388px" font-weight="400"><tspan class="TextPosition" x="3985" y="1248"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Average Network Throughput, primary coordinator</tspan></tspan></tspan></text>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 13363,7856 L 14163,7856"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13657,7751 L 13657,7962 13868,7962 13868,7751 13657,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13657,7751 L 13657,7962 13868,7962 13868,7751 13657,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-width="80" stroke-linejoin="round" d="M 13363,8254 L 14163,8254"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 13657,8149 L 13763,8360 13868,8149 13657,8149 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 13657,8149 L 13763,8360 13868,8149 13657,8149 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 13363,8652 L 14163,8652"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13657,8652 L 13763,8758 13868,8652 13763,8547 13657,8652 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13657,8652 L 13763,8758 13868,8652 13763,8547 13657,8652 Z"/>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14263" y="7976"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Total</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14263" y="8374"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Send</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14263" y="8772"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Receive</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-90 1372 5694)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="318px" font-weight="400"><tspan class="TextPosition" x="1372" y="5694"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Network Throughput Mbps</tspan></tspan></tspan></text>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 22 KiB |
@ -0,0 +1,160 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="160mm" height="90mm" viewBox="0 0 16000 9000" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="28.222" stroke-linejoin="round" xml:space="preserve">
|
||||||
|
<path fill="rgb(255,255,255)" stroke="none" d="M 7987,8986 L -13,8986 -13,-13 15986,-13 15986,8986 7987,8986 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8121,6215 L 2715,6215 2715,1460 13527,1460 13527,6215 8121,6215 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,5534 L 2715,5534"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4855 L 2715,4855"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4176 L 2715,4176"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3497 L 2715,3497"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2817 L 2715,2817"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2138 L 2715,2138"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5534 L 2715,5534"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5534 L 2715,5534"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4855 L 2715,4855"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4855 L 2715,4855"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4176 L 2715,4176"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4176 L 2715,4176"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3497 L 2715,3497"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3497 L 2715,3497"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2817 L 2715,2817"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2817 L 2715,2817"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2138 L 2715,2138"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2138 L 2715,2138"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,5421 L 13527,5421"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,5421 L 13527,5421"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,4628 L 13527,4628"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,4628 L 13527,4628"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,3837 L 13527,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,3837 L 13527,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,3044 L 13527,3044"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,3044 L 13527,3044"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,2251 L 13527,2251"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,2251 L 13527,2251"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,1459 L 13527,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13677,1459 L 13527,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6214 L 13527,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 2715,4245 L 3698,3878 4681,2083 5664,3176 6647,1842 7630,1911 8612,2191 9595,1919 10578,2266 11561,2105 12544,1893 13527,2279"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 2590,4120 L 2590,4370 2840,4370 2840,4120 2590,4120 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 2590,4120 L 2590,4370 2840,4370 2840,4120 2590,4120 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 3573,3753 L 3573,4003 3823,4003 3823,3753 3573,3753 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 3573,3753 L 3573,4003 3823,4003 3823,3753 3573,3753 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 4556,1958 L 4556,2208 4806,2208 4806,1958 4556,1958 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 4556,1958 L 4556,2208 4806,2208 4806,1958 4556,1958 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 5539,3051 L 5539,3301 5789,3301 5789,3051 5539,3051 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 5539,3051 L 5539,3301 5789,3301 5789,3051 5539,3051 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 6522,1717 L 6522,1967 6772,1967 6772,1717 6522,1717 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 6522,1717 L 6522,1967 6772,1967 6772,1717 6522,1717 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 7505,1786 L 7505,2036 7755,2036 7755,1786 7505,1786 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 7505,1786 L 7505,2036 7755,2036 7755,1786 7505,1786 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 8487,2066 L 8487,2316 8737,2316 8737,2066 8487,2066 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 8487,2066 L 8487,2316 8737,2316 8737,2066 8487,2066 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 9470,1794 L 9470,2044 9720,2044 9720,1794 9470,1794 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 9470,1794 L 9470,2044 9720,2044 9720,1794 9470,1794 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 10453,2141 L 10453,2391 10703,2391 10703,2141 10453,2141 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 10453,2141 L 10453,2391 10703,2391 10703,2141 10453,2141 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 11436,1980 L 11436,2230 11686,2230 11686,1980 11436,1980 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 11436,1980 L 11436,2230 11686,2230 11686,1980 11436,1980 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 12419,1768 L 12419,2018 12669,2018 12669,1768 12419,1768 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 12419,1768 L 12419,2018 12669,2018 12669,1768 12419,1768 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13402,2154 L 13402,2404 13652,2404 13652,2154 13402,2154 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13402,2154 L 13402,2404 13652,2404 13652,2154 13402,2154 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-width="80" stroke-linejoin="round" d="M 2715,5454 L 3698,5275 4681,4931 5664,5165 6647,4704 7630,4318 8612,4963 9595,4363 10578,3664 11561,4659 12544,4197 13527,3556"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 2590,5454 L 2715,5579 2840,5454 2715,5329 2590,5454 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 2590,5454 L 2715,5579 2840,5454 2715,5329 2590,5454 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 3573,5275 L 3698,5400 3823,5275 3698,5150 3573,5275 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 3573,5275 L 3698,5400 3823,5275 3698,5150 3573,5275 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 4556,4931 L 4681,5056 4806,4931 4681,4806 4556,4931 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 4556,4931 L 4681,5056 4806,4931 4681,4806 4556,4931 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 5539,5165 L 5664,5290 5789,5165 5664,5040 5539,5165 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 5539,5165 L 5664,5290 5789,5165 5664,5040 5539,5165 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 6522,4704 L 6647,4829 6772,4704 6647,4579 6522,4704 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 6522,4704 L 6647,4829 6772,4704 6647,4579 6522,4704 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 7505,4318 L 7630,4443 7755,4318 7630,4193 7505,4318 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 7505,4318 L 7630,4443 7755,4318 7630,4193 7505,4318 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 8487,4963 L 8612,5088 8737,4963 8612,4838 8487,4963 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 8487,4963 L 8612,5088 8737,4963 8612,4838 8487,4963 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 9470,4363 L 9595,4487 9720,4363 9595,4238 9470,4363 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 9470,4363 L 9595,4487 9720,4363 9595,4238 9470,4363 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 10453,3664 L 10578,3789 10703,3664 10578,3539 10453,3664 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 10453,3664 L 10578,3789 10703,3664 10578,3539 10453,3664 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 11436,4659 L 11561,4784 11686,4659 11561,4534 11436,4659 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 11436,4659 L 11561,4784 11686,4659 11561,4534 11436,4659 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 12419,4197 L 12544,4322 12669,4197 12544,4072 12419,4197 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 12419,4197 L 12544,4322 12669,4197 12544,4072 12419,4197 Z"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 13402,3556 L 13527,3681 13652,3556 13527,3431 13402,3556 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 13402,3556 L 13527,3681 13652,3556 13527,3431 13402,3556 Z"/>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 740 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="740" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 1723 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1723" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 2706 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2706" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 3689 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="3689" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 4672 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="4672" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 5655 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="5655" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 6638 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="6638" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 7621 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="7621" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 8604 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="8604" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 9587 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="9587" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 10570 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="10570" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 11552 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="11552" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="6335"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1724" y="5655"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1724" y="4976"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1724" y="4296"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1724" y="3617"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1724" y="2937"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">5000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1724" y="2258"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">6000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1724" y="1579"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">7000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="6335"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">300000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="5542"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">400000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="4749"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">500000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="3957"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">600000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="3164"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">700000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="2371"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">800000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13777" y="1579"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">900000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="459px" font-weight="400"><tspan class="TextPosition" x="3118" y="739"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Sequential Write (4M block size, 64 queue depth)</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="388px" font-weight="400"><tspan class="TextPosition" x="6083" y="1248"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Throughput & Latency</tspan></tspan></tspan></text>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 13191,8056 L 13991,8056"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13485,7951 L 13485,8162 13696,8162 13696,7951 13485,7951 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13485,7951 L 13485,8162 13696,8162 13696,7951 13485,7951 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-width="80" stroke-linejoin="round" d="M 13191,8554 L 13991,8554"/>
|
||||||
|
<path fill="rgb(114,159,207)" stroke="none" d="M 13485,8554 L 13591,8660 13696,8554 13591,8449 13485,8554 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(114,159,207)" stroke-linejoin="round" d="M 13485,8554 L 13591,8660 13696,8554 13591,8449 13485,8554 Z"/>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14091" y="8176"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Bandwidth</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14091" y="8674"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Latency</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-90 973 6101)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="318px" font-weight="400"><tspan class="TextPosition" x="973" y="6101"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Bandwidth MB/s (higher is better)</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-90 15450 5761)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="318px" font-weight="400"><tspan class="TextPosition" x="15450" y="5761"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Latency μs (lower is better)</tspan></tspan></tspan></text>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 24 KiB |
@ -0,0 +1,178 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="160mm" height="90mm" viewBox="0 0 16000 9000" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="28.222" stroke-linejoin="round" xml:space="preserve">
|
||||||
|
<path fill="rgb(255,255,255)" stroke="none" d="M 7987,8986 L -13,8986 -13,-13 15986,-13 15986,8986 7987,8986 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8121,6215 L 2715,6215 2715,1460 13527,1460 13527,6215 8121,6215 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,5738 L 2715,5738"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,5262 L 2715,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4787 L 2715,4787"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4312 L 2715,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3361 L 2715,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2885 L 2715,2885"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2410 L 2715,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,1934 L 2715,1934"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5738 L 2715,5738"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5738 L 2715,5738"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5262 L 2715,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5262 L 2715,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4787 L 2715,4787"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4787 L 2715,4787"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4312 L 2715,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4312 L 2715,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3361 L 2715,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3361 L 2715,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2885 L 2715,2885"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2885 L 2715,2885"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2410 L 2715,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2410 L 2715,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1934 L 2715,1934"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1934 L 2715,1934"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 2715,4596 L 3698,4312 4681,2552 5664,3646 6647,2172 7630,2172 8612,2648 9595,2077 10578,2505 11561,2505 12544,2077 13527,2267"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 2590,4472 L 2590,4721 2840,4721 2840,4472 2590,4472 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 2590,4472 L 2590,4721 2840,4721 2840,4472 2590,4472 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 3573,4187 L 3573,4437 3823,4437 3823,4187 3573,4187 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 3573,4187 L 3573,4437 3823,4437 3823,4187 3573,4187 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 4556,2427 L 4556,2677 4806,2677 4806,2427 4556,2427 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 4556,2427 L 4556,2677 4806,2677 4806,2427 4556,2427 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 5539,3521 L 5539,3771 5789,3771 5789,3521 5539,3521 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 5539,3521 L 5539,3771 5789,3771 5789,3521 5539,3521 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 6522,2047 L 6522,2297 6772,2297 6772,2047 6522,2047 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 6522,2047 L 6522,2297 6772,2297 6772,2047 6522,2047 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 7505,2047 L 7505,2297 7755,2297 7755,2047 7505,2047 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 7505,2047 L 7505,2297 7755,2297 7755,2047 7505,2047 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 8487,2523 L 8487,2773 8737,2773 8737,2523 8487,2523 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 8487,2523 L 8487,2773 8737,2773 8737,2523 8487,2523 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 9470,1952 L 9470,2202 9720,2202 9720,1952 9470,1952 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 9470,1952 L 9470,2202 9720,2202 9720,1952 9470,1952 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 10453,2380 L 10453,2630 10703,2630 10703,2380 10453,2380 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 10453,2380 L 10453,2630 10703,2630 10703,2380 10453,2380 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 11436,2380 L 11436,2630 11686,2630 11686,2380 11436,2380 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 11436,2380 L 11436,2630 11686,2630 11686,2380 11436,2380 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 12419,1952 L 12419,2202 12669,2202 12669,1952 12419,1952 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 12419,1952 L 12419,2202 12669,2202 12669,1952 12419,1952 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13402,2142 L 13402,2392 13652,2392 13652,2142 13402,2142 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13402,2142 L 13402,2392 13652,2392 13652,2142 13402,2142 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-width="80" stroke-linejoin="round" d="M 2715,5215 L 3698,5025 4681,3837 5664,4549 6647,3551 7630,3551 8612,3837 9595,3504 10578,3837 11561,3741 12544,3504 13527,3789"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 2590,5090 L 2715,5340 2840,5090 2590,5090 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 2590,5090 L 2715,5340 2840,5090 2590,5090 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 3573,4900 L 3698,5150 3823,4900 3573,4900 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 3573,4900 L 3698,5150 3823,4900 3573,4900 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 4556,3712 L 4681,3962 4806,3712 4556,3712 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 4556,3712 L 4681,3962 4806,3712 4556,3712 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 5539,4425 L 5664,4674 5789,4425 5539,4425 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 5539,4425 L 5664,4674 5789,4425 5539,4425 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 6522,3426 L 6647,3676 6772,3426 6522,3426 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 6522,3426 L 6647,3676 6772,3426 6522,3426 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 7505,3426 L 7630,3676 7755,3426 7505,3426 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 7505,3426 L 7630,3676 7755,3426 7505,3426 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 8487,3712 L 8612,3962 8737,3712 8487,3712 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 8487,3712 L 8612,3962 8737,3712 8487,3712 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 9470,3379 L 9595,3629 9720,3379 9470,3379 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 9470,3379 L 9595,3629 9720,3379 9470,3379 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 10453,3712 L 10578,3962 10703,3712 10453,3712 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 10453,3712 L 10578,3962 10703,3712 10453,3712 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 11436,3616 L 11561,3866 11686,3616 11436,3616 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 11436,3616 L 11561,3866 11686,3616 11436,3616 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 12419,3379 L 12544,3629 12669,3379 12419,3379 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 12419,3379 L 12544,3629 12669,3379 12419,3379 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 13402,3664 L 13527,3914 13652,3664 13402,3664 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 13402,3664 L 13527,3914 13652,3664 13402,3664 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 2715,6214 L 3698,6214 4681,6214 5664,6214 6647,6214 7630,6214 8612,6214 9595,6214 10578,6214 11561,6214 12544,6214 13527,6214"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 2590,6214 L 2715,6339 2840,6214 2715,6089 2590,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 2590,6214 L 2715,6339 2840,6214 2715,6089 2590,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 3573,6214 L 3698,6339 3823,6214 3698,6089 3573,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 3573,6214 L 3698,6339 3823,6214 3698,6089 3573,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 4556,6214 L 4681,6339 4806,6214 4681,6089 4556,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 4556,6214 L 4681,6339 4806,6214 4681,6089 4556,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 5539,6214 L 5664,6339 5789,6214 5664,6089 5539,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 5539,6214 L 5664,6339 5789,6214 5664,6089 5539,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 6522,6214 L 6647,6339 6772,6214 6647,6089 6522,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 6522,6214 L 6647,6339 6772,6214 6647,6089 6522,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 7505,6214 L 7630,6339 7755,6214 7630,6089 7505,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 7505,6214 L 7630,6339 7755,6214 7630,6089 7505,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 8487,6214 L 8612,6339 8737,6214 8612,6089 8487,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 8487,6214 L 8612,6339 8737,6214 8612,6089 8487,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 9470,6214 L 9595,6339 9720,6214 9595,6089 9470,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 9470,6214 L 9595,6339 9720,6214 9595,6089 9470,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 10453,6214 L 10578,6339 10703,6214 10578,6089 10453,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 10453,6214 L 10578,6339 10703,6214 10578,6089 10453,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 11436,6214 L 11561,6339 11686,6214 11561,6089 11436,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 11436,6214 L 11561,6339 11686,6214 11561,6089 11436,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 12419,6214 L 12544,6339 12669,6214 12544,6089 12419,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 12419,6214 L 12544,6339 12669,6214 12544,6089 12419,6214 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13402,6214 L 13527,6339 13652,6214 13527,6089 13402,6214 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13402,6214 L 13527,6339 13652,6214 13527,6089 13402,6214 Z"/>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 740 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="740" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 1723 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1723" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 2706 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2706" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 3689 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="3689" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 4672 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="4672" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 5655 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="5655" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 6638 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="6638" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 7621 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="7621" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 8604 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="8604" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 9587 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="9587" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 10570 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="10570" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 11552 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="11552" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="6335"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="5859"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="5383"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="4908"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="4432"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="3957"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">5</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="3481"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">6</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="3005"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">7</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="2530"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">8</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="2054"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">9</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2095" y="1579"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">10</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="459px" font-weight="400"><tspan class="TextPosition" x="3409" y="746"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Sequential Write (4M block size, 64 queue depth)</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="388px" font-weight="400"><tspan class="TextPosition" x="3384" y="1248"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">CPU Utilization of 128 logical cores, primary coordinator</tspan></tspan></tspan></text>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 13231,7856 L 14031,7856"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13525,7751 L 13525,7962 13736,7962 13736,7751 13525,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13525,7751 L 13525,7962 13736,7962 13736,7751 13525,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-width="80" stroke-linejoin="round" d="M 13231,8254 L 14031,8254"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 13525,8149 L 13631,8360 13736,8149 13525,8149 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 13525,8149 L 13631,8360 13736,8149 13525,8149 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 13231,8652 L 14031,8652"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13525,8652 L 13631,8758 13736,8652 13631,8547 13525,8652 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13525,8652 L 13631,8758 13736,8652 13631,8547 13525,8652 Z"/>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="7976"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Total</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="8374"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">ceph-osd</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="8772"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">ceph-mon</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-90 1573 6194)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="318px" font-weight="400"><tspan class="TextPosition" x="1573" y="6194"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">CPU Utilization % (lower is better)</tspan></tspan></tspan></text>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 25 KiB |
@ -0,0 +1,178 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="160mm" height="90mm" viewBox="0 0 16000 9000" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="28.222" stroke-linejoin="round" xml:space="preserve">
|
||||||
|
<path fill="rgb(255,255,255)" stroke="none" d="M 7987,8986 L -13,8986 -13,-13 15986,-13 15986,8986 7987,8986 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8121,6215 L 2715,6215 2715,1460 13527,1460 13527,6215 8121,6215 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,5738 L 2715,5738"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,5262 L 2715,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4787 L 2715,4787"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4312 L 2715,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3361 L 2715,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2885 L 2715,2885"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2410 L 2715,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,1934 L 2715,1934"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5738 L 2715,5738"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5738 L 2715,5738"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5262 L 2715,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5262 L 2715,5262"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4787 L 2715,4787"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4787 L 2715,4787"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4312 L 2715,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4312 L 2715,4312"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3361 L 2715,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3361 L 2715,3361"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2885 L 2715,2885"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2885 L 2715,2885"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2410 L 2715,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2410 L 2715,2410"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1934 L 2715,1934"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1934 L 2715,1934"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 2715,4407 L 3698,4312 4681,3932 5664,3932 6647,3646 7630,3171 8612,3456 9595,3076 10578,2505 11561,3076 12544,2600 13527,1744"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 2590,4282 L 2590,4531 2840,4531 2840,4282 2590,4282 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 2590,4282 L 2590,4531 2840,4531 2840,4282 2590,4282 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 3573,4187 L 3573,4437 3823,4437 3823,4187 3573,4187 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 3573,4187 L 3573,4437 3823,4437 3823,4187 3573,4187 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 4556,3807 L 4556,4057 4806,4057 4806,3807 4556,3807 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 4556,3807 L 4556,4057 4806,4057 4806,3807 4556,3807 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 5539,3807 L 5539,4057 5789,4057 5789,3807 5539,3807 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 5539,3807 L 5539,4057 5789,4057 5789,3807 5539,3807 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 6522,3521 L 6522,3771 6772,3771 6772,3521 6522,3521 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 6522,3521 L 6522,3771 6772,3771 6772,3521 6522,3521 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 7505,3046 L 7505,3296 7755,3296 7755,3046 7505,3046 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 7505,3046 L 7505,3296 7755,3296 7755,3046 7505,3046 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 8487,3331 L 8487,3581 8737,3581 8737,3331 8487,3331 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 8487,3331 L 8487,3581 8737,3581 8737,3331 8487,3331 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 9470,2951 L 9470,3201 9720,3201 9720,2951 9470,2951 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 9470,2951 L 9470,3201 9720,3201 9720,2951 9470,2951 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 10453,2380 L 10453,2630 10703,2630 10703,2380 10453,2380 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 10453,2380 L 10453,2630 10703,2630 10703,2380 10453,2380 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 11436,2951 L 11436,3201 11686,3201 11686,2951 11436,2951 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 11436,2951 L 11436,3201 11686,3201 11686,2951 11436,2951 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 12419,2475 L 12419,2725 12669,2725 12669,2475 12419,2475 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 12419,2475 L 12419,2725 12669,2725 12669,2475 12419,2475 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13402,1619 L 13402,1869 13652,1869 13652,1619 13402,1619 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13402,1619 L 13402,1869 13652,1869 13652,1619 13402,1619 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-width="80" stroke-linejoin="round" d="M 2715,5643 L 3698,5548 4681,5262 5664,5167 6647,4882 7630,4407 8612,4692 9595,4407 10578,3837 11561,4407 12544,3932 13527,3076"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 2590,5518 L 2715,5768 2840,5518 2590,5518 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 2590,5518 L 2715,5768 2840,5518 2590,5518 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 3573,5423 L 3698,5673 3823,5423 3573,5423 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 3573,5423 L 3698,5673 3823,5423 3573,5423 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 4556,5137 L 4681,5387 4806,5137 4556,5137 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 4556,5137 L 4681,5387 4806,5137 4556,5137 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 5539,5042 L 5664,5292 5789,5042 5539,5042 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 5539,5042 L 5664,5292 5789,5042 5539,5042 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 6522,4757 L 6647,5007 6772,4757 6522,4757 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 6522,4757 L 6647,5007 6772,4757 6522,4757 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 7505,4282 L 7630,4531 7755,4282 7505,4282 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 7505,4282 L 7630,4531 7755,4282 7505,4282 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 8487,4567 L 8612,4817 8737,4567 8487,4567 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 8487,4567 L 8612,4817 8737,4567 8487,4567 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 9470,4282 L 9595,4531 9720,4282 9470,4282 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 9470,4282 L 9595,4531 9720,4282 9470,4282 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 10453,3712 L 10578,3962 10703,3712 10453,3712 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 10453,3712 L 10578,3962 10703,3712 10453,3712 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 11436,4282 L 11561,4531 11686,4282 11436,4282 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 11436,4282 L 11561,4531 11686,4282 11436,4282 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 12419,3807 L 12544,4057 12669,3807 12419,3807 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 12419,3807 L 12544,4057 12669,3807 12419,3807 Z"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 13402,2951 L 13527,3201 13652,2951 13402,2951 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 13402,2951 L 13527,3201 13652,2951 13402,2951 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 2715,6118 L 3698,6118 4681,6118 5664,6118 6647,6118 7630,6118 8612,6118 9595,6118 10578,6118 11561,6118 12544,6118 13527,6118"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 2590,6118 L 2715,6243 2840,6118 2715,5993 2590,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 2590,6118 L 2715,6243 2840,6118 2715,5993 2590,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 3573,6118 L 3698,6243 3823,6118 3698,5993 3573,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 3573,6118 L 3698,6243 3823,6118 3698,5993 3573,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 4556,6118 L 4681,6243 4806,6118 4681,5993 4556,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 4556,6118 L 4681,6243 4806,6118 4681,5993 4556,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 5539,6118 L 5664,6243 5789,6118 5664,5993 5539,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 5539,6118 L 5664,6243 5789,6118 5664,5993 5539,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 6522,6118 L 6647,6243 6772,6118 6647,5993 6522,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 6522,6118 L 6647,6243 6772,6118 6647,5993 6522,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 7505,6118 L 7630,6243 7755,6118 7630,5993 7505,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 7505,6118 L 7630,6243 7755,6118 7630,5993 7505,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 8487,6118 L 8612,6243 8737,6118 8612,5993 8487,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 8487,6118 L 8612,6243 8737,6118 8612,5993 8487,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 9470,6118 L 9595,6243 9720,6118 9595,5993 9470,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 9470,6118 L 9595,6243 9720,6118 9595,5993 9470,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 10453,6118 L 10578,6243 10703,6118 10578,5993 10453,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 10453,6118 L 10578,6243 10703,6118 10578,5993 10453,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 11436,6118 L 11561,6243 11686,6118 11561,5993 11436,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 11436,6118 L 11561,6243 11686,6118 11561,5993 11436,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 12419,6118 L 12544,6243 12669,6118 12544,5993 12419,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 12419,6118 L 12544,6243 12669,6118 12544,5993 12419,6118 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13402,6118 L 13527,6243 13652,6118 13527,5993 13402,6118 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13402,6118 L 13527,6243 13652,6118 13527,5993 13402,6118 Z"/>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 740 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="740" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 1723 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1723" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 2706 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2706" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 3689 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="3689" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 4672 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="4672" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 5655 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="5655" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 6638 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="6638" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 7621 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="7621" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 8604 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="8604" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 9587 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="9587" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 10570 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="10570" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 11552 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="11552" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="6335"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="5859"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0.5</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="5383"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="4908"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1.5</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="4432"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="3957"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2.5</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="3481"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="3005"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3.5</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="2530"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1989" y="2054"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4.5</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="1579"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">5</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="459px" font-weight="400"><tspan class="TextPosition" x="3409" y="747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Sequential Write (4M block size, 64 queue depth)</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="388px" font-weight="400"><tspan class="TextPosition" x="3784" y="1248"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Memory Utilization of 1024 GB, primary coordinator</tspan></tspan></tspan></text>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 13231,7856 L 14031,7856"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13525,7751 L 13525,7962 13736,7962 13736,7751 13525,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13525,7751 L 13525,7962 13736,7962 13736,7751 13525,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-width="80" stroke-linejoin="round" d="M 13231,8254 L 14031,8254"/>
|
||||||
|
<path fill="rgb(255,211,32)" stroke="none" d="M 13525,8149 L 13631,8360 13736,8149 13525,8149 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,211,32)" stroke-linejoin="round" d="M 13525,8149 L 13631,8360 13736,8149 13525,8149 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 13231,8652 L 14031,8652"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13525,8652 L 13631,8758 13736,8652 13631,8547 13525,8652 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13525,8652 L 13631,8758 13736,8652 13631,8547 13525,8652 Z"/>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="7976"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Total</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="8374"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">ceph-osd</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14131" y="8772"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">ceph-mon</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-90 1573 6393)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="318px" font-weight="400"><tspan class="TextPosition" x="1573" y="6393"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Memory Utilization % (lower is better)</tspan></tspan></tspan></text>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 25 KiB |
@ -0,0 +1,162 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="160mm" height="90mm" viewBox="0 0 16000 9000" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="28.222" stroke-linejoin="round" xml:space="preserve">
|
||||||
|
<path fill="rgb(255,255,255)" stroke="none" d="M 7987,8986 L -13,8986 -13,-13 15986,-13 15986,8986 7987,8986 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8121,6215 L 2715,6215 2715,1460 13527,1460 13527,6215 8121,6215 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,5421 L 2715,5421"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,4628 L 2715,4628"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,3044 L 2715,3044"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,2251 L 2715,2251"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6364 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 3698,6364 L 3698,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 4681,6364 L 4681,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 5664,6364 L 5664,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6647,6364 L 6647,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 7630,6364 L 7630,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 8612,6364 L 8612,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9595,6364 L 9595,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 10578,6364 L 10578,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 11561,6364 L 11561,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12544,6364 L 12544,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 13527,6364 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 13527,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,6214 L 2715,6214"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5421 L 2715,5421"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,5421 L 2715,5421"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4628 L 2715,4628"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,4628 L 2715,4628"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3837 L 2715,3837"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3044 L 2715,3044"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,3044 L 2715,3044"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2251 L 2715,2251"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,2251 L 2715,2251"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2565,1459 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 2715,6214 L 2715,1459"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 2715,4438 L 3698,4106 4681,2495 5664,3467 6647,2264 7630,2203 8612,2579 9595,2214 10578,2642 11561,2456 12544,2201 13527,2649"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 2590,4313 L 2590,4562 2840,4562 2840,4313 2590,4313 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 2590,4313 L 2590,4562 2840,4562 2840,4313 2590,4313 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 3573,3981 L 3573,4231 3823,4231 3823,3981 3573,3981 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 3573,3981 L 3573,4231 3823,4231 3823,3981 3573,3981 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 4556,2370 L 4556,2620 4806,2620 4806,2370 4556,2370 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 4556,2370 L 4556,2620 4806,2620 4806,2370 4556,2370 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 5539,3342 L 5539,3592 5789,3592 5789,3342 5539,3342 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 5539,3342 L 5539,3592 5789,3592 5789,3342 5539,3342 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 6522,2139 L 6522,2389 6772,2389 6772,2139 6522,2139 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 6522,2139 L 6522,2389 6772,2389 6772,2139 6522,2139 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 7505,2078 L 7505,2328 7755,2328 7755,2078 7505,2078 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 7505,2078 L 7505,2328 7755,2328 7755,2078 7505,2078 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 8487,2454 L 8487,2704 8737,2704 8737,2454 8487,2454 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 8487,2454 L 8487,2704 8737,2704 8737,2454 8487,2454 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 9470,2089 L 9470,2339 9720,2339 9720,2089 9470,2089 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 9470,2089 L 9470,2339 9720,2339 9720,2089 9470,2089 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 10453,2517 L 10453,2767 10703,2767 10703,2517 10453,2517 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 10453,2517 L 10453,2767 10703,2767 10703,2517 10453,2517 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 11436,2331 L 11436,2581 11686,2581 11686,2331 11436,2331 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 11436,2331 L 11436,2581 11686,2581 11686,2331 11436,2331 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 12419,2076 L 12419,2326 12669,2326 12669,2076 12419,2076 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 12419,2076 L 12419,2326 12669,2326 12669,2076 12419,2076 Z"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13402,2524 L 13402,2774 13652,2774 13652,2524 13402,2524 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13402,2524 L 13402,2774 13652,2774 13652,2524 13402,2524 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-width="80" stroke-linejoin="round" d="M 2715,5112 L 3698,4893 4681,3888 5664,4497 6647,3749 7630,3711 8612,3942 9595,3720 10578,3981 11561,3867 12544,3710 13527,3978"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 2590,4987 L 2715,5237 2840,4987 2590,4987 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 2590,4987 L 2715,5237 2840,4987 2590,4987 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 3573,4768 L 3698,5018 3823,4768 3573,4768 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 3573,4768 L 3698,5018 3823,4768 3573,4768 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 4556,3763 L 4681,4013 4806,3763 4556,3763 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 4556,3763 L 4681,4013 4806,3763 4556,3763 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 5539,4373 L 5664,4622 5789,4373 5539,4373 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 5539,4373 L 5664,4622 5789,4373 5539,4373 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 6522,3624 L 6647,3874 6772,3624 6522,3624 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 6522,3624 L 6647,3874 6772,3624 6522,3624 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 7505,3586 L 7630,3836 7755,3586 7505,3586 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 7505,3586 L 7630,3836 7755,3586 7505,3586 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 8487,3817 L 8612,4067 8737,3817 8487,3817 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 8487,3817 L 8612,4067 8737,3817 8487,3817 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 9470,3595 L 9595,3845 9720,3595 9470,3595 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 9470,3595 L 9595,3845 9720,3595 9470,3595 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 10453,3856 L 10578,4106 10703,3856 10453,3856 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 10453,3856 L 10578,4106 10703,3856 10453,3856 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 11436,3742 L 11561,3992 11686,3742 11436,3742 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 11436,3742 L 11561,3992 11686,3742 11436,3742 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 12419,3585 L 12544,3835 12669,3585 12419,3585 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 12419,3585 L 12544,3835 12669,3585 12419,3585 Z"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 13402,3853 L 13527,4103 13652,3853 13402,3853 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 13402,3853 L 13527,4103 13652,3853 13402,3853 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 2715,5538 L 3698,5425 4681,4820 5664,5182 6647,4728 7630,4706 8612,4851 9595,4708 10578,4875 11561,4803 12544,4705 13527,4884"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 2590,5538 L 2715,5663 2840,5538 2715,5413 2590,5538 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 2590,5538 L 2715,5663 2840,5538 2715,5413 2590,5538 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 3573,5425 L 3698,5550 3823,5425 3698,5300 3573,5425 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 3573,5425 L 3698,5550 3823,5425 3698,5300 3573,5425 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 4556,4820 L 4681,4945 4806,4820 4681,4695 4556,4820 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 4556,4820 L 4681,4945 4806,4820 4681,4695 4556,4820 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 5539,5182 L 5664,5307 5789,5182 5664,5057 5539,5182 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 5539,5182 L 5664,5307 5789,5182 5664,5057 5539,5182 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 6522,4728 L 6647,4853 6772,4728 6647,4603 6522,4728 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 6522,4728 L 6647,4853 6772,4728 6647,4603 6522,4728 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 7505,4706 L 7630,4831 7755,4706 7630,4581 7505,4706 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 7505,4706 L 7630,4831 7755,4706 7630,4581 7505,4706 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 8487,4851 L 8612,4976 8737,4851 8612,4726 8487,4851 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 8487,4851 L 8612,4976 8737,4851 8612,4726 8487,4851 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 9470,4708 L 9595,4833 9720,4708 9595,4583 9470,4708 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 9470,4708 L 9595,4833 9720,4708 9595,4583 9470,4708 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 10453,4875 L 10578,5000 10703,4875 10578,4750 10453,4875 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 10453,4875 L 10578,5000 10703,4875 10578,4750 10453,4875 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 11436,4803 L 11561,4928 11686,4803 11561,4678 11436,4803 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 11436,4803 L 11561,4928 11686,4803 11561,4678 11436,4803 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 12419,4705 L 12544,4830 12669,4705 12544,4580 12419,4705 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 12419,4705 L 12544,4830 12669,4705 12544,4580 12419,4705 Z"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13402,4884 L 13527,5009 13652,4884 13527,4759 13402,4884 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13402,4884 L 13527,5009 13652,4884 13527,4759 13402,4884 Z"/>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 740 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="740" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 1723 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1723" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 2706 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2706" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">1 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 3689 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="3689" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 4672 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="4672" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 5655 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="5655" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">2 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 6638 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="6638" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 7621 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="7621" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 8604 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="8604" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">3 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 9587 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="9587" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 1 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 10570 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="10570" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 2 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-44.9 11552 8747)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="11552" y="8747"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">4 disk, 4 OSD/disk</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2280" y="6335"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">0</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1539" y="5542"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">20000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1539" y="4749"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">40000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1539" y="3957"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">60000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1539" y="3164"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">80000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1354" y="2371"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">100000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="1354" y="1579"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">120000</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="459px" font-weight="400"><tspan class="TextPosition" x="3409" y="749"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Sequential Write (4M block size, 64 queue depth)</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="388px" font-weight="400"><tspan class="TextPosition" x="3985" y="1248"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Average Network Throughput, primary coordinator</tspan></tspan></tspan></text>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-width="80" stroke-linejoin="round" d="M 13363,7856 L 14163,7856"/>
|
||||||
|
<path fill="rgb(0,69,134)" stroke="none" d="M 13657,7751 L 13657,7962 13868,7962 13868,7751 13657,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,69,134)" stroke-linejoin="round" d="M 13657,7751 L 13657,7962 13868,7962 13868,7751 13657,7751 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-width="80" stroke-linejoin="round" d="M 13363,8254 L 14163,8254"/>
|
||||||
|
<path fill="rgb(0,169,51)" stroke="none" d="M 13657,8149 L 13763,8360 13868,8149 13657,8149 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(0,169,51)" stroke-linejoin="round" d="M 13657,8149 L 13763,8360 13868,8149 13657,8149 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-width="80" stroke-linejoin="round" d="M 13363,8652 L 14163,8652"/>
|
||||||
|
<path fill="rgb(255,66,14)" stroke="none" d="M 13657,8652 L 13763,8758 13868,8652 13763,8547 13657,8652 Z"/>
|
||||||
|
<path fill="none" stroke="rgb(255,66,14)" stroke-linejoin="round" d="M 13657,8652 L 13763,8758 13868,8652 13763,8547 13657,8652 Z"/>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14263" y="7976"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Total</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14263" y="8374"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Send</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14263" y="8772"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Receive</tspan></tspan></tspan></text>
|
||||||
|
<text class="SVGTextShape" transform="rotate(-90 1073 5692)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="318px" font-weight="400"><tspan class="TextPosition" x="1073" y="5692"><tspan fill="rgb(0,0,0)" stroke="none" style="white-space: pre">Network Throughput Mbps</tspan></tspan></tspan></text>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 22 KiB |
@ -1,12 +1,12 @@
|
|||||||
+++
|
---
|
||||||
date = "2021-10-01T00:34:00-04:00"
|
title: "Adventures in Ceph tuning"
|
||||||
tags = ["systems administration", "pvc","ceph"]
|
description: "An analysis of Ceph system tuning for Hyperconverged Infrastructure"
|
||||||
title = "Adventures in Ceph tuning"
|
date: 2021-10-01
|
||||||
description = "An analysis of Ceph system tuning for Hyperconverged Infrastructure"
|
tags:
|
||||||
type = "post"
|
- PVC
|
||||||
weight = 1
|
- Development
|
||||||
draft = false
|
- Systems Administration
|
||||||
+++
|
---
|
||||||
|
|
||||||
In early 2018, I started work on [my Hyperconverged Infrastructure (HCI) project PVC](https://github.com/parallelvirtualcluster/pvc). Very quickly, I decided to use Ceph as the storage backend, for a number of reasons, including its built-in host-level redundancy, self-managing and self-healing functionality, and general good performance. With PVC now being used in numerous production clusters, I decided to tackle optimization. This turned out to be a bit of rabbit hole, which I will detail below. Happy reading.
|
In early 2018, I started work on [my Hyperconverged Infrastructure (HCI) project PVC](https://github.com/parallelvirtualcluster/pvc). Very quickly, I decided to use Ceph as the storage backend, for a number of reasons, including its built-in host-level redundancy, self-managing and self-healing functionality, and general good performance. With PVC now being used in numerous production clusters, I decided to tackle optimization. This turned out to be a bit of rabbit hole, which I will detail below. Happy reading.
|
||||||
|
|
||||||
@ -76,22 +76,22 @@ Each test, in each configuration mode, was run 3 times, with the results present
|
|||||||
|
|
||||||
These two tests measure raw sequential throughput at a very large block size and relatively high queue depth.
|
These two tests measure raw sequential throughput at a very large block size and relatively high queue depth.
|
||||||
|
|
||||||

|

|
||||||

|

|
||||||
|
|
||||||
#### Test Suite 2: Random Read/Write IOPS, 4k block size, 64-depth queue
|
#### Test Suite 2: Random Read/Write IOPS, 4k block size, 64-depth queue
|
||||||
|
|
||||||
These two tests measure IOPS performance at a very small block size and relatively high queue depth.
|
These two tests measure IOPS performance at a very small block size and relatively high queue depth.
|
||||||
|
|
||||||

|

|
||||||

|

|
||||||
|
|
||||||
#### Test Suite 3: Random Read/Write Latency, 4k block size, 1-depth queue
|
#### Test Suite 3: Random Read/Write Latency, 4k block size, 1-depth queue
|
||||||
|
|
||||||
These two tests measure average request latency at a very small block size and single queue depth.
|
These two tests measure average request latency at a very small block size and single queue depth.
|
||||||
|
|
||||||

|

|
||||||

|

|
||||||
|
|
||||||
## Benchmark Analysis
|
## Benchmark Analysis
|
||||||
|
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
@ -1,14 +1,11 @@
|
|||||||
+++
|
---
|
||||||
|
title: "Self-Hosted Voice Control (for Paranoids)"
|
||||||
class = "post"
|
description: "Building a self-hosted voice interface for HomeAssistant"
|
||||||
date = "2018-03-12T13:00:00-05:00"
|
date: 2018-03-12
|
||||||
tags = ["diy","automation","buildlog"]
|
tags:
|
||||||
title = "Self-Hosted Voice Control (for Paranoids)"
|
- DIY
|
||||||
description = "Building a self-hosted voice interface for HomeAssistant"
|
- Technology
|
||||||
type = "post"
|
---
|
||||||
weight = 1
|
|
||||||
|
|
||||||
+++
|
|
||||||
|
|
||||||
#### _Building a self-hosted voice interface for HomeAssistant_
|
#### _Building a self-hosted voice interface for HomeAssistant_
|
||||||
|
|
BIN
content/en/posts/smart-pwm-fan-controller/assembled.png
Normal file
After Width: | Height: | Size: 1.4 MiB |
BIN
content/en/posts/smart-pwm-fan-controller/board-design.png
Normal file
After Width: | Height: | Size: 148 KiB |
BIN
content/en/posts/smart-pwm-fan-controller/board-layout.png
Normal file
After Width: | Height: | Size: 293 KiB |
BIN
content/en/posts/smart-pwm-fan-controller/board.png
Normal file
After Width: | Height: | Size: 1.7 MiB |
BIN
content/en/posts/smart-pwm-fan-controller/hass.png
Normal file
After Width: | Height: | Size: 97 KiB |
66
content/en/posts/smart-pwm-fan-controller/index.md
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
---
|
||||||
|
title: "An ESPHome-powered Smart PWM Fan Controller"
|
||||||
|
description: "Control your fan walls with style from HomeAssistant"
|
||||||
|
date: 2025-05-16
|
||||||
|
tags:
|
||||||
|
- DIY
|
||||||
|
- Home Automation
|
||||||
|
---
|
||||||
|
|
||||||
|
## The Motivations
|
||||||
|
|
||||||
|
I have a few fan arrays/walls throughout my house, namely two in my garage, and one I plan to build in my room over my bed to replace a tower fan.
|
||||||
|
|
||||||
|
But PC fans can be noisy, and control is ideal. So I decided to build myself a relatively simple ESPHome-based fan controller!
|
||||||
|
|
||||||
|
## The Design
|
||||||
|
|
||||||
|
I of course wanted to base the design off the ESP32, which is my go-to microcontroller for all ESPHome-related devices these days. One crucial feature of the ESP32 is that it contains 8 pulse counter units, which allow the chip to count pulses - like a fan tachometer - very quickly and without using the CPU. I selected my venerable slim HW-395 model, which I also use for [my](/posts/the-supersensor) (Supersensors](/posts/the-supersensor-2.0), as its compact size but full pin count makes designing around it very easy.
|
||||||
|
|
||||||
|
The ESP32 alone can output PWM as well, so I didn't need any sort of fancy controller chip - I just hooked the PWM lines up to each fan and let the ESPHome software do the rest. Lastly a relay controls power to the fans, for simple on/off control in addition to the PWM level control, giving the full range of control needed for a fan array.
|
||||||
|
|
||||||
|
I also needed a way to step down the 12VDC input to the 5V that both the ESP32 and relay needed, so for that I selected a basic adjustable DC-DC converter. This did require initial tuning during each board's assembly, but once set it should never need further adjustment. I used an SMD-like method with a hot air gun to ensure a flat profile with good contact for this board, while everything else is through-hole soldered.
|
||||||
|
|
||||||
|
I designed the board in EasyEDA and ordered from JLCPCB for a very reasonable price (though shipping costs are not what they used to be). The overall design is quite simple, with power routing capable of at least 3A of current at a minimum.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Which when fabricated looks lovely in black.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
And assembled it looks very sleek.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Lastly, the HomeAssistant view shows everthing we might need, with power and speed controls as well as the RPM tachometer output of each fan (useful to see levels or if a fan fails).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
ESPHome code and schematics for the PCB can be found on [the GitHub project page](https://github.com/joshuaboniface/smart-pwm-fan-controller).
|
||||||
|
|
||||||
|
## Parts List (prices as of May 2025)
|
||||||
|
|
||||||
|
| Qty | Component | Cost (CAD, ex. shipping) | Links |
|
||||||
|
|-----------|--------------------------|--------------------------|-------|
|
||||||
|
| 1 | ESP32 HW-395 | $6.67 | [AliExpress](https://www.aliexpress.com/item/1005006019875837.html)* |
|
||||||
|
| 8 | 4-pin fan header | $0.21 ($1.02/5) | [AliExpress](https://www.aliexpress.com/item/1005007499957251.html) |
|
||||||
|
| 1 | MP1584EN DC-DC converter | $1.34 ($13.99/10) | [Amazon](https://www.amazon.ca/dp/B07THSDWHX) |
|
||||||
|
| 1 | SRD-05VDC-SL-C relay | $1.52 ($18.16/12) | [Amazon](https://www.amazon.ca/dp/B098JHY5TP) |
|
||||||
|
| 1 | DC barrel jack | $0.98 ($9.79/10) | [Amazon](https://www.amazon.ca/dp/B011HFLKI2) |
|
||||||
|
| 2 | 1kΩ resistor (1%) | $0.06 ($10.99/200) | [Amazon](https://www.amazon.ca/dp/B096PK4XN5) |
|
||||||
|
| 1 | 1N4004 diode | $0.07 ($20.99/300) | [Amazon (kit)](https://www.amazon.ca/dp/B07YK3XMQQ) |
|
||||||
|
| 1 | BC337 transistor | $0.06 ($12.13/200) | [Amazon (kit)](https://www.amazon.ca/dp/B07X62PBMH) |
|
||||||
|
| 1 | 3mm LED | $0.05 ($15.99/350) | [Amazon (kit)](https://www.amazon.ca/dp/B073GRZNRL) |
|
||||||
|
| 1 | Custom PCB (JLC) | $0.50 ($5.00/10) | [GitHub](https://github.com/joshuaboniface/esphome-pwm-fan-controller) |
|
||||||
|
| **TOTAL** | | $12.99 | |
|
||||||
|
|
||||||
|
* Items marked with an asterisk (`*`) require selection of the correct specific component on the page.
|
||||||
|
|
||||||
|
* Several pieces came as part of larger variety kits, so individual prices may not be completely accurate.
|
||||||
|
|
||||||
|
## Final Thoughts
|
||||||
|
|
||||||
|
This was a fun little project, and I'm quite happy with how it turned out. And it will definitely help keep me cool this summer. Happy hacking!
|