M-lab servers - Speed Test (NDT servers alone)

269 views
Skip to first unread message

Ma Uttaram

unread,
Apr 22, 2020, 11:43:27 AM4/22/20
to discuss

The following gives all the m-lab servers and their geographic distribution.
http://mlab-ns.appspot.com/admin/map/ipv4/all

I am trying to write speed test cli , hence I assume I need to find NDT servers alone. I can locate the nearest NDT server using locate api https://locate.measurementlab.net/ndt/. How do I get to see list of NDT servers alone and their geographical spread.

Chris Ritzo

unread,
Apr 22, 2020, 11:53:57 AM4/22/20
to discuss
Hello, thanks for posting this question.

You might consider using one of our existing command line clients:
The "mlab-ns" service URL and the "locate" service are both backed by the same information, so the "all" query to mlab-ns should return the same servers available at the other URL.

Ma Uttaram

unread,
Apr 23, 2020, 8:13:35 AM4/23/20
to discuss
Chris,

The client I am writing is for our routers (linux) and hence it supports only specific libset and python.
Hence cant use go client. web100ctl is what I have in mind as we could try to compile platform specific.

To get the NDT server to run against , do I use locate url using ndt or ndt5 or ndt7?

Chris Ritzo

unread,
Apr 23, 2020, 8:31:13 AM4/23/20
to discuss
I see. In this case, could you please describe your target system architecture? If the target architecture is 64bit, we recommend  using ndt7-client-go. If not, there are some ndt client examples developed by the M-Lab community which might work, but would be unsupported by M-Lab. 

Regarding how to get the NDT server to run against, you can use the locate service URL as described on our Developer resources page. Which protocol you use (ndt5 or ndt7) will depend on the client implementation you choose.

Ma Uttaram

unread,
May 8, 2020, 9:44:26 AM5/8/20
to discuss
We cannot use go client as our devices dont support go. Could you please point to ndt client examples? I understand that it is not supported  by M-lab but would be good place for us to write or use a custom client.

Chris Ritzo

unread,
May 8, 2020, 11:57:36 AM5/8/20
to discuss
The available NDT client code options are provided on our Developer page: https://www.measurementlab.net/develop/#ndt
Some are officially supported by M-Lab, and some are community maintained and supported. Not knowing anything about your target system architecture, you could build a Go client binary and copy it to your target system.

If you cannot use a Go binary, there is a client code option that uses C/C++ called libndt. It is part of the measurement-kit project: https://github.com/measurement-kit/libndt/

This client is not listed on our Developer page because we are unclear about whether the community maintainer will be continuing to support it. The project's primary measurement engine, measurement-kit (https://github.com/measurement-kit/measurement-kit), has been deprecate by the maintainer, so libndt's current status is unlcear.

That said, our team has used libndt and it does measure effectively on well-resourced systems, measuring links in excess of multiple Gbps. It also supports all current NDT protocols, including the newest BBR-based ndt7 protocol.

If you pursue an integration using libndt, we strongly recommend benchmarking its performance in measuring the link of a target device compared to its performance on other, more well resourced systems. Further, it is not supported by M-Lab, so you would need to contact the developer directly for support.

We definitely would discourage you from using the web100clt client at all.

Ma Uttaram

unread,
May 15, 2020, 8:26:39 AM5/15/20
to discuss

We want to support for the following devices :
arm 64 (armv8-a, armv7-a, armv8-a)
mips (mips32r2 ) 
x86-64

Does the go client support the above archs? Are there any dependencies? Any tools that I could utilize to build binaries?

Chris Ritzo

unread,
May 15, 2020, 8:33:18 AM5/15/20
to discuss
Yes, the Go client (https://github.com/m-lab/ndt7-client-go) supports x86_64, arm64 and armv7, though if using armv7 we recommend using plaintext tests, not TLS.
I do not think the Go client will be usable on mips systems, but also I don't work with those systems anymore. If you do build a working Go client for mips, we would be interested to know about it. In all likelihood you will want to consider using the libndt library for mips.

Dependencies and build instructions are provided in the code repo's Readme.

Chris Wu

unread,
Aug 10, 2021, 11:03:31 AM8/10/21
to discuss, Chris Ritzo
Sorry for reviving an old thread but I'm in the same scenario. I have a Linux-based router I'd like to run tests from and I don't think Go is an option. I looked and libndt hasn't been updated in 2 years. Are there any other options that have come up since this thread last year?

Chris Ritzo

unread,
Aug 10, 2021, 11:15:20 AM8/10/21
to discuss, Chris Wu
Hi Chris, No problem with reviving an old thread.

For lower resourced machines like embedded routers, libndt was an option, but as you've found it is no longer maintained by the folks who built measurement-kit. Unfortunately, the M-Lab team does not plan to take on updates to libndt since our team is more focused on Go and lack sufficient C++11 expertise.

As a community-developed client, libndt and measurement-kit's former maintainers would I'm sure be open to new contributors and maintainers. Issues in the Github repo should be well documented and I think the community would welcome an updated version of new folks wanted to take on maintaining it.

If you or others on the list are potentially interested, please let us know, or reach out to the current maintainers on Github.

Best, Chris - M-Lab Support
Reply all
Reply to author
Forward
0 new messages