From 4479a79912986eb228da2e62d08e78f1eb08998f Mon Sep 17 00:00:00 2001
From: Akilan
-This project focuses on creating a framework for running heavy computational tasks that a regular
-computer cannot handle easily. These tasks may include graphically demanding video games, rendering
-3D animations, and performing complex protein folding simulations. The major focus of this project
-is not on financial incentives but rather on building a robust and efficient peer-to-peer (P2P)
-network to decentralise task execution and increase the computational bandwidth available for
+This project focuses on creating a framework for running heavy computational tasks that a regular
+computer cannot handle easily. These tasks may include graphically demanding video games, rendering
+3D animations, and performing complex protein folding simulations. The major focus of this project
+is not on financial incentives but rather on building a robust and efficient peer-to-peer (P2P)
+network to decentralise task execution and increase the computational bandwidth available for
such tasks.
-The P2PRC framework serves as a foundation for decentralised rendering and computation,
-providing insights into how tasks can be distributed efficiently across a network of peers.
-Leveraging the P2PRC approach, this project extends its capabilities to handle a
+The P2PRC framework serves as a foundation for decentralised rendering and computation,
+providing insights into how tasks can be distributed efficiently across a network of peers.
+Leveraging the P2PRC approach, this project extends its capabilities to handle a
wider range of computationally intensive tasks.
-
@@ -142,18 +143,18 @@
1.1. Abstract
+// Do ensure that the docker command does not need sudo to run sudo chmod 666 /var/run/docker.sock@@ -245,7 +246,7 @@ To set up the internal dependencies and build the entire go code into a single binary -+make install@@ -258,7 +259,7 @@ To set up P2PRC on Windows, simply run this batch file. Make sure you are not in admin mode when running this. -+.\install.bat@@ -269,7 +270,7 @@ are not in admin mode when running this.2.2.4. Add appropriate paths to
.bashrc-+export P2PRC=/<PATH>/p2p-rendering-computation export PATH=/<PATH>/p2p-rendering-computation:${PATH}@@ -279,8 +280,8 @@ export PATH=/<PATH>/p2p-rendering-computation:${PATH}2.2.5. Set up configuration file
--make configfile ++make configfile@@ -293,7 +294,7 @@ one.
@@ -408,8 +409,8 @@ p2prc --rm=<server ip address> --id=<docker container id>2.2.6. Test if binary works
-@@ -301,7 +302,7 @@ p2prc --help+p2prc --help
- Output:
-+NAME: p2p-rendering-computation - p2p cli application to create and access VMs in other servers @@ -364,8 +365,8 @@ GLOBAL OPTIONS:@@ -373,7 +374,7 @@ p2prc -s3.0.1. Start as a server
--p2prc -s ++p2prc -s@@ -399,8 +400,8 @@ p2prc --touch=<server ip address> -p <number of ports> --gpu The docker id is present in the output where you create a container -3.0.2. View server Specification
-@@ -386,7 +387,7 @@ p2prc --specs=<ip address> use the+p2prc --specs=<ip address>--gpuif you know the other machine has a gpu. -+p2prc --touch=<server ip address> -p <number of ports> --gpu-p2prc --rm=<server ip address> --id=<docker container id> ++p2prc --rm=<server ip address> --id=<docker container id>@@ -417,8 +418,8 @@ p2prc --as=<server ip address you want to add>3.0.5. Adding servers to ip table
--p2prc --as=<server ip address you want to add> ++p2prc --as=<server ip address you want to add>@@ -426,8 +427,8 @@ p2prc --us3.0.6. Update ip table
--p2prc --us ++p2prc --us@@ -435,7 +436,7 @@ p2prc --ls3.0.7. List Servers
--p2prc --ls ++p2prc --ls3.0.8. View Network interfaces
-@@ -444,7 +445,7 @@ p2prc --ni+p2prc --ni3.0.9. Viewing Containers created Client side
-@@ -453,7 +454,7 @@ p2prc --tc+p2prc --tc3.0.10. Running plugin
-@@ -462,7 +463,7 @@ p2prc --plugin <plugin name> --id <container id or group id>+p2prc --plugin <plugin name> --id <container id or group id>3.0.11. Create group
-@@ -471,7 +472,7 @@ p2prc --cgroup+p2prc --cgroup3.0.12. Add container to group
-@@ -480,7 +481,7 @@ p2prc --group <group id> --id <container id>+p2prc --group <group id> --id <container id>3.0.13. View groups
-@@ -489,7 +490,7 @@ p2prc --groups+p2prc --groups3.0.14. View specific group
-@@ -498,8 +499,8 @@ p2prc --group <group id>+p2prc --group <group id>@@ -507,7 +508,7 @@ p2prc --rmcgroup --group <group id> --id <container id>3.0.15. Delete container from group
--p2prc --rmcgroup --group <group id> --id <container id> ++p2prc --rmcgroup --group <group id> --id <container id>3.0.16. Delete entire group
-@@ -516,7 +517,7 @@ p2prc --rmgroup <group id>+p2prc --rmgroup <group id>3.0.17. Pulling plugin from a remote repo
-@@ -525,8 +526,8 @@ p2prc --pp <repo link>+p2prc --pp <repo link>@@ -534,16 +535,16 @@ p2prc --rp <plugin name>3.0.18. Deleting plugin from the plugin directory
--p2prc --rp <plugin name> ++p2prc --rp <plugin name>-3.0.19. Added custom metadata about the current node
-+p2prc --amd "custom metadata"-3.0.20. MapPort and link to domain name
++3.0.20. MapPort and link to domain name
-+p2prc --mp <port no to map> --dn <domain name to link Mapped port against>@@ -556,15 +557,15 @@ p2prc --mp <port no to map> --dn <domain name to link Mapped port again4. P2P Module Implementation
-The P2P module is for managing server information within the network. -It maintains and updates the IP table, ensuring accuracy by preventing duplicates and removing -entries for unreachable servers. Furthermore, the module conducts speed tests on the listed servers -to determine upload and download speeds. This valuable information enables users to identify nearby +The P2P module is for managing server information within the network. +It maintains and updates the IP table, ensuring accuracy by preventing duplicates and removing +entries for unreachable servers. Furthermore, the module conducts speed tests on the listed servers +to determine upload and download speeds. This valuable information enables users to identify nearby servers with optimal performance, enhancing their overall network experience.
-+
![]()
Figure 1: UML diagram of P2P module
@@ -612,7 +613,7 @@ configuration module. "NAT": "<boolean representing if the node is behind NAT or not>", "EscapeImplementation": "<NAT traversal implementation>", "ProxyServer": "<If the node listed is acting as a proxy server>", - "UnSafeMode": <Unsafe mode if turned on will allow all nodes in the network public keys to be + "UnSafeMode": <Unsafe mode if turned on will allow all nodes in the network public keys to be added to that particular node>", "PublicKey": "<Public key of that particular node>", "CustomInformation": "<custom information passed in through all the nodes in the network>" @@ -665,7 +666,7 @@ from the TURN server. The flow below describes the workflow.Call -/FRPPort+http://<turn server ip>:<server port no>/FRPport@@ -759,11 +760,11 @@ p2prc.h p2prc.so Below are a sample set of commands to open the bindings implementation. -+# run cd Bindings/ # list files -ls +ls # search for file Client.go@@ -853,7 +854,7 @@ that convert a go object to JSON string initially and converts it toA Pseudo code to refer to the common function implementation shape could be represented as:
-+func <Function name> (output *C.char) { <response>,<error> := <P2PRC function name>(<parameters if needed>) if <error> != nil { @@ -871,14 +872,14 @@ func <Function name> (output *C.char) {+5.3. Current languages supported
-- --
- Python
--+5.3.1. Build sample python program
- + +++5.3.2. Haskell
++++P2PRC officially supports Haskell bindings and will further support +project using Haskell to build orchestrators on top of P2PRC. +
+ ++Read more… +
+6. Config Implementation
@@ -1015,7 +1031,7 @@ from the TURN server. The flow below describes the workflow.Call -/FRPPort+http://<turn server ip>:<server port no>/FRPport@@ -1051,8 +1067,8 @@ func main() { --10. Ideas for future potencial features
++10. Ideas for future potencial features
-Consists of personal loideas for the future of P2PRC. @@ -1060,8 +1076,8 @@ At moment only has main contributors writiing to this.
-10.1. To support hetrogenous set of Nodes that cannot run P2PRC
++10.1. To support hetrogenous set of Nodes that cannot run P2PRC
-This stems from a personal issue I have when doing research @@ -1078,8 +1094,8 @@ network nodes.
-10.1.1. Assumptions:
++-10.1.1. Assumptions:
- I have a Morello board that cannot run P2PRC
@@ -1092,8 +1108,8 @@ as well look into custom tasks into the hetrogenous hardware.-10.1.2. Set of interesting possible:
++-10.1.2. Set of interesting possible:
We build a cool set possibilities before and use this to build up the implementation @@ -1110,8 +1126,8 @@ weight hypervisors.
-10.1.3. Implementation
++10.1.3. Implementation
-
- To use implementations similar to socat to ensure we can bind address of local @@ -1125,7 +1141,7 @@ other nodes can access the Morello board who have permission access.
+- +
![]()
Figure 2: Implementation idea (To be improved upon)
@@ -1137,8 +1153,8 @@ other nodes can access the Morello board who have permission access.