From 83120a9d91a70b704c9bec07b11104c0e581423e Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Sat, 10 Apr 2021 20:13:35 +0200 Subject: [PATCH 01/12] project: initial pandoc template --- .gitattributes | 1 + Makefile | 4 +++ begin-document.tex | 42 ++++++++++++++++++++++++++++++ config.yaml | 29 +++++++++++++++++++++ figs/epita-banner.png | 3 +++ figs/linkedin.png | 3 +++ header.tex | 60 +++++++++++++++++++++++++++++++++++++++++++ report.md | 25 ++++++++++++++++++ 8 files changed, 167 insertions(+) create mode 100644 .gitattributes create mode 100644 Makefile create mode 100644 begin-document.tex create mode 100644 config.yaml create mode 100644 figs/epita-banner.png create mode 100644 figs/linkedin.png create mode 100644 header.tex create mode 100644 report.md diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..ea11d8e --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +/figs/* filter=lfs diff=lfs merge=lfs -text diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..871fa19 --- /dev/null +++ b/Makefile @@ -0,0 +1,4 @@ +all: report.pdf + +report.pdf: report.md begin-document.tex config.yaml header.tex + pandoc --defaults config.yaml diff --git a/begin-document.tex b/begin-document.tex new file mode 100644 index 0000000..570f96e --- /dev/null +++ b/begin-document.tex @@ -0,0 +1,42 @@ +%--------------------------------------------------------------------------------- +% Preamble +%--------------------------------------------------------------------------------- + +\title{ + {Promotion 2021 \hfill Majeure IMAGE}\\ + \vspace{3cm} + {\Huge \textbf{End of studies internship report}}\\ + \vspace{1.5cm} + {\large Internship from 2021-03-01 to 2021-09-01 at :} \\ + \vspace{0.3cm} + {\huge IMC BV} \\ + \vspace{0.5cm} + {\large With the subject :} \\ + \vspace{0.2cm} + {Benchmark IMC's new exchange connectivity service} \\ + \vspace{1cm} + {\large Under the mentorship of : \\ Jelle Wissink} \\ +} + +%\author{Christelle Zouein \\ \\ christelle.zouein@epita.fr} +%\date{February 2021} +\date{} % for an empty page +\author{} +%--------------------------------------------------------------------------------- +% Title Page +%--------------------------------------------------------------------------------- +\maketitle +\thispagestyle{title} + +\newpage + +%--------------------------------------------------------------------------------- +% Contents +%--------------------------------------------------------------------------------- +\tableofcontents + +\newpage + +%--------------------------------------------------------------------------------- +% Body +%--------------------------------------------------------------------------------- diff --git a/config.yaml b/config.yaml new file mode 100644 index 0000000..417f5d0 --- /dev/null +++ b/config.yaml @@ -0,0 +1,29 @@ +from: markdown +to: pdf + +output-file: output.pdf +input-files: + - report.md + +variables: + documentclass: article + classoptions: + - 12pt + - french + - a4paper + +include-before-body: + - begin-document.tex +include-after-body: [] +include-in-header: + - header.tex +resource-path: ["."] + +metadata: + author: + - Bruno BELANYI + +pdf-engine: pdflatex +table-of-contents: true +toc-depth: 1 +number-sections: true diff --git a/figs/epita-banner.png b/figs/epita-banner.png new file mode 100644 index 0000000..f4b45f4 --- /dev/null +++ b/figs/epita-banner.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:827130de35efacdff3dc6f353fa0175a5a05c1cc82f278bb3d889988eed48432 +size 165986 diff --git a/figs/linkedin.png b/figs/linkedin.png new file mode 100644 index 0000000..3ebd0af --- /dev/null +++ b/figs/linkedin.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f42ddff1f2dc9b7b4edde222c2be2d5546fe540cd30d02064756cbdc884fab8e +size 14643 diff --git a/header.tex b/header.tex new file mode 100644 index 0000000..1eba738 --- /dev/null +++ b/header.tex @@ -0,0 +1,60 @@ +\usepackage{lmodern} +\usepackage{latexsym} +\usepackage{float} +\usepackage{placeins} +\usepackage{graphicx} +\usepackage{indentfirst} +\usepackage{fancyhdr} +\usepackage{changepage} +\usepackage{enumitem} +\usepackage{url} +\usepackage{amssymb} +\usepackage{subcaption} +\DeclareCaptionLabelSeparator{colon}{ : } % to add space before the colon in the figure caption. +%\usepackage[dvipsnames, table]{xcolor} %FIXME +\usepackage{hyperref} +\hypersetup{% + colorlinks=true, + %linkcolor=NavyBlue, + linkcolor=blue, % FIXME + filecolor=magenta, + urlcolor=blue, + citecolor=blue, +} + +\usepackage[includeheadfoot, headheight=64pt, margin=1.25in]{geometry} +\usepackage{graphicx} +\usepackage{fancyhdr} +\usepackage{tikz} + + +%--------------------------------------------------------------------------------- +% Title header +%--------------------------------------------------------------------------------- + +\fancypagestyle{title} {% +\pagestyle{fancy} +\renewcommand{\headrulewidth}{0pt} +\renewcommand{\footrulewidth}{0pt} +\fancyhf{} +\chead{\includegraphics[width=\linewidth]{figs/epita-banner.png}} +\rfoot{\thepage} +\lfoot{Bruno BELAYI \\ \vspace{-11pt} \hspace{3.1cm} \href{https://www.linkedin.com/in/bruno-belanyi}{\includegraphics[height=0.5cm]{figs/linkedin.png}}} +} + +%--------------------------------------------------------------------------------- +% Header +%--------------------------------------------------------------------------------- + +\pagestyle{fancy} +\renewcommand{\headrulewidth}{0pt} +\renewcommand{\footrulewidth}{0pt} +\fancyhf{} +\chead{ +\begin{tikzpicture} + \draw (0, 0) node[inner sep=0] {\includegraphics[width=\linewidth]{figs/epita-banner.png}}; + \draw (3, 0) node {\textcolor{white}{\textbf{End of studies internship report - IMAGE}}}; +\end{tikzpicture} +} +\rfoot{\thepage} +\cfoot{IMV BV - Bruno BELANYI} diff --git a/report.md b/report.md new file mode 100644 index 0000000..2c8a92e --- /dev/null +++ b/report.md @@ -0,0 +1,25 @@ +# Exec Sum + +# Thanks and acknowledgements + +# Introduction + +# Subject + +# Context of the subject + +# Internship roadmap + +# Engineering practices + +# Illustrated analysis of acquired skills + +# Added value + +# Conclusion + +# Annex + +## About IMC + +## Results & Comments From 90b02a22d42b6d416b4844281d222a3b8122333e Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Sat, 10 Apr 2021 20:19:55 +0200 Subject: [PATCH 02/12] report: add initial introduction --- report.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/report.md b/report.md index 2c8a92e..b4b0f65 100644 --- a/report.md +++ b/report.md @@ -6,6 +6,36 @@ # Subject +The first description of my internship project was given to me as: + +> The project is about benchmarking a new service we're building related to +> exchange connectivity. It would involve writing a program to generate load on +> the new service, preparing a test environment and analyzing the performance +> results. Time permitting might also involve making performance improvements to +> the services. + +To understand this subject, we must start with an explanation of what exchange +connectivity means at IMC: it is the layer in IMC's architecture that ensures +the connection between internal trading services and external exchanges' own +infrastructure and services. It is at this layer that exchange-specific +protocols are normalised into IMC's own protocol messages, and vice versa. + +Here is the list of tasks that I am expected to have accomplished during this +internship: + +* become familiar with the service, +* write a dummy load generator, +* benchmark the system under the load, +* analyze the measurements. + +This kind of project is exactly the reason that I was interested in working in +finance and trading. It is a field that is focused on achieving the highest +performance possible, because being faster is directly tied with making more +trades and results in more profits. + +Because I expressed this personal interest for working on high performance +systems and related subjects, I was given this internship project to work on. + # Context of the subject # Internship roadmap From 232c72f46cc47302b8de52c974d5e26c4bd47cc9 Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Sat, 10 Apr 2021 20:20:57 +0200 Subject: [PATCH 03/12] report: add initial context section --- report.md | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/report.md b/report.md index b4b0f65..7abe811 100644 --- a/report.md +++ b/report.md @@ -38,6 +38,59 @@ systems and related subjects, I was given this internship project to work on. # Context of the subject +The exchange connectivity layer must route orders as fast possible, to stay +competitive, reduce transaction costs, and lower latencies which could result in +lost opportunities, therefore less profits. + +It must also take on other duties, due to it being closer to the exchange than +the rest of the infrastructure. For example, a trading strategy can register +conditional orders with this service: it must monitor the price of product A and +X, if product A's cost rise over X's, then it must start selling product B at +price Y. + +A new exchange connectivity service, called the Execution Gateway, is being +built at IMC, the eventual goal being to migrate all trading strategies to using +this gateway to send orders to exchanges. This will allow it to be scaled more +appropriately. However, care must be taken to maintain the current performance +during the entirety of the migration in order to stay competitive, and the only +way to ensure this is to measure it. + +With that context, let's review my expected tasks once more, and expand on each +of them: + +* Become familiar with the service: before writing the code for the benchmark + I must first understand what goes into the process of a trade at IMC, what is + needed from the gateway and from the clients in order to run them and execute + orders. There is a lot of code at IMC: having different teams working at the + same time on different trading service results in a lot of churn. The + global execution team was created to centralise the work on core services that + must be provided to the rest of the IMC workforce. The global execution + gateway is one such project, aiming to consolidate all trading strategies + under one singular method to send orders to their exchanges. +* Write a dummy load generator: we want to send orders under different + conditions in order to run multiple scenarios which can model varying cases + of execution. Having more data for varying corner cases can make us more + confident of the robustness and efficiency of the service. This is especially + needed becaue of the various roles that the gateway must fulfill: not only + must it act as a bridge for the communication between exchanges and traders, + but also as an order executor. All those cases must be accounted for when + writing the different scenarios. +* Benchmark the system under the load: once we can run those scenarios smoothly + we can start taking multiple measurements. The main one that IMC is interested + in is wall-to-wall latency (abbreviated W2W): the time it takes for a trade to + go from a trading strategy to an exchange. The lower this time, the more + occasions there are to make good trades. + FIXME: probably more context in my notes +* Analyze the measurements: the global execution team has some initial + expectations of the gateway's performance. A divergence on that part could + mean that the measurements are flawed in some way, or that the gateway is not + performing as expected. Further analysis can be done to look at the difference + between mean execution time and the 99th percentile, and analyse the tail of + the timing distribution: the smaller it is the better. Consistent timing is + more important than a lower average, because we must be absolutely confident + that a trade order is going to be executed smoothly, and introducing + inconsistent latency can result in bad trades. + # Internship roadmap # Engineering practices From 4a9e60313894639a5c3e39e7439ffb2765146a8d Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Sat, 10 Apr 2021 20:21:08 +0200 Subject: [PATCH 04/12] report: add initial roadmap --- report.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/report.md b/report.md index 7abe811..df37541 100644 --- a/report.md +++ b/report.md @@ -93,6 +93,26 @@ of them: # Internship roadmap +The first month was dedicated to familiarizing myself with the vocabulary at +IMC, understanding the context surrounding the team I am working in, and +learning about the different services that are currently being used in their +infrastructure. I had to write a first proof of concept to investigate what, if +any, dependencies would be needed to execute the gateway as a stand-alone system +for the benchmark. This has allowed me to get acquainted with their development +process. + +After writing that proof of concept, we were now certain that the benchmark was +a feasible project, with very few actual dependencies to be run: the only one +that we needed to be concerned with it called the RDS server. The RDS server +is responsible for holding the information about all trade-able instruments at +an exchange. The gateway connects to it to receive a snapshot of the state of +those instruments, for example the mapping from IMC IDs to the ones used by the +exchange. I wrote a small module that could be used as a fake RDS server by the +benchmark framework to provide its inputs to the gateway being instrumented. + +I am now currently beginning to write the benchmark framework, using what +I wrote and learned during the previous month. + # Engineering practices # Illustrated analysis of acquired skills From a237a7503c360dcc0f19e8ff3e306b404041afb2 Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Sat, 10 Apr 2021 20:22:45 +0200 Subject: [PATCH 05/12] config: rename output to 'report.pdf' --- config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.yaml b/config.yaml index 417f5d0..b094865 100644 --- a/config.yaml +++ b/config.yaml @@ -1,7 +1,7 @@ from: markdown to: pdf -output-file: output.pdf +output-file: report.pdf input-files: - report.md From 1d99e7baf55bf9b9784253e28e9da7a8c16fabd0 Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Sat, 10 Apr 2021 20:23:55 +0200 Subject: [PATCH 06/12] git: ignore 'report.pdf' --- .gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e1a507d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/report.pdf From ae17115f198be3e61be9866ce8223013ca11cccd Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Sat, 10 Apr 2021 20:13:35 +0200 Subject: [PATCH 07/12] project: initial pandoc template --- .gitattributes | 1 + Makefile | 4 +++ begin-document.tex | 42 ++++++++++++++++++++++++++++++ config.yaml | 29 +++++++++++++++++++++ figs/epita-banner.png | 3 +++ figs/linkedin.png | 3 +++ header.tex | 60 +++++++++++++++++++++++++++++++++++++++++++ report.md | 25 ++++++++++++++++++ 8 files changed, 167 insertions(+) create mode 100644 .gitattributes create mode 100644 Makefile create mode 100644 begin-document.tex create mode 100644 config.yaml create mode 100644 figs/epita-banner.png create mode 100644 figs/linkedin.png create mode 100644 header.tex create mode 100644 report.md diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..ea11d8e --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +/figs/* filter=lfs diff=lfs merge=lfs -text diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..871fa19 --- /dev/null +++ b/Makefile @@ -0,0 +1,4 @@ +all: report.pdf + +report.pdf: report.md begin-document.tex config.yaml header.tex + pandoc --defaults config.yaml diff --git a/begin-document.tex b/begin-document.tex new file mode 100644 index 0000000..570f96e --- /dev/null +++ b/begin-document.tex @@ -0,0 +1,42 @@ +%--------------------------------------------------------------------------------- +% Preamble +%--------------------------------------------------------------------------------- + +\title{ + {Promotion 2021 \hfill Majeure IMAGE}\\ + \vspace{3cm} + {\Huge \textbf{End of studies internship report}}\\ + \vspace{1.5cm} + {\large Internship from 2021-03-01 to 2021-09-01 at :} \\ + \vspace{0.3cm} + {\huge IMC BV} \\ + \vspace{0.5cm} + {\large With the subject :} \\ + \vspace{0.2cm} + {Benchmark IMC's new exchange connectivity service} \\ + \vspace{1cm} + {\large Under the mentorship of : \\ Jelle Wissink} \\ +} + +%\author{Christelle Zouein \\ \\ christelle.zouein@epita.fr} +%\date{February 2021} +\date{} % for an empty page +\author{} +%--------------------------------------------------------------------------------- +% Title Page +%--------------------------------------------------------------------------------- +\maketitle +\thispagestyle{title} + +\newpage + +%--------------------------------------------------------------------------------- +% Contents +%--------------------------------------------------------------------------------- +\tableofcontents + +\newpage + +%--------------------------------------------------------------------------------- +% Body +%--------------------------------------------------------------------------------- diff --git a/config.yaml b/config.yaml new file mode 100644 index 0000000..417f5d0 --- /dev/null +++ b/config.yaml @@ -0,0 +1,29 @@ +from: markdown +to: pdf + +output-file: output.pdf +input-files: + - report.md + +variables: + documentclass: article + classoptions: + - 12pt + - french + - a4paper + +include-before-body: + - begin-document.tex +include-after-body: [] +include-in-header: + - header.tex +resource-path: ["."] + +metadata: + author: + - Bruno BELANYI + +pdf-engine: pdflatex +table-of-contents: true +toc-depth: 1 +number-sections: true diff --git a/figs/epita-banner.png b/figs/epita-banner.png new file mode 100644 index 0000000..f4b45f4 --- /dev/null +++ b/figs/epita-banner.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:827130de35efacdff3dc6f353fa0175a5a05c1cc82f278bb3d889988eed48432 +size 165986 diff --git a/figs/linkedin.png b/figs/linkedin.png new file mode 100644 index 0000000..3ebd0af --- /dev/null +++ b/figs/linkedin.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f42ddff1f2dc9b7b4edde222c2be2d5546fe540cd30d02064756cbdc884fab8e +size 14643 diff --git a/header.tex b/header.tex new file mode 100644 index 0000000..1eba738 --- /dev/null +++ b/header.tex @@ -0,0 +1,60 @@ +\usepackage{lmodern} +\usepackage{latexsym} +\usepackage{float} +\usepackage{placeins} +\usepackage{graphicx} +\usepackage{indentfirst} +\usepackage{fancyhdr} +\usepackage{changepage} +\usepackage{enumitem} +\usepackage{url} +\usepackage{amssymb} +\usepackage{subcaption} +\DeclareCaptionLabelSeparator{colon}{ : } % to add space before the colon in the figure caption. +%\usepackage[dvipsnames, table]{xcolor} %FIXME +\usepackage{hyperref} +\hypersetup{% + colorlinks=true, + %linkcolor=NavyBlue, + linkcolor=blue, % FIXME + filecolor=magenta, + urlcolor=blue, + citecolor=blue, +} + +\usepackage[includeheadfoot, headheight=64pt, margin=1.25in]{geometry} +\usepackage{graphicx} +\usepackage{fancyhdr} +\usepackage{tikz} + + +%--------------------------------------------------------------------------------- +% Title header +%--------------------------------------------------------------------------------- + +\fancypagestyle{title} {% +\pagestyle{fancy} +\renewcommand{\headrulewidth}{0pt} +\renewcommand{\footrulewidth}{0pt} +\fancyhf{} +\chead{\includegraphics[width=\linewidth]{figs/epita-banner.png}} +\rfoot{\thepage} +\lfoot{Bruno BELAYI \\ \vspace{-11pt} \hspace{3.1cm} \href{https://www.linkedin.com/in/bruno-belanyi}{\includegraphics[height=0.5cm]{figs/linkedin.png}}} +} + +%--------------------------------------------------------------------------------- +% Header +%--------------------------------------------------------------------------------- + +\pagestyle{fancy} +\renewcommand{\headrulewidth}{0pt} +\renewcommand{\footrulewidth}{0pt} +\fancyhf{} +\chead{ +\begin{tikzpicture} + \draw (0, 0) node[inner sep=0] {\includegraphics[width=\linewidth]{figs/epita-banner.png}}; + \draw (3, 0) node {\textcolor{white}{\textbf{End of studies internship report - IMAGE}}}; +\end{tikzpicture} +} +\rfoot{\thepage} +\cfoot{IMV BV - Bruno BELANYI} diff --git a/report.md b/report.md new file mode 100644 index 0000000..36e727d --- /dev/null +++ b/report.md @@ -0,0 +1,25 @@ +# Exec Sum + +# Thanks and acknowledgements + +# Introduction + +# Subject + +# Context of the subject + +# Internship roadmap + +# Engineering practices + +# Illustrated analysis of acquired skills + +# Added value + +# Conclusion + +# Appendix + +## About IMC + +## Results & Comments From 8c533d1fe23e781c909146efe6e95c36694eee01 Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Sat, 10 Apr 2021 20:19:55 +0200 Subject: [PATCH 08/12] report: add initial introduction --- report.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/report.md b/report.md index 36e727d..f7fab91 100644 --- a/report.md +++ b/report.md @@ -6,6 +6,36 @@ # Subject +The first description of my internship project was given to me as: + +> The project is about benchmarking a new service we're building related to +> exchange connectivity. It would involve writing a program to generate load on +> the new service, preparing a test environment and analyzing the performance +> results. Time permitting might also involve making performance improvements to +> the services. + +To understand this subject, we must start with an explanation of what exchange +connectivity means at IMC: it is the layer in IMC's architecture that ensures +the connection between internal trading services and external exchanges' own +infrastructure and services. It is at this layer that exchange-specific +protocols are normalised into IMC's own protocol messages, and vice versa. + +Here is the list of tasks that I am expected to have accomplished during this +internship: + +* become familiar with the service, +* write a dummy load generator, +* benchmark the system under the load, +* analyze the measurements. + +This kind of project is exactly the reason that I was interested in working in +finance and trading. It is a field that is focused on achieving the highest +performance possible, because being faster is directly tied with making more +trades and results in more profits. + +Because I expressed this personal interest for working on high performance +systems and related subjects, I was given this internship project to work on. + # Context of the subject # Internship roadmap From 1e56974953c619dfba7c50acf88ddc69ce5361cb Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Sat, 10 Apr 2021 20:20:57 +0200 Subject: [PATCH 09/12] report: add initial context section --- report.md | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/report.md b/report.md index f7fab91..c96bc6d 100644 --- a/report.md +++ b/report.md @@ -38,6 +38,59 @@ systems and related subjects, I was given this internship project to work on. # Context of the subject +The exchange connectivity layer must route orders as fast possible, to stay +competitive, reduce transaction costs, and lower latencies which could result in +lost opportunities, therefore less profits. + +It must also take on other duties, due to it being closer to the exchange than +the rest of the infrastructure. For example, a trading strategy can register +conditional orders with this service: it must monitor the price of product A and +X, if product A's cost rise over X's, then it must start selling product B at +price Y. + +A new exchange connectivity service, called the Execution Gateway, is being +built at IMC, the eventual goal being to migrate all trading strategies to using +this gateway to send orders to exchanges. This will allow it to be scaled more +appropriately. However, care must be taken to maintain the current performance +during the entirety of the migration in order to stay competitive, and the only +way to ensure this is to measure it. + +With that context, let's review my expected tasks once more, and expand on each +of them: + +* Become familiar with the service: before writing the code for the benchmark + I must first understand what goes into the process of a trade at IMC, what is + needed from the gateway and from the clients in order to run them and execute + orders. There is a lot of code at IMC: having different teams working at the + same time on different trading service results in a lot of churn. The + global execution team was created to centralise the work on core services that + must be provided to the rest of the IMC workforce. The global execution + gateway is one such project, aiming to consolidate all trading strategies + under one singular method to send orders to their exchanges. +* Write a dummy load generator: we want to send orders under different + conditions in order to run multiple scenarios which can model varying cases + of execution. Having more data for varying corner cases can make us more + confident of the robustness and efficiency of the service. This is especially + needed becaue of the various roles that the gateway must fulfill: not only + must it act as a bridge for the communication between exchanges and traders, + but also as an order executor. All those cases must be accounted for when + writing the different scenarios. +* Benchmark the system under the load: once we can run those scenarios smoothly + we can start taking multiple measurements. The main one that IMC is interested + in is wall-to-wall latency (abbreviated W2W): the time it takes for a trade to + go from a trading strategy to an exchange. The lower this time, the more + occasions there are to make good trades. + FIXME: probably more context in my notes +* Analyze the measurements: the global execution team has some initial + expectations of the gateway's performance. A divergence on that part could + mean that the measurements are flawed in some way, or that the gateway is not + performing as expected. Further analysis can be done to look at the difference + between mean execution time and the 99th percentile, and analyse the tail of + the timing distribution: the smaller it is the better. Consistent timing is + more important than a lower average, because we must be absolutely confident + that a trade order is going to be executed smoothly, and introducing + inconsistent latency can result in bad trades. + # Internship roadmap # Engineering practices From 0d0c2bebe6b1cbe03ac47df86e33cf5c6e493b0d Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Sat, 10 Apr 2021 20:21:08 +0200 Subject: [PATCH 10/12] report: add initial roadmap --- report.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/report.md b/report.md index c96bc6d..f5b4930 100644 --- a/report.md +++ b/report.md @@ -93,6 +93,26 @@ of them: # Internship roadmap +The first month was dedicated to familiarizing myself with the vocabulary at +IMC, understanding the context surrounding the team I am working in, and +learning about the different services that are currently being used in their +infrastructure. I had to write a first proof of concept to investigate what, if +any, dependencies would be needed to execute the gateway as a stand-alone system +for the benchmark. This has allowed me to get acquainted with their development +process. + +After writing that proof of concept, we were now certain that the benchmark was +a feasible project, with very few actual dependencies to be run: the only one +that we needed to be concerned with it called the RDS server. The RDS server +is responsible for holding the information about all trade-able instruments at +an exchange. The gateway connects to it to receive a snapshot of the state of +those instruments, for example the mapping from IMC IDs to the ones used by the +exchange. I wrote a small module that could be used as a fake RDS server by the +benchmark framework to provide its inputs to the gateway being instrumented. + +I am now currently beginning to write the benchmark framework, using what +I wrote and learned during the previous month. + # Engineering practices # Illustrated analysis of acquired skills From b948658dedf7dd4cb4a744bfac99003c1ac38935 Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Sat, 10 Apr 2021 20:22:45 +0200 Subject: [PATCH 11/12] config: rename output to 'report.pdf' --- config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.yaml b/config.yaml index 417f5d0..b094865 100644 --- a/config.yaml +++ b/config.yaml @@ -1,7 +1,7 @@ from: markdown to: pdf -output-file: output.pdf +output-file: report.pdf input-files: - report.md From 7f4aa33721aded5023b22d0905d1c4b882f66866 Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Sat, 10 Apr 2021 20:23:55 +0200 Subject: [PATCH 12/12] git: ignore 'report.pdf' --- .gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e1a507d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/report.pdf