Hello James.
Bravo and many thanks for this excellent overview of your activities. Of course the setup
(in your previous message) and the activities are very impressive by themselves.
But in addition, even though your message is not in itself a perl advocacy message, I feel
that it would have its right place in some perl/mod_perl advocacy forum, because it
touches on some general idea which are valid /also/ for perl and mod_perl.
It was very refreshing to read for once a clear exposé of why it is still important
nowadays to think before programming, to program efficiently, and to choose the right tool
for the job at hand (be it perl, mod_perl, or any other) without the kind of off-the-cuff
general a-priori which tend to plague these discussions.
And even though our own (commercial) activities and setups do not have anything even close
to the scope which you describe, I would like to say that the same basic principles which
you mention in your exposé are just as valid when you scale-down as when you scale-up.
("--you can’t just throw memory, CPUs, power at a problem – you have to
think – how can I do what I need to do with the least resources..")
Even when you think of a single server, or a single server rack, at any one period in time
there is always a practical limit as to how much memory or CPUs you can fit in a given
server, or how many servers you can fit in a rack, or how many additional Gb of bandwidth
you can allocate per server, beyond which there is a sudden "quantum jump" as to how
practical and cost-effective a whole project becomes.
In that sense, I particulary enjoyed your examples of the database and of the additional
power line.
On 24.12.2020 02:38, James Smith wrote:
We don’t use perl for everything, yes we use it for web data, yes we still use it as the
glue language in a lot of cases, the most complex stuff is done with C (not even C++ as
that is too slow). Others on site use Python, Java, Rust, Go, PHP, along with looking at
using GPUs in cases where code can be highly parallelised
It is not just one application – but many, many applications… All with a common goal of
understanding the human genome, and using it to assist in developing new understanding and
techniques which can advance health care.
We are a very large sequencing centre (one of the largest in the world) – what I was
pointing out is that you can’t just throw memory, CPUs, power at a problem – you have to
think – how can I do what I need to do with the least resources. Rather than what
resources can I throw at the problem.
Currently we are acting as the central repository for all COVID-19 sequencing in the UK,
along with one of the largest “wet” labs sequencing data for it – and that is half the
sequenced samples in the whole world. The UK is sequencing more COVID-19 genomes a day
than most other countries have sequenced since the start of the pandemic in Feb/Mar. This
has lead to us discovering a new more transmissible version of the virus, and it what part
of the country the different strains are present – no other country in the world has the
information, technology or infrastructure in place to achieve this.
But this is just a small part of the genomic sequencing we are looking at – we
work on:
* other pathogens – e.g. Plasmodium (Malaria);
* cancer genomes (and how effective drugs are);
* are a major part of the Human Cell Atlas which is looking at how the expression of genes
(in the simplest terms which ones are switched on and switched off) are different in
different tissues;
* sequencing the genomes of other animals to understand their evolution;
* and looking at some other species in detail, to see what we can learn from them when
they have defective genes;
Although all these are currently scaled back so that we can work relentlessly to support
the medical teams and other researchers get on top of COVID-19.
What is interesting is that many of the developers we have on campus (well all wfh at the
moment) are all (relatively) old as we learnt to develop code on machines with limited CPU
and limited memory – so that things had to be efficient, had to be compact…. And that is
as important now as it was 20 or 30 years ago – the data we handle is going up faster than
Moore’s Law! Many of us have pride in doing things as efficiently as possible.
It took around 10 years to sequence and assemble the first human genome {well we are still
tinkering with it and filling in the gaps} – now at the institute we can sequence and
assemble around 400 human genomes in a day – to the same quality!
So most of our issues are due to the scale of the problems we face – e.g. the human genome
has 3 billion base-pairs (A, C, G, Ts) , so normal solutions don’t scale to that (once
many years ago we looked at setting up an Oracle database where there was at least 1 row
for every base pair – recording all variants (think of them as spelling mistakes, for
example a T rather than an A, or an extra letter inserted or deleted) for that base pair…
The schema was set up – and then they realised it would take 12 months to load the data
which we had then (which is probably less than a millionth of what we have now)!
Moving compute off site is a problem as the transfer of the level of data we have would
cause a problem – you can’t easily move all the data to the compute – so you have to bring
the compute to the data.
The site I worked on before I became a more general developer was doing that – and the
code that was written 12-15 years ago is actually still going strong – it has seen a few
changes over the year – many displays have had to be redeveloped as the scale of the data
has got so big that even the summary pages we produced 10 years ago have to be summarised
because they are so large.
*From:*Mithun Bhattacharya <mit...@gmail.com>
*Sent:* 24 December 2020 00:06
*To:* mod_perl list <modperl@perl.apache.org>
*Subject:* Re: Confused about two development utils [EXT]
James would you be able to share more info about your setup ?
1. What exactly is your application doing which requires so much memory and CPU - is it
something like gene splicing (no i don't know much about it beyond Jurassic Park :D )
2. Do you feel Perl was the best choice for whatever you are doing and if yes then why ?
How much of your stuff is using mod_perl considering you mentioned not much is web related ?
3. What are the challenges you are currently facing with your implementation ?
On Wed, Dec 23, 2020 at 6:58 AM James Smith <j...@sanger.ac.uk <mailto:j...@sanger.ac.uk>>
wrote:
Oh but memory is a problem – but not if you have just a small cluster of
machines!
Our boxes are larger than that – but they all run virtual machine {only a
small
proportion web related} – machines/memory would rapidly become in our data
centre - we
run VMWARE [995 hosts] and openstack [10,000s of hosts] + a selection of
large memory
machines {measured in TBs of memory per machine }.
We would be looking at somewhere between 0.5 PB and 1 PB of memory – not
just the
price of buying that amount of memory - for many machines we need the
fastest memory
money can buy for the workload, but we would need a lot more CPUs then we
currently
have as we would need a larger amount of machines to have 64GB virtual
machines {we
would get 2 VMs per host. We currently have approx. 1-2000 CPUs running our
hardware
(last time I had a figure) – it would probably need to go to approximately
5-10,000!
It is not just the initial outlay but the environmental and financial cost
of running
that number of machines, and finding space to run them without putting the
cooling
costs through the roof!! That is without considering what additional
constraints on
storage having the extra machines may have (at the last count a year ago we
had over
30 PBytes of storage on side – and a large amount of offsite backup.
We would also stretch the amount of power we can get from the national grid
to power
it all - we currently have 3 feeds from different part of the national grid
(we are
fortunately in position where this is possible) and the dedicated link we
would need
to add more power would be at least 50 miles long!
So - managing cores/memory is vitally important to us – moving to the cloud
is an
option we are looking at – but that is more than 4 times the price of our
onsite
set-up (with substantial discounts from AWS) and would require an upgrade
of our
existing link to the internet – which is currently 40Gbit of data (I think).
Currently we are analysing a very large amounts of data directly linked to
the current
major world problem – this is why the UK is currently being isolated as we
have
discovered and can track a new strain, in near real time – other countries
have no
ability to do this – we in a day can and do handle, sequence and analyse
more samples
than the whole of France has sequenced since February. We probably don’t
have more of
the new variant strain than in other areas of the world – it is just that
we know we
have because of the amount of sequencing and analysis that we in the UK
have done.
*From:*Matthias Peng <pengmatth...@gmail.com
<mailto:pengmatth...@gmail.com>>
*Sent:* 23 December 2020 12:02
*To:* mod_perl list <modperl@perl.apache.org
<mailto:modperl@perl.apache.org>>
*Subject:* Re: Confused about two development utils [EXT]
Today memory is not serious problem, each of our server has 64GB memory.
Forgot to add - so our FCGI servers need a lot (and I mean a lot) more
memory than
the mod_perl servers to serve the same level of content (just in case
memory blows
up with FCGI backends)
-----Original Message-----
From: James Smith <j...@sanger.ac.uk <mailto:j...@sanger.ac.uk>>
Sent: 23 December 2020 11:34
To: André Warnier (tomcat/perl) <a...@ice-sa.com
<mailto:a...@ice-sa.com>>;
modperl@perl.apache.org <mailto:modperl@perl.apache.org>
Subject: RE: Confused about two development utils [EXT]
> This costs memory, and all the more since many perl modules are not
thread-safe, so if you use them in your code, at this moment the only
safe way to
do it is to use the Apache httpd prefork model. This means that each
Apache httpd
child process has its own copy of the perl interpreter, which means
that the
memory used by this embedded perl interpreter has to be counted n times
(as many
times as there are Apache httpd child processes running at any one
time).
This isn’t quite true - if you load modules before the process forks
then they can
cleverly share the same parts of memory. It is useful to be able to
"pre-load"
core functionality which is used across all functions {this is the case
in Linux
anyway}. It also speeds up child process generation as the modules are
already in
memory and converted to byte code.
One of the great advantages of mod_perl is Apache2::SizeLimit which can
blow away
large child process - and then if needed create new ones. This is not
the case
with some of the FCGI solutions as the individual processes can grow if
there is a
memory leak or a request that retrieves a large amount of content (even
if not
served), but perl can't give the memory back. So FCGI processes only
get bigger
and bigger and eventually blow up memory (or hit swap first)
--
The Wellcome Sanger Institute is operated by Genome Research
Limited, a charity
registered in England with number 1021457 and a company registered in
England
with number 2742969, whose registered office is 215 Euston Road,
London, NW1 2
[google.com]
<https://urldefense.proofpoint.com/v2/url?u=https-3A__www.google.com_maps_search_s-2B215-2BEuston-2BRoad-2C-2BLondon-2C-2BNW1-2B2-3Fentry-3Dgmail-26source-3Dg&d=DwMFaQ&c=D7ByGjS34AllFgecYw0iC6Zq7qlm8uclZFI0SqQnqBo&r=oH2yp0ge1ecj4oDX0XM7vQ&m=friR8ykiZ-NWYdX6SrbT_ogNXEVR-4ixdkrhy5khQjA&s=xU3F4xE2ugQuDWHZ4GtDn9mPBCKcJJOI0PYScsSNjSg&e=>BE.
--
The Wellcome Sanger Institute is operated by Genome Research
Limited, a charity registered in England with number 1021457 and a
company registered in England with number 2742969, whose registered
office is 215 Euston Road, London, NW1 2 [google.com]
<https://urldefense.proofpoint.com/v2/url?u=https-3A__www.google.com_maps_search_s-2B215-2BEuston-2BRoad-2C-2BLondon-2C-2BNW1-2B2-3Fentry-3Dgmail-26source-3Dg&d=DwMFaQ&c=D7ByGjS34AllFgecYw0iC6Zq7qlm8uclZFI0SqQnqBo&r=oH2yp0ge1ecj4oDX0XM7vQ&m=friR8ykiZ-NWYdX6SrbT_ogNXEVR-4ixdkrhy5khQjA&s=xU3F4xE2ugQuDWHZ4GtDn9mPBCKcJJOI0PYScsSNjSg&e=>BE.
-- The Wellcome Sanger Institute is operated by Genome Research Limited, a
charity
registered in England with number 1021457 and a company registered in
England with
number 2742969, whose registered office is 215 Euston Road, London, NW1 2BE.
-- The Wellcome Sanger Institute is operated by Genome Research Limited, a charity
registered in England with number 1021457 and a company registered in England with number
2742969, whose registered office is 215 Euston Road, London, NW1 2BE.