Andreas Dilger wrote:
On May 15, 2007  13:03 -0400, pauln wrote:
I've attached a spreadsheet containing data from a lustre create test which I ran some time ago. The purpose of the test was to determine how different hardware configs affected create performance. As you'll see from the data, the ost is actually the slowest component in the create chain. I tested several OST and MDS configs and found that every disk-based OST configuration was susceptible to lengthy operation times interspersed throughout the test. This periodic slowness was correlated with disk activity on the OST - at the time I suspected that the activity was on behalf of the journal. Moving the entire OST onto a ramdisk increased the performance substantially.

Paul,
what version of Lustre were you testing?  How large are the ext3 inodes on
the OSTs (can be seen with "dumpe2fs -h /dev/{ostdev}")?  What is the
default stripe count?

If you are running 1.4.6 and the ext3 inode size is 128 bytes then there
can be a significant performance hit due to extra metadata being stored
on the OSTs.  This is not an issue with filesystems using a newer Lustre.

The lustre version was 1.4.6.1 (rhel kernel 2.6.9-34). I used the default inode size and only had 1 OST. Can you briefly describe the problems with 128 byte inodes and suggest a more optimal size?
thanks,
paul
What I did not try was moving only the journal into a ramdisk.. it's possible that this will decrease the frequency of the OST's slow operations. If that is the case, you may be able to increase your create performance by purchasing a solid-state device for your ost journals. There are also some numbers for IB (openibnld) included in the spreadsheet. I found that using IB lowered the operation time from 100 - 200 usecs. So it's true that switching to IB will speed things up.

I've also attached the raw data from Test1 (config1 and config13). Each line of raw data is the operation latency in seconds, operation number == line number.
paul


Daniel Leaberry wrote:
I've closely followed the metadata mailing list posts over the last year. We've been running our small filesystem for a couple of months in semi-production mode. We don't have a traditional HPC workload (it's big image files with 5-10 small xml files) and we knew that lustre didn't excel at small files.

I ordered the beefiest MDS I could (quad proc dual core opterons with 16GB ram) and put it on the fastest array I could (14 drive raid 10 with 15k rpm disks). Still, as always, I'm wondering if I can do better.

Everything runs over tcp/ip with no jumbo frames. My standard test is to simply track how many opens we do every 10 seconds. I run the following command and keep track of the results. We never really exceed ~2000 opens/second. Our workload often involves downloading ~50000 small (4-10k) xml files as fast as possible.

I'm just interested in what other lustre gurus have to say about my results. I've tested different lru_size amounts (makes little difference) and portals debug is off. My understanding is that the biggest performance increase I would see is moving to infiniband instead of tcp interconnects.

Thanks,
[EMAIL PROTECTED] lustre]# echo 0 > /proc/fs/lustre/mds/lustre1-MDT0000/stats; sleep 10; cat /proc/fs/lustre/mds/lustre1-MDT0000/stats
snapshot_time             1179180513.905326 secs.usecs
open                      14948 samples [reqs]
close                     7456 samples [reqs]
mknod                     0 samples [reqs]
link                      0 samples [reqs]
unlink                    110 samples [reqs]
mkdir                     0 samples [reqs]
rmdir                     0 samples [reqs]
rename                    99 samples [reqs]
getxattr                  0 samples [reqs]
setxattr                  0 samples [reqs]
iocontrol                 0 samples [reqs]
get_info                  0 samples [reqs]
set_info_async            0 samples [reqs]
attach                    0 samples [reqs]
detach                    0 samples [reqs]
setup                     0 samples [reqs]
precleanup                0 samples [reqs]
cleanup                   0 samples [reqs]
process_config            0 samples [reqs]
postrecov                 0 samples [reqs]
add_conn                  0 samples [reqs]
del_conn                  0 samples [reqs]
connect                   0 samples [reqs]
reconnect                 0 samples [reqs]
disconnect                0 samples [reqs]
statfs                    27 samples [reqs]
statfs_async              0 samples [reqs]
packmd                    0 samples [reqs]
unpackmd                  0 samples [reqs]
checkmd                   0 samples [reqs]
preallocate               0 samples [reqs]
create                    0 samples [reqs]
destroy                   0 samples [reqs]
setattr                   389 samples [reqs]
setattr_async             0 samples [reqs]
getattr                   3467 samples [reqs]
getattr_async             0 samples [reqs]
brw                       0 samples [reqs]
brw_async                 0 samples [reqs]
prep_async_page           0 samples [reqs]
queue_async_io            0 samples [reqs]
queue_group_io            0 samples [reqs]
trigger_group_io          0 samples [reqs]
set_async_flags           0 samples [reqs]
teardown_async_page       0 samples [reqs]
merge_lvb                 0 samples [reqs]
adjust_kms                0 samples [reqs]
punch                     0 samples [reqs]
sync                      0 samples [reqs]
migrate                   0 samples [reqs]
copy                      0 samples [reqs]
iterate                   0 samples [reqs]
preprw                    0 samples [reqs]
commitrw                  0 samples [reqs]
enqueue                   0 samples [reqs]
match                     0 samples [reqs]
change_cbdata             0 samples [reqs]
cancel                    0 samples [reqs]
cancel_unused             0 samples [reqs]
join_lru                  0 samples [reqs]
init_export               0 samples [reqs]
destroy_export            0 samples [reqs]
extent_calc               0 samples [reqs]
llog_init                 0 samples [reqs]
llog_finish               0 samples [reqs]
pin                       0 samples [reqs]
unpin                     0 samples [reqs]
import_event              0 samples [reqs]
notify                    0 samples [reqs]
health_check              0 samples [reqs]
quotacheck                0 samples [reqs]
quotactl                  0 samples [reqs]
ping                      0 samples [reqs]






_______________________________________________
Lustre-discuss mailing list
[email protected]
https://mail.clusterfs.com/mailman/listinfo/lustre-discuss


Cheers, Andreas
--
Andreas Dilger
Principal Software Engineer
Cluster File Systems, Inc.

_______________________________________________
Lustre-discuss mailing list
[email protected]
https://mail.clusterfs.com/mailman/listinfo/lustre-discuss

_______________________________________________
Lustre-discuss mailing list
[email protected]
https://mail.clusterfs.com/mailman/listinfo/lustre-discuss

Reply via email to