[OSRM-talk] Road speeds and profile restrictions

Stephen Woodbridge woodbri at swoodbridge.com
Fri Sep 18 01:20:33 UTC 2015


Richard,

I have already imbedded OSRM into a C++ application and in fact wrapped 
that application into a postgresql database extension. I my case I only 
need data for a city but I was making literally billions of calls to osrm.

As Patrick said, OSRM makes random access calls to memory and there are 
a lot of variables that come into play like how well the data is 
clustered in memory pages, how many page faults you hit, etc. For your 
specific use case no one will have a good answer for you and you really 
need to do some performance testing using the product the way you intend 
it to be used and see what the performance issues are. Maybe you use 
case is fine. The OSRM public service uses lots of memory because it has 
to support multiple random requests anywhere in the world and it can not 
afford to get stuck page in swap. Using swap and an SSD might be fine in 
your application, and may be it won't, but we do not have enough 
information to consider the problem more than to give the standard 
answer - more memory is faster more swapping is slower.

-Steve



On 9/17/2015 8:45 PM, Richard Marsden wrote:
> Thanks for the quick reply Patrick.
>
>> Presumably I could do the same for world preparation & routing? Have, perhaps a 100GB+ swap file, ideally on an SSD.
>
>> This will fall apart when you have some actual load pressure on the
>> system. We need random access to memory, which will create a lot of
>> page faults (== slow). Even an SSD is not even close to memory speed.
>
>> You have two options:
>> split the datasets
>> get a bigger server
>
>
> I would imagine that is the case for the standard http server. I was
> thinking of using it as a linked library from a C++ program. Splitting
> the datasets by continent is a possibility though.
>
> (writing a C# interface was another thought, but that would be a
> different use case and definitely with smaller datasets)
>
> Cheers,
>
> Richard
>
>
>
>
> On Thu, Sep 17, 2015 at 4:37 PM, Patrick Niklaus
> <patrick.niklaus at student.kit.edu> wrote:
>> W.r.t. the pre-preprocessing you are correct.
>>
>>> What is that extra power used for?
>>
>> Including all sorts of external data sources. Also the logic in the
>> lua profiles is not just replaceable by simple key-value pairs, OSM
>> requires you to handle a lot of special cases.
>>
>>> Presumably I could do the same for world preparation & routing? Have, perhaps a 100GB+ swap file, ideally on an SSD.
>>
>> This will fall apart when you have some actual load pressure on the
>> system. We need random access to memory, which will create a lot of
>> page faults (== slow). Even an SSD is not even close to memory speed.
>>
>> You have two options:
>> - split the datasets
>> - get a bigger server
>>
>> Cheers,
>> Patrick
>>
>>
>> On Thu, Sep 17, 2015 at 10:06 PM, Richard Marsden <winwaed at gmail.com> wrote:
>>> I've been evaluating OSRM, using it primarily as a library from C++.
>>>
>>> I believe I've determined the answer to most of the questions, but I'm
>>> also looking for confirmation.
>>> (I understand the reason for these constraints - the trade-off of
>>> speed vs flexibility)
>>>
>>> First, road speeds are set with 'profile.lua' at the osrm-extract
>>> stage. This filters out unnecessary roads (eg. foot paths for car
>>> routing), but also applies the road speeds.
>>> If I wish to change the speed profile, I need to regenerate the road
>>> network with osrm-extract and osrm-routed.
>>> Correct?
>>>
>>> If I wanted different speeds for the final distance/time calculations,
>>> I could use the returned route, and apply my own speed table according
>>> to the road type of each road segment. This would not, of course,
>>> change the route geometry is calculated.
>>>
>>> If I want a shortest route (distance optimized) instead of a quickest
>>> route (time optimized), I need to set all the road speeds to the same
>>> speed and regenerate the network. I.e. osrm does not directly support
>>> the concept of a "shortest route".
>>>
>>> The profile is provided with a LUA file. I had to look this one up :-)
>>> Looks a useful scripting language, but why is this profile a script
>>> file, and not a simple configuration file of constants (eg. key-value
>>> pairs)?
>>> Seems like an unnecessary complexity - I'd like to understand the
>>> perceived advantages. What is that extra power used for?
>>>
>>> Finally, the memory usage... I saw a reference to the server requiring
>>> 40GB of memory for pan-European routing. Presumably that could be
>>> offset with a large swap file(?)
>>> A large swap file has worked well when I was testing the US-South
>>> region on an 8GB machine.
>>> Presumably I could do the same for world preparation & routing? Have,
>>> perhaps a 100GB+ swap file, ideally on an SSD.
>>>
>>>
>>> Cheers,
>>>
>>> Richard Marsden
>>>
>>> _______________________________________________
>>> OSRM-talk mailing list
>>> OSRM-talk at openstreetmap.org
>>> https://lists.openstreetmap.org/listinfo/osrm-talk
>>
>> _______________________________________________
>> OSRM-talk mailing list
>> OSRM-talk at openstreetmap.org
>> https://lists.openstreetmap.org/listinfo/osrm-talk
>
> _______________________________________________
> OSRM-talk mailing list
> OSRM-talk at openstreetmap.org
> https://lists.openstreetmap.org/listinfo/osrm-talk
>




More information about the OSRM-talk mailing list