* [linux-lvm] Allocation Policy for Cloud Computing needed @ 2012-02-16 13:50 Sebastian Riemer 2012-02-16 14:41 ` James Hawtin 2012-02-20 21:59 ` Lars Ellenberg 0 siblings, 2 replies; 7+ messages in thread From: Sebastian Riemer @ 2012-02-16 13:50 UTC (permalink / raw) To: linux-lvm Hi LVM list, I'm experimenting with storage for many QEMU/KVM virtual machines in cloud computing. I've got many concurrent IO processes and 24 hard drives. I've tested the scalability with a single IO reader process per hard drive. Single drives scale best and have the best performance of cause, but we need mirroring and volume management. So I've created MD RAID-1 arrays and created on each a VG and two LVs. This gives me good overall performance (up to 2 GB/s, HBA limit: 2.2 GB/s). Then, I've tested to put all my RAID-1 arrays into a single VG, because LV size should be adjustable over all hard drives. I've tried all allocation policies but none does what I want to achieve here. Yeah, that this isn't implemented fully is in the man page, ... . I want to have an allocation which distributes the LVs equally over the PVs as long as space is left and LVs aren't resized. The goal is to minimize the number of concurrent IO processes per hard drive (striping is total crap in this situation). I've tested LVM2 2.02.66 and kernel 3.0.15. Is something like that implemented in newer releases or is something like that intended to be implemented in near future? Or does someone want to implement this together with me? Thanks, cheers, Sebastian -- Sebastian Riemer Linux Kernel Developer ProfitBricks GmbH Greifswalder Str. 207 10405 Berlin, Germany Tel.: +49 - 30 - 60 98 56 991 - 303 Fax: +49 - 30 - 51 64 09 22 Email: sebastian.riemer@profitbricks.com Web: http://www.profitbricks.com/ RG: Amtsgericht Charlottenburg, HRB 125506 B GF: Andreas Gauger, Achim Weiss ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [linux-lvm] Allocation Policy for Cloud Computing needed 2012-02-16 13:50 [linux-lvm] Allocation Policy for Cloud Computing needed Sebastian Riemer @ 2012-02-16 14:41 ` James Hawtin 2012-02-16 15:27 ` Sebastian Riemer 2012-02-20 21:59 ` Lars Ellenberg 1 sibling, 1 reply; 7+ messages in thread From: James Hawtin @ 2012-02-16 14:41 UTC (permalink / raw) To: LVM general discussion and development Sebastian Riemer wrote: > Hi LVM list, > > I'm experimenting with storage for many QEMU/KVM virtual machines in > cloud computing. I've got many concurrent IO processes and 24 hard > drives. I've tested the scalability with a single IO reader process per > hard drive. Single drives scale best and have the best performance of > cause, but we need mirroring and volume management. So I've created MD > RAID-1 arrays and created on each a VG and two LVs. This gives me good > overall performance (up to 2 GB/s, HBA limit: 2.2 GB/s). > > Then, I've tested to put all my RAID-1 arrays into a single VG, because > LV size should be adjustable over all hard drives. I've tried all > allocation policies but none does what I want to achieve here. Yeah, > that this isn't implemented fully is in the man page, ... . > > I want to have an allocation which distributes the LVs equally over the > PVs as long as space is left and LVs aren't resized. The goal is to > minimize the number of concurrent IO processes per hard drive (striping > is total crap in this situation). > > I've tested LVM2 2.02.66 and kernel 3.0.15. Is something like that > implemented in newer releases or is something like that intended to be > implemented in near future? Or does someone want to implement this > together with me? > > Thanks, cheers, > > Sebastian > > I wrote a script to do this, with LVM 1 that just extended the lv in chunks over a range of PVs until it was full. while it worked on LVM it produced lots of backups in /etc. I felt with the LVM stripe function that this was not necessary, and could acheive the same thing by using large stripe size, as LVM allows concats of different stripeness it was not a problem extending the lv. James. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [linux-lvm] Allocation Policy for Cloud Computing needed 2012-02-16 14:41 ` James Hawtin @ 2012-02-16 15:27 ` Sebastian Riemer 0 siblings, 0 replies; 7+ messages in thread From: Sebastian Riemer @ 2012-02-16 15:27 UTC (permalink / raw) To: James Hawtin; +Cc: LVM general discussion and development Hi James, thank you for your idea, but this is exactly what I don't want. I want to have the LV completely on one PD if possible (but not all on the first). Only if the customer requests more than the capacity of a single hard drive I would provide striping, but only on that volume. If all customers can access all hard drives at the same time this results into very slow random IO. I've seen that on SW RAID-10. All the rw-heads need to be repositioned over and over again. Cheers, Sebastian On 16/02/12 15:41, James Hawtin wrote: > I wrote a script to do this, with LVM 1 that just extended the lv in > chunks over a range of PVs until it was full. while it worked on LVM > it produced lots of backups in /etc. I felt with the LVM stripe > function that this was not necessary, and could acheive the same > thing by using large stripe size, as LVM allows concats of different > stripeness it was not a problem extending the lv. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [linux-lvm] Allocation Policy for Cloud Computing needed 2012-02-16 13:50 [linux-lvm] Allocation Policy for Cloud Computing needed Sebastian Riemer 2012-02-16 14:41 ` James Hawtin @ 2012-02-20 21:59 ` Lars Ellenberg 2012-02-20 22:41 ` Ray Morris 2012-02-21 9:34 ` Sebastian Riemer 1 sibling, 2 replies; 7+ messages in thread From: Lars Ellenberg @ 2012-02-20 21:59 UTC (permalink / raw) To: linux-lvm On Thu, Feb 16, 2012 at 02:50:07PM +0100, Sebastian Riemer wrote: > Hi LVM list, > > I'm experimenting with storage for many QEMU/KVM virtual machines in > cloud computing. I've got many concurrent IO processes and 24 hard > drives. I've tested the scalability with a single IO reader process per > hard drive. Single drives scale best and have the best performance of > cause, but we need mirroring and volume management. So I've created MD > RAID-1 arrays and created on each a VG and two LVs. This gives me good > overall performance (up to 2 GB/s, HBA limit: 2.2 GB/s). > > Then, I've tested to put all my RAID-1 arrays into a single VG, because > LV size should be adjustable over all hard drives. I've tried all > allocation policies but none does what I want to achieve here. Yeah, > that this isn't implemented fully is in the man page, ... . > > I want to have an allocation which distributes the LVs equally over the > PVs as long as space is left and LVs aren't resized. The goal is to > minimize the number of concurrent IO processes per hard drive (striping > is total crap in this situation). > > I've tested LVM2 2.02.66 and kernel 3.0.15. Is something like that > implemented in newer releases or is something like that intended to be > implemented in near future? I don't know. Does not look like it, though. > Or does someone want to implement this together with me? I would certainly be here for discussions. Though, as you always will be more flexible with scripts than with pre-implemented fixed algorithms, I probably would first check if I can solve it with some scripting. [completely untested, but you get the idea] #!/bin/bash export LANG=C LC_ALL=C name=$1 vg=$2 size_in_MiB=$3 PVS=$(vgs --nohead --unit m -o pv_name,pv_free -O -pv_free,pv_name $vg | awk -v need=$size_in_MiB '{ print $1; sum += $2; if (sum >= need) exit; }') lvcreate -n $name -L ${size_in_MiB}m $vg $PVS (similar for lvextend) Which basically implements this allocation policy: use the pvs with most free space available, and no more than necessary. If I understand you correctly, that would almost do what you asked for. You can get pretty complex in similar scripts, if you really want to... consider using pvs -o vg_name,lv_name,pv_name,pvseg_start,pvseg_size,seg_pe_ranges and explicitly listing not only the PVS, but even the PE ranges to your lvcreate commands... Lars -- : Lars Ellenberg : LINBIT | Your Way to High Availability : DRBD/HA support and consulting http://www.linbit.com ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [linux-lvm] Allocation Policy for Cloud Computing needed 2012-02-20 21:59 ` Lars Ellenberg @ 2012-02-20 22:41 ` Ray Morris 2012-02-21 9:48 ` Sebastian Riemer 2012-02-21 9:34 ` Sebastian Riemer 1 sibling, 1 reply; 7+ messages in thread From: Ray Morris @ 2012-02-20 22:41 UTC (permalink / raw) To: LVM general discussion and development > > Then, I've tested to put all my RAID-1 arrays into a single VG, > > because LV size should be adjustable over all hard drives. ... > > I want to have an allocation which distributes the LVs equally over > > the PVs as long as space is left and LVs aren't resized. Since you're using RAID anyway, consider testing RAID 10, which will distribute IO across spindles. > You can get pretty complex in similar scripts, if you really want > to... consider using > pvs -o vg_name,lv_name,pv_name,pvseg_start,pvseg_size,seg_pe_ranges > and explicitly listing not only the PVS, but even the PE ranges to > your lvcreate commands... For scripting, see Linux::LVM on CPAN. It gives you that information as a nice data structure. I welcome feature requests and patches. (Linux::LVM::Do coming soon for modifying rather than just querying LVM objects.) -- Ray Morris support@bettercgi.com Strongbox - The next generation in site security: http://www.bettercgi.com/strongbox/ Throttlebox - Intelligent Bandwidth Control http://www.bettercgi.com/throttlebox/ Strongbox / Throttlebox affiliate program: http://www.bettercgi.com/affiliates/user/register.php On Mon, 20 Feb 2012 22:59:11 +0100 Lars Ellenberg <lars.ellenberg@linbit.com> wrote: > On Thu, Feb 16, 2012 at 02:50:07PM +0100, Sebastian Riemer wrote: > > Hi LVM list, > > > > I'm experimenting with storage for many QEMU/KVM virtual machines in > > cloud computing. I've got many concurrent IO processes and 24 hard > > drives. I've tested the scalability with a single IO reader process > > per hard drive. Single drives scale best and have the best > > performance of cause, but we need mirroring and volume management. > > So I've created MD RAID-1 arrays and created on each a VG and two > > LVs. This gives me good overall performance (up to 2 GB/s, HBA > > limit: 2.2 GB/s). > > > > Then, I've tested to put all my RAID-1 arrays into a single VG, > > because LV size should be adjustable over all hard drives. I've > > tried all allocation policies but none does what I want to achieve > > here. Yeah, that this isn't implemented fully is in the man > > page, ... . > > > > I want to have an allocation which distributes the LVs equally over > > the PVs as long as space is left and LVs aren't resized. The goal > > is to minimize the number of concurrent IO processes per hard drive > > (striping is total crap in this situation). > > > > I've tested LVM2 2.02.66 and kernel 3.0.15. Is something like that > > implemented in newer releases or is something like that intended to > > be implemented in near future? > > I don't know. Does not look like it, though. > > > Or does someone want to implement this together with me? > > I would certainly be here for discussions. > > Though, as you always will be more flexible with scripts than with > pre-implemented fixed algorithms, I probably would first check if I > can solve it with some scripting. > [completely untested, but you get the idea] > > #!/bin/bash > export LANG=C LC_ALL=C > name=$1 vg=$2 size_in_MiB=$3 > PVS=$(vgs --nohead --unit m -o pv_name,pv_free -O -pv_free,pv_name > $vg | awk -v need=$size_in_MiB '{ print $1; sum += $2; > if (sum >= need) exit; }') > lvcreate -n $name -L ${size_in_MiB}m $vg $PVS > > (similar for lvextend) > > Which basically implements this allocation policy: > use the pvs with most free space available, > and no more than necessary. > > If I understand you correctly, that would almost do what you asked > for. > > You can get pretty complex in similar scripts, if you really want > to... consider using > pvs -o vg_name,lv_name,pv_name,pvseg_start,pvseg_size,seg_pe_ranges > and explicitly listing not only the PVS, but even the PE ranges to > your lvcreate commands... > > Lars > ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [linux-lvm] Allocation Policy for Cloud Computing needed 2012-02-20 22:41 ` Ray Morris @ 2012-02-21 9:48 ` Sebastian Riemer 0 siblings, 0 replies; 7+ messages in thread From: Sebastian Riemer @ 2012-02-21 9:48 UTC (permalink / raw) To: LVM general discussion and development On 20/02/12 23:41, Ray Morris wrote: > Since you're using RAID anyway, consider testing RAID 10, which will > distribute IO across spindles. I've already tested RAID-10 with MD as well as letting LVM do the striping. This is total equal: There are too many IO processes on all spindles for good performance. All r/w-heads in RAID-10 have to be repositioned over and over again. Even in random IO this only reads from a single spindle per RAID-1 array. Without striping MD RAID-1 has a good read balancing algorithm. With that I can read from both spindles in the RAID-1 array simultaneously. > For scripting, see Linux::LVM on CPAN. It gives you that information > as a nice data structure. I welcome feature requests and patches. > (Linux::LVM::Do coming soon for modifying rather than just querying > LVM objects.) Thanks, I'll look at that. Cheers, Sebastian ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [linux-lvm] Allocation Policy for Cloud Computing needed 2012-02-20 21:59 ` Lars Ellenberg 2012-02-20 22:41 ` Ray Morris @ 2012-02-21 9:34 ` Sebastian Riemer 1 sibling, 0 replies; 7+ messages in thread From: Sebastian Riemer @ 2012-02-21 9:34 UTC (permalink / raw) To: LVM general discussion and development On 20/02/12 22:59, Lars Ellenberg wrote: >> Or does someone want to implement this together with me? > > I would certainly be here for discussions. > > Though, as you always will be more flexible with scripts than with > pre-implemented fixed algorithms, I probably would first check if I can > solve it with some scripting. > [completely untested, but you get the idea] > > #!/bin/bash > export LANG=C LC_ALL=C > name=$1 vg=$2 size_in_MiB=$3 > PVS=$(vgs --nohead --unit m -o pv_name,pv_free -O -pv_free,pv_name $vg | > awk -v need=$size_in_MiB '{ print $1; sum += $2; > if (sum >= need) exit; }') > lvcreate -n $name -L ${size_in_MiB}m $vg $PVS > > (similar for lvextend) > > Which basically implements this allocation policy: > use the pvs with most free space available, > and no more than necessary. > > If I understand you correctly, that would almost do what you asked for. Yes, this really helps. I've also thought about allocating the LVs directly to distinct PVs. Thanks for the confirmation. > You can get pretty complex in similar scripts, if you really want to... > consider using > pvs -o vg_name,lv_name,pv_name,pvseg_start,pvseg_size,seg_pe_ranges > and explicitly listing not only the PVS, but even the PE ranges to your > lvcreate commands... Thank you very much for your response. Regards, Sebastian ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2012-02-21 9:48 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-02-16 13:50 [linux-lvm] Allocation Policy for Cloud Computing needed Sebastian Riemer 2012-02-16 14:41 ` James Hawtin 2012-02-16 15:27 ` Sebastian Riemer 2012-02-20 21:59 ` Lars Ellenberg 2012-02-20 22:41 ` Ray Morris 2012-02-21 9:48 ` Sebastian Riemer 2012-02-21 9:34 ` Sebastian Riemer
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).