Skip to contentSkip to conversation

virtio_balloon: disable oom killer when fill balloon

PATCH In review Dave Young 3 participants 8 messages Apr 26, 2011 – Apr 27, 2011

Subsystems (4)
lore
Share & tools
lore

Dave Young

author
#0 lore raw

PATCH v2 1/1 virtio_balloon: disable oom killer when fill balloon

When memory pressure is high, virtio ballooning will probably cause oom killing. Even if alloc_page with GFP_NORETRY itself does not directly trigger oom it will make memory becoming low then memory alloc of other processes will trigger oom killing. It is not desired behaviour.

Here disable oom killer in fill_balloon to address this issue. Add code comment as KOSAKI Motohiro's suggestion.

---
 drivers/virtio/virtio_balloon.c |    8 ++++++++
 1 file changed, 8 insertions(+)
drivers/virtio/virtio_balloon.c +8 -0
@@ -25,6 +25,7 @@
 #include <linux/freezer.h>
 #include <linux/delay.h>
 #include <linux/slab.h>
+#include <linux/oom.h>
 
 struct virtio_balloon
 {
@@ -102,6 +103,12 @@ static void fill_balloon(struct virtio_b
 	/* We can only do one array worth at a time. */
 	num = min(num, ARRAY_SIZE(vb->pfns));
 
+	/* Disable oom killer for indirect oom due to our memory consuming
+	 * Currently only hibernation code use oom_killer_disable,
+	 * hibernation will freeze us before disable oom killer, so
+	 * It's safe here without locks.
+	 */
+	oom_killer_disable();
 	for (vb->num_pfns = 0; vb->num_pfns < num; vb->num_pfns++) {
 		struct page *page = alloc_page(GFP_HIGHUSER | __GFP_NORETRY |
 					__GFP_NOMEMALLOC | __GFP_NOWARN);
@@ -119,6 +126,7 @@ static void fill_balloon(struct virtio_b
 		vb->num_pages++;
 		list_add(&page->lru, &vb->pages);
 	}
+	oom_killer_enable();
 
 	/* Didn't get any?  Oh well. */
 	if (vb->num_pfns == 0)
#1 lore raw

Please resend this with [2/2] to linux-mm.

Quoted 4 lines · Dave Young

When memory pressure is high, virtio ballooning will probably cause oom killing. Even if alloc_page with GFP_NORETRY itself does not directly trigger oom it will make memory becoming low then memory alloc of other processes will trigger oom killing. It is not desired behaviour.

I can't understand why it is undesirable.
Why do we have to handle it specially?

Quoted 20 lines

Here disable oom killer in fill_balloon to address this issue. Add code comment as KOSAKI Motohiro's suggestion.

---
 drivers/virtio/virtio_balloon.c |    8 ++++++++

 1 file changed, 8 insertions(+)
drivers/virtio/virtio_balloon.c   2011-04-26 16:54:56.419741542 +0800 renamed from drivers/virtio/virtio_balloon.c      2011-04-26 11:39:14.053118406 +0800 +1 -0
@@ -25,6 +25,7 @@
  #include <linux/freezer.h>
  #include <linux/delay.h>
  #include <linux/slab.h>
+#include <linux/oom.h>
 

 struct virtio_balloon
 {

drivers/virtio/virtio_balloon.c   2011-04-26 16:54:56.419741542 +0800 static void fill_balloon(struct virtio_b · line 107

Quoted 5 lines
drivers/virtio/virtio_balloon.c   2011-04-26 16:54:56.419741542 +0800 renamed from drivers/virtio/virtio_balloon.c      2011-04-26 11:39:14.053118406 +0800 +2 -0
@@ -102,6 +103,12 @@ static void fill_balloon(struct virtio_b
        /* We can only do one array worth at a time. */
        num = min(num, ARRAY_SIZE(vb->pfns));
 
+       /* Disable oom killer for indirect oom due to our memory consuming
+        * Currently only hibernation code use oom_killer_disable,

Hmm, Please look at current mmotm. Now oom_killer_disabled is used by do_try_to_free_pages in mmotm so it could make unnecessary oom kill.

BTW, I can't understand why we need to handle virtio by special. Could you explain it in detail? :)

Signature · 2 lines
Kind regards,
Minchan Kim
author
#2 lore raw
Quoted 11 lines · Minchan Kim

Please resend this with [2/2] to linux-mm.

Quoted 4 lines · Dave Young

When memory pressure is high, virtio ballooning will probably cause oom killing. Even if alloc_page with GFP_NORETRY itself does not directly trigger oom it will make memory becoming low then memory alloc of other processes will trigger oom killing. It is not desired behaviour.

I can't understand why it is undesirable.
Why do we have to handle it specially?

Suppose user run some random memory hogging process while ballooning it will be undesirable.

Quoted 39 lines
Quoted 21 lines

Here disable oom killer in fill_balloon to address this issue. Add code comment as KOSAKI Motohiro's suggestion.

---
 drivers/virtio/virtio_balloon.c |    8 ++++++++

 1 file changed, 8 insertions(+)
drivers/virtio/virtio_balloon.c   2011-04-26 16:54:56.419741542 +0800 renamed from drivers/virtio/virtio_balloon.c      2011-04-26 11:39:14.053118406 +0800 +1 -0
@@ -25,6 +25,7 @@
  #include <linux/freezer.h>
  #include <linux/delay.h>
  #include <linux/slab.h>
+#include <linux/oom.h>
 

 struct virtio_balloon
 {

drivers/virtio/virtio_balloon.c   2011-04-26 16:54:56.419741542 +0800 static void fill_balloon(struct virtio_b · line 107

Quoted 5 lines
drivers/virtio/virtio_balloon.c   2011-04-26 16:54:56.419741542 +0800 renamed from drivers/virtio/virtio_balloon.c      2011-04-26 11:39:14.053118406 +0800 +2 -0
@@ -102,6 +103,12 @@ static void fill_balloon(struct virtio_b
        /* We can only do one array worth at a time. */
        num = min(num, ARRAY_SIZE(vb->pfns));
 
+       /* Disable oom killer for indirect oom due to our memory consuming
+        * Currently only hibernation code use oom_killer_disable,

Hmm, Please look at current mmotm. Now oom_killer_disabled is used by do_try_to_free_pages in mmotm so it could make unnecessary oom kill.

BTW, I can't understand why we need to handle virtio by special. Could you explain it in detail? :)

--
Kind regards,
Minchan Kim

Signature · 9 lines
Regards
dave

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to [email protected].  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
#3 lore raw
Quoted 9 lines · Dave Young
Quoted 8 lines · Minchan Kim

Please resend this with [2/2] to linux-mm.

Quoted 4 lines · Dave Young

When memory pressure is high, virtio ballooning will probably cause oom killing. Even if alloc_page with GFP_NORETRY itself does not directly trigger oom it will make memory becoming low then memory alloc of other processes will trigger oom killing. It is not desired behaviour.

Quoted 6 lines
Quoted 3 lines

I can't understand why it is undesirable.
Why do we have to handle it specially?

Suppose user run some random memory hogging process while ballooning it will be undesirable.

In VM POV, kvm and random memory hogging processes are customers. If we handle ballooning specially with disable OOM, what happens other processes requires memory at same time? Should they wait for balloon driver to release memory?

I don't know your point. Sorry.
Could you explain your scenario in detail for justify your idea? And as I previous said, we have to solve oom_killer_disabled issue in do_try_to_free_pages.

Thanks, Dave.

Signature · 9 lines
Kind regards,
Minchan Kim

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to [email protected].  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
author
#4 lore raw
Quoted 18 lines · Minchan Kim
Quoted 9 lines · Dave Young
Quoted 8 lines · Minchan Kim

Please resend this with [2/2] to linux-mm.

Quoted 4 lines · Dave Young

When memory pressure is high, virtio ballooning will probably cause oom killing. Even if alloc_page with GFP_NORETRY itself does not directly trigger oom it will make memory becoming low then memory alloc of other processes will trigger oom killing. It is not desired behaviour.

Quoted 6 lines
Quoted 3 lines

I can't understand why it is undesirable.
Why do we have to handle it specially?

Suppose user run some random memory hogging process while ballooning it will be undesirable.

Quoted 7 lines

In VM POV, kvm and random memory hogging processes are customers. If we handle ballooning specially with disable OOM, what happens other processes requires memory at same time? Should they wait for balloon driver to release memory?

I don't know your point. Sorry.
Could you explain your scenario in detail for justify your idea?

What you said make sense I understand what you said now. Lets ignore my above argue and see what I'm actually doing.

I'm hacking with balloon driver to fit to short the vm migration time.

while migrating host tell guest to balloon as much memory as it can, then start migrate, just skip the ballooned pages, after migration done tell guest to release the memory.

In migration case oom is not I want to see and disable oom will be good.

Quoted 8 lines

And as I previous said, we have to solve oom_killer_disabled issue in do_try_to_free_pages.

Thanks, Dave.
--
Kind regards,
Minchan Kim

Signature · 9 lines
Regards
dave

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to [email protected].  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
author
#5 lore raw
Quoted 30 lines · Dave Young
Quoted 18 lines · Minchan Kim
Quoted 9 lines · Dave Young
Quoted 8 lines · Minchan Kim

Please resend this with [2/2] to linux-mm.

Quoted 4 lines · Dave Young

When memory pressure is high, virtio ballooning will probably cause oom killing. Even if alloc_page with GFP_NORETRY itself does not directly trigger oom it will make memory becoming low then memory alloc of other processes will trigger oom killing. It is not desired behaviour.

Quoted 6 lines
Quoted 3 lines

I can't understand why it is undesirable.
Why do we have to handle it specially?

Suppose user run some random memory hogging process while ballooning it will be undesirable.

Quoted 7 lines

In VM POV, kvm and random memory hogging processes are customers. If we handle ballooning specially with disable OOM, what happens other processes requires memory at same time? Should they wait for balloon driver to release memory?

I don't know your point. Sorry.
Could you explain your scenario in detail for justify your idea?

What you said make sense I understand what you said now. Lets ignore my above argue and see what I'm actually doing.

Quoted 7 lines

I'm hacking with balloon driver to fit to short the vm migration time.

while migrating host tell guest to balloon as much memory as it can, then start migrate, just skip the ballooned pages, after migration done tell guest to release the memory.

In migration case oom is not I want to see and disable oom will be good.

BTW, if oom_killer_disabled is really not recommended to use I can switch back to oom_notifier way.

Quoted 16 lines
Quoted 9 lines

And as I previous said, we have to solve oom_killer_disabled issue in do_try_to_free_pages.

Thanks, Dave.
--
Kind regards,
Minchan Kim

--
Regards
dave

Signature · 9 lines
Regards
dave

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to [email protected].  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
#6 lore raw
Quoted 33 lines · Dave Young
Quoted 32 lines · Minchan Kim
Quoted 18 lines · Dave Young
Quoted 9 lines · Minchan Kim
Quoted 8 lines

Please resend this with [2/2] to linux-mm.

Quoted 4 lines · Dave Young

When memory pressure is high, virtio ballooning will probably cause oom killing. Even if alloc_page with GFP_NORETRY itself does not directly trigger oom it will make memory becoming low then memory alloc of other processes will trigger oom killing. It is not desired behaviour.

Quoted 6 lines
Quoted 3 lines

I can't understand why it is undesirable.
Why do we have to handle it specially?

Suppose user run some random memory hogging process while ballooning it will be undesirable.

Quoted 7 lines

In VM POV, kvm and random memory hogging processes are customers. If we handle ballooning specially with disable OOM, what happens other processes requires memory at same time? Should they wait for balloon driver to release memory?

I don't know your point. Sorry.
Could you explain your scenario in detail for justify your idea?

What you said make sense I understand what you said now. Lets ignore my above argue and see what I'm actually doing.

I'm hacking with balloon driver to fit to short the vm migration time.

Quoted 8 lines
Quoted 5 lines

while migrating host tell guest to balloon as much memory as it can, then start migrate, just skip the ballooned pages, after migration done tell guest to release the memory.

In migration case oom is not I want to see and disable oom will be good.

BTW, if oom_killer_disabled is really not recommended to use I can switch back to oom_notifier way.

Could you please explain why you dislike oom_notifier and what problem you faced? I haven't understand why oom_notifier is bad. probably my less knowledge of balloon is a reason.

author
#7 lore raw
Quoted 37 lines · KOSAKI Motohiro
Quoted 37 lines · Dave Young
Quoted 36 lines · Minchan Kim
Quoted 18 lines · Dave Young
Quoted 9 lines · Minchan Kim
Quoted 8 lines

Please resend this with [2/2] to linux-mm.

Quoted 4 lines · Dave Young

When memory pressure is high, virtio ballooning will probably cause oom killing. Even if alloc_page with GFP_NORETRY itself does not directly trigger oom it will make memory becoming low then memory alloc of other processes will trigger oom killing. It is not desired behaviour.

Quoted 6 lines
Quoted 3 lines

I can't understand why it is undesirable.
Why do we have to handle it specially?

Suppose user run some random memory hogging process while ballooning it will be undesirable.

Quoted 7 lines

In VM POV, kvm and random memory hogging processes are customers. If we handle ballooning specially with disable OOM, what happens other processes requires memory at same time? Should they wait for balloon driver to release memory?

I don't know your point. Sorry.
Could you explain your scenario in detail for justify your idea?

What you said make sense I understand what you said now. Lets ignore my above argue and see what I'm actually doing.

I'm hacking with balloon driver to fit to short the vm migration time.

while migrating host tell guest to balloon as much memory as it can, then start migrate, just skip the ballooned pages, after migration done tell guest to release the memory.

Quoted 9 lines
Quoted 4 lines
Quoted 1 line

In migration case oom is not I want to see and disable oom will be good.

BTW, if oom_killer_disabled is really not recommended to use I can switch back to oom_notifier way.

Could you please explain why you dislike oom_notifier and what problem you faced? I haven't understand why oom_notifier is bad. probably my less knowledge of balloon is a reason.

Both is fine for me indeed, oom_killer_disable is more simple to use instead. I ever sent a oom_notifier patch last year and did not get much intention, I can refresh and resend it.

Signature · 9 lines
Regards
dave

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to [email protected].  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>