darkone
12-31-2003, 04:25 AM
Developement 2002-2003:
ioFTPD project begun on april 2002. I was told, that there is a need for a daemon that could provide gl-like features on windows. I took the challenge alone, as I was eager to learn writing Win32 native code. I had no idea how large project would grow, and how different efficient win32 code is.
Because I lacked prior experience of threading, my first task was to learn primitive use of threads. I chose to use bsd-style sockets for portability, ansi functions, and easy thread-per-client model. Within few weeks, alpha version was ready. It wasn't what I hoped it to be; daemon maxxed 28mb/sec on local transfers - and with dozen of users downloading, it used enormous amount of cpu on lousy 100mbit connection. Idea of writing portable code, had to be buried.
(#ioftpd ~10users, 50kb of code)
For next couple of months I worked on beta1. Beta1 was fully functional daemon, and instead of bsd-style select() it
used non-blocking sockets with event notification. Threading model did not change. Performance for single transfer was somewhat better, but it still wasn't able to serve more than dozen of users. I wasn't satfisfied with it.
(#ioftpd ~30users, ~100kb of code)
Beta2-4 were steps closer to windows native daemon: Memory handling and file io were changed to Win32 API calls. Performance, features
and stability were constantly improved. I spent much time helping out new scripters, learning win32 api commands,
studying new search algorithms and possible threading models. Daemon was nearly fully functional.
(#ioftpd ~100users, ~300kb of code)
Beta4.5 was a giant leap forward. It actually should have been more beta5, or ioFTPD v2. It no longer used inefficient thread per client model. New improved core, was able to handle io for 31 clients per thread, and jobs were performed using worker threads. Single transfer performance remained same, while it was able to server more clients with much improved performance. Beta4.5 was tested with 100clients online, and it peaked over 45mb/sec.
(#ioftpd ~200users, ~800kb of code)
Beta5 is what I first imagined ioFTPD to be. It provides superior performance and scalability on win32 and is more extendable than glftpd. In terms of performance (~80mb/sec) and scalability (1000clients, hundreds of clients per thread), it has very little room for improvements.
(#ioftpd +250users, ~1.1mb of code)
2004?
In the future, focus will be on making suitable for non-warez usage. Following goals are set for 2004:
- Fibers (done)
- Being able to install daemon as service (soon to be)
- Active directory support
- Web administration (documentating work for php developer)
- Unicode (UTC + UTF)
- Ipv6
Thanks?
Once again, I'd like to thank those who have registered. If there weren't you, I doubt there was io either.
Special thanks:
Linkster (web hosting)
ZeroRacer (documentation)
Mouton (www)
Tuff (botnet)
Addict (iogui)
ps. I didn't have time to check grammar.. ;p
ioFTPD project begun on april 2002. I was told, that there is a need for a daemon that could provide gl-like features on windows. I took the challenge alone, as I was eager to learn writing Win32 native code. I had no idea how large project would grow, and how different efficient win32 code is.
Because I lacked prior experience of threading, my first task was to learn primitive use of threads. I chose to use bsd-style sockets for portability, ansi functions, and easy thread-per-client model. Within few weeks, alpha version was ready. It wasn't what I hoped it to be; daemon maxxed 28mb/sec on local transfers - and with dozen of users downloading, it used enormous amount of cpu on lousy 100mbit connection. Idea of writing portable code, had to be buried.
(#ioftpd ~10users, 50kb of code)
For next couple of months I worked on beta1. Beta1 was fully functional daemon, and instead of bsd-style select() it
used non-blocking sockets with event notification. Threading model did not change. Performance for single transfer was somewhat better, but it still wasn't able to serve more than dozen of users. I wasn't satfisfied with it.
(#ioftpd ~30users, ~100kb of code)
Beta2-4 were steps closer to windows native daemon: Memory handling and file io were changed to Win32 API calls. Performance, features
and stability were constantly improved. I spent much time helping out new scripters, learning win32 api commands,
studying new search algorithms and possible threading models. Daemon was nearly fully functional.
(#ioftpd ~100users, ~300kb of code)
Beta4.5 was a giant leap forward. It actually should have been more beta5, or ioFTPD v2. It no longer used inefficient thread per client model. New improved core, was able to handle io for 31 clients per thread, and jobs were performed using worker threads. Single transfer performance remained same, while it was able to server more clients with much improved performance. Beta4.5 was tested with 100clients online, and it peaked over 45mb/sec.
(#ioftpd ~200users, ~800kb of code)
Beta5 is what I first imagined ioFTPD to be. It provides superior performance and scalability on win32 and is more extendable than glftpd. In terms of performance (~80mb/sec) and scalability (1000clients, hundreds of clients per thread), it has very little room for improvements.
(#ioftpd +250users, ~1.1mb of code)
2004?
In the future, focus will be on making suitable for non-warez usage. Following goals are set for 2004:
- Fibers (done)
- Being able to install daemon as service (soon to be)
- Active directory support
- Web administration (documentating work for php developer)
- Unicode (UTC + UTF)
- Ipv6
Thanks?
Once again, I'd like to thank those who have registered. If there weren't you, I doubt there was io either.
Special thanks:
Linkster (web hosting)
ZeroRacer (documentation)
Mouton (www)
Tuff (botnet)
Addict (iogui)
ps. I didn't have time to check grammar.. ;p