Προς το περιεχόμενο

QSpeedTest - Crossplaform tool για μέτρηση ping, packet loss και ταχύτητας download


Προτεινόμενες αναρτήσεις

Αν είναι upstream πρόβλημα του Qt με την κλάση QNetworkAccessManager, την πουλέψαμε! :-D

 

Τί το 'θελα και το μελέτησα ο γκαντέμης!

 

[#QTBUG-8914] QNetworkAccessManager ftp leaks memory

 

Και το επιβεβαίωσα, με τη βοήθεια του Process Monitor από Sysinternals. Όταν τελειώνει το download speed test, το Qt σταματά τα 4 από τα 6 file downloads, όσα είναι HTTP. Τα δύο υπόλοιπα που συνεχίζουν κρυφά στο υπόβαθρο και προκαλούν το memory leak και το network usage είναι αμφότερα από FTP και γίνονται forcefully disconnect μόνο με έξοδο από το πρόγραμμα:

 

post-4351-129063091625_thumb.png

 

Θα βγάλω σύντομα νέο revision στο οποίο θα αντικαταστήσω τα 2 αυτά download links με HTTP.

 

 

Επίσης δεν ξέρω αν είναι φυσιολογικό ή θα βοηθήσει κάπου, αλλά τρέχω το πρόγραμμα με την top ανοιχτή και μου εμφανίζει 4-5 διαφορετικά processess του qspeedtest.

 

Άλλο πάλι κι αυτό! Με το που εκκινείς το πρόγραμμα, και χωρίς να κάνεις κλικ στο Start, σου εμφανίζονται πολλαπλές διεργασίες qspeedtest; Δε μπορώ να το εξηγήσω. Fork δεν κάνω πουθενά και η μόνη επιπλέον διεργασία που χρησιμοποιείται είναι η ping του συστήματος. Αλλά θα έπρεπε η top να σου εμφανίζει ως όνομα "ping", όχι "qspeedtest".

 

Ίσως επειδή το πρόγραμμα καλεί την ping του συστήματος ως εξωτερική διεργασία. Αν και το Process tab στο GNOME System Monitor εμφανίζει

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Απαντ. 209
  • Δημ.
  • Τελ. απάντηση

Άλλο πάλι κι αυτό! Με το που εκκινείς το πρόγραμμα, και χωρίς να κάνεις κλικ στο Start, σου εμφανίζονται πολλαπλές διεργασίες qspeedtest; Δε μπορώ να το εξηγήσω. Fork δεν κάνω πουθενά και η μόνη επιπλέον διεργασία που χρησιμοποιείται είναι η ping του συστήματος. Αλλά θα έπρεπε η top να σου εμφανίζει ως όνομα "ping", όχι "qspeedtest".

 

Ίσως επειδή το πρόγραμμα καλεί την ping του συστήματος ως εξωτερική διεργασία. Αν και το Process tab στο GNOME System Monitor εμφανίζει

 

Λοιπόν, με την htop με το που πατάω το start πολλαπλασιάζονται τα processes, όταν είναι idle είναι μόνο μία. Με την top εμφανίζει μόνο μία... Τι να πω... Πάντως το όνομα της διεργασίας είναι qspeedtest και όχι ping. Επίσης το έχω ανοιχτό από τη στιγμή του τελευταίου μου ποστ, και με λύπη σου αναφέρω πως παρατηρώ memory leak τελικά. Αυτή τη στιγμή καταλαμβάνει 700MB!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Λοιπόν, με την htop με το που πατάω το start πολλαπλασιάζονται τα processes, όταν είναι idle είναι μόνο μία. Με την top εμφανίζει μόνο μία... Τι να πω... Πάντως το όνομα της διεργασίας είναι qspeedtest και όχι ping.

 

Ντροπή σου, και με τρόμαξες τσάμπα! :P

 

 

Επίσης το έχω ανοιχτό από τη στιγμή του τελευταίου μου ποστ, και με λύπη σου αναφέρω πως παρατηρώ memory leak τελικά. Αυτή τη στιγμή καταλαμβάνει 700MB!

 

Ναι, αν είδες στο προηγούμενο μήνυμά μου, μάλλον είναι bug του Qt framework, non-platform specific κατά τα φαινόμενα και δε γίνεται trigger πάντα (ο,τι χειρότερο για bug hunting).

 

 

Γιατι δε το γράφεις σε java να δεις άσπρη μέρα?

 

1. Java; Μπλιάχ! :P

2. Πρέπει να κάνω τρομακτικής έκτασης refresh γνώσεων + έξτρα διάβασμα για να κατορθώσω να κάνω port το QSpeedTest σε Java. Μετά, έχει ξεκινήσει ήδη ως C++ project στο Sourceforge, έχει ψιλοακουστεί ως όνομα προγράμματος στο Internet (π.χ. στην κόντρα για την 1η θέση στα αποτελέσματα του Google, εκτόπισε ήδη το μέχρι πρότινος #1 που ήταν ένα online speed test με το όνομα qSpeedtest Beta ή κάπως έτσι)

3. Βλ. 1! :lol:

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Νέα έκδοση r11 με σημαντικές αλλαγές, οι βασικότερες είναι η (ελπίζω οριστική αυτήν την φορά) διόρθωση του memory leak και trailing network usage καθώς και η προσθήκη ελέγχου+notification για νεότερες εκδόσεις του προγράμματος:

 

>
revision 11 - 20100525:
   * Notification when a new program version is available
   * Temporary workaround for upstream QTBUG-8914: replaced FTP
     download links with HTTP ones
   * Print group average packet loss and rank in HTML and vB code
   * Moved hardcoded download speed test targets to qspeedtest.ini
   * Updated embedded target list

 

https://sourceforge.net/projects/qspeedtest/files/

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ντροπή σου, και με τρόμαξες τσάμπα! :P

 

Ναι, αν είδες στο προηγούμενο μήνυμά μου, μάλλον είναι bug του Qt framework, non-platform specific κατά τα φαινόμενα και δε γίνεται trigger πάντα (ο,τι χειρότερο για bug hunting).

 

Ναι, my bad sorry...

 

Νέα έκδοση r11 με σημαντικές αλλαγές, οι βασικότερες είναι η (ελπίζω οριστική αυτήν την φορά) διόρθωση του memory leak και trailing network usage καθώς και η προσθήκη ελέγχου+notification για νεότερες εκδόσεις του προγράμματος.

 

To notification θα μας προτρέπει να κατεβάσουμε τη νέα έκδοση δηλαδή; Υπάρχει περίπτωση να γίνεται αυτόματα update χωρίς να πηγαίνουμε στη σελιδα;

Το memory leak φαίνεται να διορθώθηκε.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

To notification θα μας προτρέπει να κατεβάσουμε τη νέα έκδοση δηλαδή; Υπάρχει περίπτωση να γίνεται αυτόματα update χωρίς να πηγαίνουμε στη σελιδα;

 

Για αρχή, το πρώτο + άνοιγμα του default browser του συστήματος στη σελίδα με τα downloads, αν ο χρήστης απαντήσει καταφατικά σε σχετική ερώτηση.

 

Για αυτόματο, in-place update πρέπει να γίνουν αρκετές αλλαγές στο σχεδιασμό του προγράμματος. Μετατίθεται για το (όχι και πολύ προσεχές) μέλλον και πιθανόν να συνδυαστεί τότε και με χρήση κάποιου installer software όπως Inno Setup για τη Windows έκδοση.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Υλοποίηση ενός μικρού feature request + πιο αναλυτικό OS version detection σε Windows:

 

>
revision 13 - 20100525:                                             |
   * Fixed a small compiling error under non-Windows OS            |


revision 12 - 20100525:                                             |
   * Considerably more accurate OS version reporting under Windows |
   * A QSplitter widget between log console and results console    |
     that allows for vertical resizing of said consoles            |

 

https://sourceforge.net/projects/qspeedtest/files/

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Συγχαρητήρια για την εφαρμογή σου parfifal!

 

Την τρέχω σε Mac OS X 10.6.3 και τα αποτελέσματα είναι της μορφής:

 

>Greek servers                     Avg ping    Pckt loss          Jitter    Rank
-------------------------------------------------------------------------------
On Telecoms                            N/A      100.00%             N/A    N/A
Wind                                   N/A      100.00%             N/A    N/A
Cyta Hellas                            N/A      100.00%             N/A    N/A
Hellas Online                          N/A      100.00%             N/A    N/A
Vivodi                                 N/A      100.00%             N/A    N/A
Forthnet                               N/A      100.00%             N/A    N/A
Netone                                 N/A      100.00%             N/A    N/A
NTUA@GRNET                             N/A      100.00%             N/A    N/A
OTE                                    N/A      100.00%             N/A    N/A
Vodafone                               N/A      100.00%             N/A    N/A
Orange Business Hellas                 N/A      100.00%             N/A    N/A
Verizon Hellas                         N/A      100.00%             N/A    N/A
Group sum: N/A
Group average: N/A

 

Επίσης παρατηρώ το εξής:

 

>Host OS: uname: illegal option -- o 10.3.0 i386

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δεν έχω πρόσβαση δυστυχώς σε Mac σύστημα για να κάνω τις σχετικές αλλαγές και προσθήκες στον κώδικα, ώστε να λειτουργεί και σε Mac OS! Αν έπρεπε να μαντέψω για το 100% packet loss, θα έλεγα ότι είναι εικονικό και προκαλείται από μη σωστό χειρισμό του output που δίνει η εντολή ping σε Mac OS. Το ίδιο συμβαίνει και με το output της εντολής uname, όπως παρατήρησες κι εσύ, μόνο που εκεί δεν προσπαθώ καν να κάνω parsing της εξόδου της uname, απλά την παίρνω αυτούσια και την προβάλλω στο GUI, γι' αυτό και ήταν λίγο "embarrassing" το αποτέλεσμα! :o

 

 

Τώρα, για να μπούμε πιο βαθιά στον κώδικα:

Ο τρόπος που έχω επιλέξει για να εξασφαλίσω το..χμμμ...crossplatform-ness (σόρυ για τον αδόκιμο όρο) του κώδικα είναι πολύ απλοϊκός και συνίσταται σε χρήση preprocessor directives και ορισμένων Qt global definitions (όπως π.χ. το Q_WS_WIN για περιβάλλον Windows) για conditional compiling των σχετικών σημείων του κώδικα όπου ο εκάστοτε χειρισμός πρέπει να είναι διαφορετικός αναλόγως του λειτουργικού συστήματος. Π.χ. για την εκτέλεση της ping, χρησιμοποιώ την ping του συστήματος μέσω ενός QProcess object:

>
targetgroup.cpp:181

>
   QProcess pingProcess;
   QEventLoop loop;
#ifdef Q_WS_WIN
   QString pingCmd = QString("ping -n 1 -w %1 %2").arg(PINGTIMEOUT).arg(address);
   int skipLines = 3;
#else
   QString pingCmd = QString("ping -c 1 -W %1 %2").arg(PINGTIMEOUT / 1000).arg(address);
   int skipLines = 6;
#endif

και λίγο παρακάτω, το parsing γίνεται ως εξής:

>
#ifdef Q_WS_WIN
       if(!contents.contains(QString("=").toAscii()))
       {
           contents = pingProcess.readLine().trimmed();
       }
#endif
       if(contents.contains(QString("=").toAscii()))
       {
           rttString = contents;
           list = rttString.split("=");
#ifdef Q_WS_WIN
           rttString = list[2];
           rttString.chop(6);
#else
           list = QString(list[1]).split('/');
           rttString = list[0];
#endif
           addRtt(rttString.toDouble());
       }

 

Η παραπάνω λογική δουλεύει σωστά σε Windows και Linux-based συστήματα, σε Mac OS όμως δεν είχα την ευκαιρία να εξετάσω το output της εντολής ping και να αποφασίσω π.χ. κατάλληλη τιμή για τη μεταβλητή skipLines ή βάσει ποιου χαρακτήρα να κάνω tokenize τη γραμμή του output που ενδιαφέρει, ώστε να απομονώσω την τιμή σε msec του round-trip time [1]. Σε συνεργασία με κάποιον χρήστη Mac OS, τα παραπάνω μπορεί να λυθούν (πιθανότατα εύκολα) και να γίνουν οι κατάλληλες προσθήκες στον κώδικα. Τα αντίστοιχα ισχύουν και για την εντολή uname.

 

 

Επίσης, έχω απευθύνει ήδη πρόσκληση σε επίδοξους co-developers να συμμετάσχουν στο project. Ως project administrator στο SourceForge, μπορώ να κάνω add κι άλλα άτομα σε διάφορους ρόλους, εκ των οποίων ο βασικός (όσον αφορά τους developers) είναι η write πρόσβαση στο SVN repository και στο File Release System του SF.net για να ανεβάζουν binaries που έχουν κάνει build, π.χ. σε Mac που εγώ δε διαθέτω.

 

 

[1] Εδώ κανονικά θα ήταν πιο σωστό να υλοποιήσω μία δική μου ping method/function ή να χρησιμοποιήσω μία σχετική βιβλιοθήκη, αλλά σε Linux-based συστήματα (ίσως και γενικότερα Unix-οειδή) υπάρχει πρόβλημα δικαιωμάτων: για την αποστολή και παραλαβή ICMP datagrams απαιτούνται raw sockets, τα οποία χρειάζονται super-user δικαιώματα. Αυτός είναι και ο λόγος που η ping σε Linux τρέχει ως root μέσω setuid flag στο εκτελέσιμό της, οπότε βολεύει η κλήση της μέσω QProcess. Η εναλλακτική θα ήταν να θεωρείται ως απαίτηση η εκτέλεση του QSpeedTest με root privileges, κάτι όχι ιδιαίτερα ρεαλιστικό

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Super Moderators

στην latest version κατά την διάρκεια που γίνεται το bandwidth test νομίζω δεν μπορούμε να πατήσουμε STOP...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.


  • Δημιουργία νέου...