Performance and Efficiency Improvements in Seafile 3.1

| Comments

I have been using Seafile for my synchronization, backup, and storage needs for more than a year. The near real-time backups of my data that Seafile provides me with have saved me a lot of time on several occasions, and having nearly 100% of my data available and up to date on both my laptop and desktop computers has made traveling for long periods of time much more pleasant.

Bandwidth usage is a little high after recreating my libraries

When I adopted Seafile, it was probably the only Open Source Dropbox-like software available that had enough scalability to meet my requirements. The other Open Source cloud storage platforms have made big strides in this area over the past year, but it looks like Seafile has made a significant leap of their own with regards to synchronization speed and scalability.

Upgrading my old Seafile 2.0 libraries

Seafile 3.1 has improved performance in many areas, but you’ll only see those improvements if your files are stored in the new Seafile 3.0 or newer library format. Most of my libraries were created with Seafile 2.0, so I had to do some leg-work if I wanted to see the maximum benefit from my upgrade to Seafile 3.1.

There is no option to convert an old library to the new format. I don’t know if there is an official “best practice” for updating your libraries. This is what I did for each library.

  • Unsync the library on all my computers
  • Rename the library on the server by prepending 2.0 to the name
  • Create a new encrypted library on my desktop computer
  • Add the new library to my laptop

For most of the libraries, I used the “sync with existing folder” option on my laptop. That way it wouldn’t have to download the files all over again. I did choose to download a few of my libraries from scratch to test the performance.

Bandwidth utilization while uploading a new library to Seafile

Seafile had no trouble utilizing my entire 75-megabit FiOS upload limit, and it had no trouble maxing out my laptop’s Wi-Fi connection. I remember doing these same uploads over a year ago. The Seafile client would max out my Internet connection for a little while, then it would idle for almost as long, and it would repeat that several times before the upload would complete. Those idle periods are much smaller with Seafile 3.1. They’re short enough that you’ll miss them on the bandwidth meter if you blink.

The uploading of large directories has also been drastically improved. If you had a 30-GB directory, the older versions of Seafile would copy all of that data to another location on your local machine before uploading it to the server. This was almost problematic for me when I only had a 80-GB solid-state drive. Also, none of your data would be available for syncing to other machines until the entire library was uploaded.

Seafile 3.1 has eliminated this issue. It now uploads your new libraries in smaller 100 MB chunks. Each of those chunks of data is available right away, and it looks like other clients can sync with the library before the upload is complete. This is a huge improvement.

Syncing directories with rapidly changing files

There is a heading in the Seafile 3.1 release notes that reads “Efficient File Change Detection for Large Libraries,” and I’m very excited about this particular improvement. I have several problematic directories that I synchronize to my Seafile server. These directories have been problematic because they have rapidly updating files.

One of them is my Pidgin directory. Pidgin generates log files for every conversation and chat room, and I idle in quite a few IRC channels. I tried to sync this directory with Seafile 2.0, but every time a log file got updated, Seafile would scan every file for changes. This was very inefficient, and it generated a lot of I/O and CPU overhead.

I had some manual workarounds in place to get around this issue. I had things set up so that Seafile would only sync my .purple and .config directories once every few hours. Since the Seafile release notes talked about improvements in this area, I decided to eliminate those workarounds and sync these directories in real time.

This change has been working out well so far. Seafile has been syncing these busy directories for a few days now without being a noticeable drain on resources. I’m one step closer to the dream of being able to sync up my entire home directory!

Other improvements to syncing

My laptop has been a nuisance ever since I downgraded it from a solid-state drive back to its original 7200 RPM disk. I have it aggressively starting quite a few services during its boot process, and it also logs me right in and launches a handful of programs. With the SSD, this didn’t slow the machine down and saved me some time and effort. With the spinning disk, the laptop doesn’t get to a usable state until after X server has been up for almost an entire minute.

One of the issues here was Seafile. When Seafile fires up, it scans through all of your libraries looking for anything that might have changed since it was shut down. I have tens of thousands of files that need to be checked, and that takes some time and generates quite a few I/O operations.

This seems to have been streamlined quite a bit in Seafile 3.1. My laptop is now ready and responsive immediately after my Pidgin and web browser windows pop up. This is another big improvement for me.

Conclusion

Seafile has served me well. It has always performed well enough for my needs, and it hasn’t lost any of my data. Even so, the performance improvements offered by Seafile 3.1 make for an excellent upgrade, and upgrading my deprecated libraries was well worth the small effort.

Are you using Seafile? Are you using another cloud storage or synchronization solution? Leave a comment and tell us how it is working out for you!

Comments