Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Mesh Network
Seminararbeit von Marc Egli
Montag, 1. Juli 2013
Probleme
• Rapid Prototyping?
• Test Driven Development?
Montag, 1. Juli 2013
Rapid Prototyping
• Ist einfach mit Python
• Twisted als Networking Engine
• Lauffähiger Prototyp am 17. März
Montag, 1. J...
Test Driven Development
• Gegen eine bestehendeVersion Testen
• util.py für Abläufe
Montag, 1. Juli 2013
Open Source Anmerkung
• nur mit Lizenz
Montag, 1. Juli 2013
C
Montag, 1. Juli 2013
Design Ziele
• Das Rad nicht neu erfinden
• Möglichst viele sinnvolle Threads
• Kein Eventloop
• Socket Buffer ausnutzen
Mo...
Linked Lists
• BSD Libc hat Linked List Makros
• Lassen sich für beliebige Structs verwenden
Montag, 1. Juli 2013
/* Singly-linked List head. */
SLIST_HEAD(slisthead, entry) head =
SLIST_HEAD_INITIALIZER(head);
struct slisthead *headp;
...
/* Deletion from the head. */
SLIST_REMOVE_HEAD(&head, entries);
free(n3);
/* Forward traversal. */
SLIST_FOREACH(np, &hea...
Anwendungen
• Linked List mit allen Peers
• Routes List
Montag, 1. Juli 2013
Threads
• ProVerbindung ein Thread
• ein Thread um den eingangs Port zu
überwachen
• ein Thread um Packet History zu leere...
65 5
54 4
54 4
Anzahl Threads
Montag, 1. Juli 2013
Peer Tasks
• Jeder Task macht fread auf seinem Socket
• Falls er genügend Daten für ein Paket erhält
lockt er sich die ben...
Python vs C
• Versenden von 1000 Paketen
• 2 Nodes
Montag, 1. Juli 2013
Python C
~0.4s ~0.8s
Montag, 1. Juli 2013
Upcoming SlideShare
Loading in …5
×

Meshnode

School project

  • Login to see the comments

  • Be the first to like this

Meshnode

  1. 1. Mesh Network Seminararbeit von Marc Egli Montag, 1. Juli 2013
  2. 2. Probleme • Rapid Prototyping? • Test Driven Development? Montag, 1. Juli 2013
  3. 3. Rapid Prototyping • Ist einfach mit Python • Twisted als Networking Engine • Lauffähiger Prototyp am 17. März Montag, 1. Juli 2013
  4. 4. Test Driven Development • Gegen eine bestehendeVersion Testen • util.py für Abläufe Montag, 1. Juli 2013
  5. 5. Open Source Anmerkung • nur mit Lizenz Montag, 1. Juli 2013
  6. 6. C Montag, 1. Juli 2013
  7. 7. Design Ziele • Das Rad nicht neu erfinden • Möglichst viele sinnvolle Threads • Kein Eventloop • Socket Buffer ausnutzen Montag, 1. Juli 2013
  8. 8. Linked Lists • BSD Libc hat Linked List Makros • Lassen sich für beliebige Structs verwenden Montag, 1. Juli 2013
  9. 9. /* Singly-linked List head. */ SLIST_HEAD(slisthead, entry) head = SLIST_HEAD_INITIALIZER(head); struct slisthead *headp; /* Singly-linked List. */ struct entry { ... SLIST_ENTRY(entry) entries; ... } *n1, *n2, *n3, *np; SLIST_INIT(&head); /* Initialize the list. */ n1 = malloc(sizeof(struct entry)); /* Insert at the head. */ SLIST_INSERT_HEAD(&head, n1, entries); n2 = malloc(sizeof(struct entry)); /* Insert after. */ SLIST_INSERT_AFTER(n1, n2, entries); SLIST_REMOVE(&head, n2, entry, entries);/* Deletion. */ free(n2); n3 = SLIST_FIRST(&head); Montag, 1. Juli 2013
  10. 10. /* Deletion from the head. */ SLIST_REMOVE_HEAD(&head, entries); free(n3); /* Forward traversal. */ SLIST_FOREACH(np, &head, entries) np-> ... /* Safe forward traversal. */ SLIST_FOREACH_SAFE(np, &head, entries, np_temp) { np->do_stuff(); ... SLIST_REMOVE(&head, np, entry, entries); free(np); } /* List Deletion. */ while (!SLIST_EMPTY(&head)) { n1 = SLIST_FIRST(&head); SLIST_REMOVE_HEAD(&head, entries); free(n1); } Montag, 1. Juli 2013
  11. 11. Anwendungen • Linked List mit allen Peers • Routes List Montag, 1. Juli 2013
  12. 12. Threads • ProVerbindung ein Thread • ein Thread um den eingangs Port zu überwachen • ein Thread um Packet History zu leeren Montag, 1. Juli 2013
  13. 13. 65 5 54 4 54 4 Anzahl Threads Montag, 1. Juli 2013
  14. 14. Peer Tasks • Jeder Task macht fread auf seinem Socket • Falls er genügend Daten für ein Paket erhält lockt er sich die benötigten resourcen und verwendet es weiter • Kein anderer Task wird benötigt um ein Paket weiterzusenden Montag, 1. Juli 2013
  15. 15. Python vs C • Versenden von 1000 Paketen • 2 Nodes Montag, 1. Juli 2013
  16. 16. Python C ~0.4s ~0.8s Montag, 1. Juli 2013

×