Boost.Asio & SSL - irrer Speicherverbrauch (unter Windows)
-
Verwendet irgendjemand die Boost.Asio mit SSL unter Windows?
Ich bin grad dabei eine Serverapplikation zu stricken, und ich bin ansatzweise schockiert. Der Server braucht ~~700kB pro Connection! WTF?!?
Blöderweise soll das Ding (der Server) aber mit massiven Connection-Zahlen klarkommen. ~700kB pro Connection *nur für SSL* sind dabei eindeutig zuviel.
Verwendet hab ich dazu die Boost 1.38.0 und die OpenSSL 0.9.8k (die 1.0.0 Beta hab ich auch probiert).
Was SSL angeht hab' ich EC sowie RSA Zertifikate probiert, mit SHA1 und SHA256, macht alles keinen Unterschied.Dass man für SSL (in diesem Fall die OpenSSL) diverse Puffer braucht ist mir klar. Dass der Layer, der die Asio mit der OpenSSL zusammenknotet, diese Puffer nochmal hat, ist mir auch klar. In Summe sollte das aber alles *deutlich* weniger als 100K pro Connection ausmachen.
Wie gesagt, ich habe alle möglichen Varianten probiert um die OpenSSL zu konfigurieren. Verschiedene Zertifikate, verschiedene Cipher, verschiedene HMACs. Alles egal. Wenn ich der OpenSSL die Send-Puffer kürze macht das auch kaum was aus.
Also, die Frage(n): Hat jmd. von euch schon Erfahrungen mit Boost.Asio und deren SSL Streams? Wenn ja, konnte irgendwer den Speicherverbrauch pro Connection auf einen vernünftigen Wert bringen? Und wenn ja natürlich ... WIE?
----
Im schlimmsten Fall muss ich den Secure-Layer halt selbst stricken, aber ich wollte eigentlich auf SSL zurückgreifen, weil halt "tried and true" und blah.
Und falls jmd. meint den Speicher-Overhead erzeugt ich selbst: mein Test ist ein sehr simpler Echo-Server (Zeilenbasiert). Und ich habe ihn natürlich probehalber mal ohne SSL laufen lassen. Ohne SSL komme ich auf ca. 6kB pro Connection. Daran kanns also auch nicht liegen.
-
Also 700k kommen mir etwas komisch vor.
Bei mir liegen normale (async) TCP-Verbindungen so bei ca. 10k pro Verbindung. Bei SSL-Benutzung steigt der Verbrauch auf ca. 60k an.
Die Boost-Version war 1.37.0
Bei open-SSL bin ich mir nicht sicher, da der Kram bei mir zuhause auf der Kiste schlummert, und ich da von hier nicht ran komme.PS: Das hilft Dir zwar leider nicht direkt weiter, aber zumidest gibt es einen Hinweis darauf, dass doch noch irgendwo ein Wurm bei Dir drin sein könnte.
-
Probier doch mal gegen die 1.37 zu linken ob das Problem da dann auch auftritt :). Wenn nein, liegts an 1.38, wenn ja, dann könnte es evtl doch an deinem Code liegen :). (Wobei ich da für ASIO und SSL wirklich kein Spezialist bin)
rya.
-
Tachyon schrieb:
Also 700k kommen mir etwas komisch vor.
Mir auch

Bei mir liegen normale (async) TCP-Verbindungen so bei ca. 10k pro Verbindung. Bei SSL-Benutzung steigt der Verbrauch auf ca. 60k an.
Jo, 50K mehr ist auch das was ich in anderen Threads in diversen Foren gelesen habe, und deckt sich inetwa mit meinen Erwartungen (3 Stück 16k Puffer + bissi was zusätzlich).
Die Boost-Version war 1.37.0
Das werde ich noch probieren, ja.
PS: Das hilft Dir zwar leider nicht direkt weiter, aber zumidest gibt es einen Hinweis darauf, dass doch noch irgendwo ein Wurm bei Dir drin sein könnte.
Das hilft mir schon, wenn es wirklich an 1.37.0 vs. 1.38.0 liegt.
BTW: Wenn du die Asio mit SSL verwendest, solltest du u.U. das in deiner Boost Kopie fixen: https://svn.boost.org/trac/boost/ticket/2910
(Ticket ist von mir)
-
Hm, in der Tat komisch. Zeig doch mal deinen Code.
Oder ist es das ASIO Beispiel zu OSSL? Wenn nicht, wie verhält sich das?Und im Releasemodus bist du wohl auch schon

-
Jo, bin im Release Mode. Türlich

Im Debug Mode ist der Speicherverbrauch aber genau gleich.Das Sample isses nicht, nein. Code ist zu gross um herzuzeigen, und hat dependencies auf firmeninterne Libraries drinnen die ich erst entfernen müsste.
Hatte heute leider was anderes zu tun, und bin bis 16. April in Urlaub. Melde mich dann aber vermutlich wieder. (Könnte aber auch passieren dass ich nach dem Urlaub beschliesse den Hut drauf zu werfen, und gleich den Secure Layer selbst stricke.)
-
Hihi.
Wie peinlich.
Das kommt davon, wenn man die OpenSSL mit "enable-zlib" baut
Ohne zlib bin ich auf ~90-100K pro Connection herunten. IMO immernoch mehr als es sein dürfte (man liest im Netz immer wieder von ~50K).
Ich denke ich werde den Security Layer doch selbst implementieren. Aber wenigstens weiss ich nu wo der komplett irre Speicherverbrauch hergekommen ist.