-
Notifications
You must be signed in to change notification settings - Fork 128
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Implement memory ballooning feature (#332)
Memory ballooning support on firecracker-go-sdk. Add wrappers for the Firecracker endpoints "/ballloon", "/balloon/statistics". Signed-off-by: Royce Zhao <[email protected]>
- Loading branch information
1 parent
0f07b62
commit abd0815
Showing
6 changed files
with
344 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. | ||
// | ||
// Licensed under the Apache License, Version 2.0 (the "License"). You may | ||
// not use this file except in compliance with the License. A copy of the | ||
// License is located at | ||
// | ||
// http://aws.amazon.com/apache2.0/ | ||
// | ||
// or in the "license" file accompanying this file. This file is distributed | ||
// on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either | ||
// express or implied. See the License for the specific language governing | ||
// permissions and limitations under the License. | ||
package firecracker | ||
|
||
import ( | ||
models "github.com/firecracker-microvm/firecracker-go-sdk/client/models" | ||
) | ||
|
||
// BalloonDevice is a builder that will create a balloon used to set up | ||
// the firecracker microVM. | ||
type BalloonDevice struct { | ||
balloon models.Balloon | ||
} | ||
|
||
type BalloonOpt func(*models.Balloon) | ||
|
||
// NewBalloonDevice will return a new BalloonDevice. | ||
func NewBalloonDevice(amountMib int64, deflateOnOom bool, opts ...BalloonOpt) BalloonDevice { | ||
b := models.Balloon{ | ||
AmountMib: &amountMib, | ||
DeflateOnOom: &deflateOnOom, | ||
} | ||
|
||
for _, opt := range opts { | ||
opt(&b) | ||
} | ||
|
||
return BalloonDevice{balloon: b} | ||
} | ||
|
||
// Build will return a new balloon | ||
func (b BalloonDevice) Build() models.Balloon { | ||
return b.balloon | ||
} | ||
|
||
// WithStatsPollingIntervals is a functional option which sets the time in seconds between refreshing statistics. | ||
func WithStatsPollingIntervals(statsPollingIntervals int64) BalloonOpt { | ||
return func(d *models.Balloon) { | ||
d.StatsPollingIntervals = statsPollingIntervals | ||
} | ||
} | ||
|
||
// UpdateAmountMiB sets the target size of the balloon | ||
func (b BalloonDevice) UpdateAmountMib(amountMib int64) BalloonDevice { | ||
b.balloon.AmountMib = &amountMib | ||
return b | ||
} | ||
|
||
// UpdateStatsPollingIntervals sets the time in seconds between refreshing statistics. | ||
// A non-zero value will enable the statistics. Defaults to 0. | ||
func (b BalloonDevice) UpdateStatsPollingIntervals(statsPollingIntervals int64) BalloonDevice { | ||
b.balloon.StatsPollingIntervals = statsPollingIntervals | ||
return b | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. | ||
// | ||
// Licensed under the Apache License, Version 2.0 (the "License"). You may | ||
// not use this file except in compliance with the License. A copy of the | ||
// License is located at | ||
// | ||
// http://aws.amazon.com/apache2.0/ | ||
// | ||
// or in the "license" file accompanying this file. This file is distributed | ||
// on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either | ||
// express or implied. See the License for the specific language governing | ||
// permissions and limitations under the License. | ||
|
||
package firecracker | ||
|
||
import ( | ||
"reflect" | ||
"testing" | ||
|
||
models "github.com/firecracker-microvm/firecracker-go-sdk/client/models" | ||
) | ||
|
||
var ( | ||
expectedAmountMib = int64(6) | ||
expectedDeflateOnOom = true | ||
expectedStatsPollingIntervals = int64(1) | ||
|
||
expectedBalloon = models.Balloon{ | ||
AmountMib: &expectedAmountMib, | ||
DeflateOnOom: &expectedDeflateOnOom, | ||
StatsPollingIntervals: expectedStatsPollingIntervals, | ||
} | ||
) | ||
|
||
func TestNewBalloonDevice(t *testing.T) { | ||
balloon := NewBalloonDevice(expectedAmountMib, expectedDeflateOnOom, WithStatsPollingIntervals(expectedStatsPollingIntervals)).Build() | ||
if e, a := expectedBalloon, balloon; !reflect.DeepEqual(e, a) { | ||
t.Errorf("expected balloon %v, but received %v", e, a) | ||
} | ||
} | ||
|
||
func TestUpdateAmountMiB(t *testing.T) { | ||
BalloonDevice := NewBalloonDevice(int64(1), expectedDeflateOnOom, WithStatsPollingIntervals(expectedStatsPollingIntervals)) | ||
balloon := BalloonDevice.UpdateAmountMib(expectedAmountMib).Build() | ||
|
||
if e, a := expectedBalloon, balloon; !reflect.DeepEqual(e, a) { | ||
t.Errorf("expected balloon %v, but received %v", e, a) | ||
} | ||
} | ||
|
||
func TestUpdateStatsPollingIntervals(t *testing.T) { | ||
BalloonDevice := NewBalloonDevice(expectedAmountMib, expectedDeflateOnOom) | ||
balloon := BalloonDevice.UpdateStatsPollingIntervals(expectedStatsPollingIntervals).Build() | ||
|
||
if e, a := expectedBalloon, balloon; !reflect.DeepEqual(e, a) { | ||
t.Errorf("expected balloon %v, but received %v", e, a) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.