UDTFS -- A FUSE file system based on UDT4 Copyright (C) 2009 Jan Wagner, Metsahovi Radio Observatory, Aalto == License ======================= This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA == Requirements ================== UDT4 is included here together with the udtfs source code. FUSE kernel module and headers are required separately however: $ sudo aptitude install fuse-utils fuse-module libfuse2 libfuse-dev To compile udtfs programs: $ make $ sudo make install == Usage ========================= Share a directory: [oper@rk008665 ~]$ udtfs_server /backup/ UDTFS V1.0 - A file system based on FUSE and UDT4 (C) 2009 Jan Wagner, Metsahovi Radio Observatory, Aalto Licensed under GNU GPL v3 Config: 1500 MTU, UDT base port 9000, UDT ratelimit 1000 Mbps Sharing directory /backup Listening on port 1420 Mount it on a remote machine: oper@pertinax:~$ udtfs 193.204.89.194 /mnt/medicina/ -f == Demo ========================== Check what we got: oper@pertinax:~$ ll /mnt/medicina/ total 4 drwxr-xr-x 13 root root 4096 2009-11-23 10:39 . drwxr-xr-x 5 root root 4096 2009-11-26 13:25 .. drwx------ 27 root root 4096 2009-01-09 10:01 almamgr drwxr-xr-x 26 root root 4096 2009-05-05 11:54 as drwxr-xr-x 2 root root 4096 2009-11-27 12:22 eVLBI drwxr-xr-x 3 root root 4096 2009-01-30 13:46 ftp drwxrwxrwx 2 root root 4096 2009-09-08 08:45 itasel drwx------ 2 root root 16384 2008-10-22 14:29 lost+found drwxr-xr-x 22 root root 4096 2008-03-03 11:10 mark5 drwxr-xr-x 28 root root 4096 2009-03-09 16:00 medctl drwxr-xr-x 25 root root 4096 2009-10-28 11:27 medgate drwxr-xr-x 4 root root 4096 2009-05-28 07:41 pcfs drwx------ 4 root root 4096 2009-02-17 10:22 .Trash-0 oper@pertinax:~$ ll /mnt/medicina/eVLBI/ total 0 drwxr-xr-x 2 root root 4096 2009-11-27 12:22 . drwxr-xr-x 13 root root 4096 2009-11-23 10:39 .. -rw-rw-r-- 1 root root 7637076832 2009-11-26 12:31 v2611_mc_no0002 -rw-rw-r-- 1 root root 36438257072 2009-11-26 12:45 v2611_mc_no0003 -rw-rw-r-- 1 root root 8381403136 2009-11-27 11:16 v2611_mc_no0003.m5a -rw-rw-r-- 1 root root 7616392816 2009-11-26 12:52 v2611_mc_no0004 -rw-rw-r-- 1 root root 36417767752 2009-11-26 13:10 v2611_mc_no0005 -rw-rw-r-- 1 root root 11362684928 2009-11-27 12:28 v2611_mc_no0005.m5a -rw-rw-r-- 1 root root 7634974120 2009-11-26 13:17 v2611_mc_no0006 -rw-rw-r-- 1 root root 6780092416 2009-11-27 10:52 v2611_mc_no0007 Copy one scan: oper@pertinax:~$ cp /mnt/medicina/eVLBI/v2611_mc_no0003.m5a /raid/v2611/udtfs_test/ Progress on the server side: server_sendsegment: sent 32.00MB at 150.226696 Mbps server_sendsegment: sent 32.00MB at 653.779529 Mbps server_sendsegment: sent 32.00MB at 940.028992 Mbps server_sendsegment: sent 32.00MB at 646.145281 Mbps server_sendsegment: sent 32.00MB at 936.653477 Mbps server_sendsegment: sent 32.00MB at 631.904138 Mbps server_sendsegment: sent 32.00MB at 920.439950 Mbps server_sendsegment: sent 32.00MB at 628.408690 Mbps server_sendsegment: sent 32.00MB at 936.859002 Mbps server_sendsegment: sent 32.00MB at 635.649620 Mbps server_sendsegment: sent 32.00MB at 943.347501 Mbps server_sendsegment: sent 32.00MB at 645.679352 Mbps server_sendsegment: sent 32.00MB at 912.966909 Mbps server_sendsegment: sent 32.00MB at 632.559388 Mbps server_sendsegment: sent 32.00MB at 936.454947 Mbps server_sendsegment: sent 32.00MB at 622.301212 Mbps .... Does 'ls' work during a transfer? oper@pertinax:/usr/src/udtfs/udtfs$ ll /mnt/medicina/ total 4 drwxr-xr-x 13 root root 4096 2009-11-23 10:39 . drwxr-xr-x 5 root root 4096 2009-11-26 13:25 .. drwx------ 27 root root 4096 2009-01-09 10:01 almamgr drwxr-xr-x 26 root root 4096 2009-05-05 11:54 as drwxr-xr-x 2 root root 4096 2009-11-27 12:22 eVLBI drwxr-xr-x 3 root root 4096 2009-01-30 13:46 ftp drwxrwxrwx 2 root root 4096 2009-09-08 08:45 itasel drwx------ 2 root root 16384 2008-10-22 14:29 lost+found drwxr-xr-x 22 root root 4096 2008-03-03 11:10 mark5 drwxr-xr-x 28 root root 4096 2009-03-09 16:00 medctl drwxr-xr-x 25 root root 4096 2009-10-28 11:27 medgate drwxr-xr-x 4 root root 4096 2009-05-28 07:41 pcfs drwx------ 4 root root 4096 2009-02-17 10:22 .Trash-0 (yes but it has some rather long delay! 2-3 seconds) How is the 'dd' copying rate? oper@pertinax:~$ dd if=/mnt/medicina/eVLBI/v2611_mc_no0003.m5a of=/raid/v2611/udtfs_test/v2611_mc_no0003.m5a bs=1M oper@pertinax:/usr/src/udtfs/udtfs$ killall -s USR1 dd 908+0 records in 907+0 records out 3804233728 bytes (3.8 GB) copied, 111.63 s, 34.1 MB/s Hmm not that good, about 270 Mbps. At the moment Tsunami is about twice of that and UDT::sendfile() directly is about as fast, a little faster. So we have a lot of copying overhead and double-buffering with UDT prefetch in the background could help a lot! It should double the rate. Finally checking the md5sum oper@pertinax:/usr/src/udtfs/udtfs$ fusermount -u /mnt/medicina/ [oper@rk008665 eVLBI]$ md5sum v2611_mc_no0003.m5a v2611_mc_no0005.m5a e64fa2cc4c9333c384428688a928cc3e v2611_mc_no0003.m5a 2eb943038f40092ce61f07b310a13247 v2611_mc_no0005.m5a oper@pertinax:/raid/v2611/udtfs_test$ md5sum v2611_mc_no0003.m5a e64fa2cc4c9333c384428688a928cc3e v2611_mc_no0003.m5a So the transfer was successful without corruption!