Andersbakken / rtags

A client/server indexer for c/c++/objc[++] with integration for Emacs based on clang.
http://www.rtags.net
GNU General Public License v3.0
1.83k stars 253 forks source link

Feature Requested: way to utilize distributed computing for rdm/rp #1108

Open solotim opened 6 years ago

solotim commented 6 years ago

Please mark appropriate

Problem description

Expected behavior

Describe what you expected to happen.

Actual behavior

Describe what actually happened.

Environment

Feature request

rdm spawn a number of rp (12 by default) on local machine for indexing. If there is strong compute power in a farm network, how can one setup rdm to "submit" rp to other machines?

By doing so, it can lighten the burden of local machine, and speed up indexing with tons of machines in the forest.

solotim commented 6 years ago

If I create a wrapper on rp like below, I see the rp.bin(the binary rp executable) execute on remote machine, but it hangs. How should I debug it?

qrsh -now no -cwd -j y -V rp.bin $*

Andersbakken commented 6 years ago

There are primarily two problems.

rp writes to a local data directory (including acquiring a file lock). By default ~/.cache/rtags

You could possibly make this work by NFS or something similar.

rp connects back to rdm for communication using a unix domain socket. This is fixable by specifying a --tcp-port both when starting rdm and making some changes to rp to connect over tcp instead of unix domain socket for its ipc.

I can help with the latter which I think should be relatively easy.

The former might be problematic in terms of performance however. You might be able to just let rp write to a local path on the remote machine and copy the contents back when it finishes. We used to have support for this inside rtags but were unable to make it pay off enough for it to be worthwhile maintaining.

Anders

On Tue, Dec 5, 2017 at 10:18 PM, solotim notifications@github.com wrote:

If I create a wrapper on rp like below, I see the rp.bin(the binary rp executable) execute on remote machine, but it hangs. How should I debug it?

qrsh -now no -cwd -j y -P bnormal -V rp.bin $*

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/Andersbakken/rtags/issues/1108#issuecomment-349546530, or mute the thread https://github.com/notifications/unsubscribe-auth/AAEdSipHoRvtgEkxa3otVpsuKdWKLvaiks5s9jHTgaJpZM4Q0L78 .

RedBeard0531 commented 6 years ago

A really cool form of this would be to add a form of rp that had an invocation syntax similar enough to clang/gcc that it can be used with https://github.com/icecc/icecream. I think this would require that it support the -E flag (ideally implying -frewrite-includes) and is able to read from and write to stdin/stdout. This could work by outputing a simple file with everything rtags extracts from each TU, and then have a separate local process that reads the output and updates the local database.

We have a fairly large icecream cluster at work and a lot of us run rtags. Rebuilding the world including linking takes \~2 minutes, while reindexing takes 10\~20.

solotim commented 6 years ago

@Andersbakken Thanks for the info. I just realized that this might not work for me...

  1. We have a bunch of good NFS mount, so accessing remote file is not a problem.
  2. but the slow IO of NFS lead to very bad rdm performance to me; to improve the performance, I used /dev/shm/ as rdm cache; it got sped up amazingly, with comparable runtime to Eclipse CDT indexer.
  3. So, if I submit rp to other machines, they can't access the cache of local machine, since /dev/shm is local-only memory disk...
Andersbakken commented 6 years ago

Yeah. It's tricky with nfs mounts. Note that rp doesn't read from the cache, it only writes. As such you could possibly set up a system to scp the files back and drop them in place after it finishes.

Anders

On Sat, Dec 9, 2017 at 10:48 PM, solotim notifications@github.com wrote:

@Andersbakken https://github.com/andersbakken Thanks for the info. I just realized that this might not work for me...

  1. We have a bunch of good NFS mount, so access remote file is not a problem.
  2. but the slow IO of NFS lead very bad rdm performance to me; to improve the performance, I used /dev/shm/ as rdm cache; it got sped up amazingly, with comparable runtime as Eclipse CDT indexer.
  3. So, if I submit rp to other machines, they can't access the cache of local machine, since /dev/shm is local-only memory disk...

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/Andersbakken/rtags/issues/1108#issuecomment-350528936, or mute the thread https://github.com/notifications/unsubscribe-auth/AAEdSjBSCpls_F0N_9v2NUKfBwLxWuCBks5s-36hgaJpZM4Q0L78 .