Skip to content

Commit ba2b50d

Browse files
committed
extract memory and CPU resource helpers
Signed-off-by: bo.jiang <bo.jiang@daocloud.io>
1 parent d3daead commit ba2b50d

File tree

1 file changed

+112
-190
lines changed

1 file changed

+112
-190
lines changed

pkg/adaptation/result.go

Lines changed: 112 additions & 190 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"strings"
2424

2525
"github.com/containerd/nri/pkg/api"
26+
"google.golang.org/protobuf/proto"
2627
)
2728

2829
type result struct {
@@ -622,124 +623,132 @@ func (r *result) adjustHooks(hooks *Hooks, plugin string) error {
622623
return nil
623624
}
624625

625-
func (r *result) adjustResources(resources *LinuxResources, plugin string) error {
626-
if resources == nil {
626+
func (r *result) adjustMemoryResource(mem, targetContainer *LinuxMemory, id, plugin string) error {
627+
if mem == nil {
627628
return nil
628629
}
629630

630-
create, id := r.request.create, r.request.create.Container.Id
631-
container := create.Container.Linux.Resources
632-
reply := r.reply.adjust.Linux.Resources
633-
634-
if mem := resources.Memory; mem != nil {
635-
if v := mem.GetLimit(); v != nil {
636-
if err := r.owners.ClaimMemLimit(id, plugin); err != nil {
637-
return err
638-
}
639-
container.Memory.Limit = Int64(v.GetValue())
640-
reply.Memory.Limit = Int64(v.GetValue())
631+
if v := mem.GetLimit(); v != nil {
632+
if err := r.owners.ClaimMemLimit(id, plugin); err != nil {
633+
return err
641634
}
642-
if v := mem.GetReservation(); v != nil {
643-
if err := r.owners.ClaimMemReservation(id, plugin); err != nil {
644-
return err
645-
}
646-
container.Memory.Reservation = Int64(v.GetValue())
647-
reply.Memory.Reservation = Int64(v.GetValue())
635+
targetContainer.Limit = Int64(v.GetValue())
636+
}
637+
if v := mem.GetReservation(); v != nil {
638+
if err := r.owners.ClaimMemReservation(id, plugin); err != nil {
639+
return err
648640
}
649-
if v := mem.GetSwap(); v != nil {
650-
if err := r.owners.ClaimMemSwapLimit(id, plugin); err != nil {
651-
return err
652-
}
653-
container.Memory.Swap = Int64(v.GetValue())
654-
reply.Memory.Swap = Int64(v.GetValue())
641+
targetContainer.Reservation = Int64(v.GetValue())
642+
}
643+
if v := mem.GetSwap(); v != nil {
644+
if err := r.owners.ClaimMemSwapLimit(id, plugin); err != nil {
645+
return err
655646
}
656-
if v := mem.GetKernel(); v != nil {
657-
if err := r.owners.ClaimMemKernelLimit(id, plugin); err != nil {
658-
return err
659-
}
660-
container.Memory.Kernel = Int64(v.GetValue())
661-
reply.Memory.Kernel = Int64(v.GetValue())
647+
targetContainer.Swap = Int64(v.GetValue())
648+
}
649+
if v := mem.GetKernel(); v != nil {
650+
if err := r.owners.ClaimMemKernelLimit(id, plugin); err != nil {
651+
return err
662652
}
663-
if v := mem.GetKernelTcp(); v != nil {
664-
if err := r.owners.ClaimMemTCPLimit(id, plugin); err != nil {
665-
return err
666-
}
667-
container.Memory.KernelTcp = Int64(v.GetValue())
668-
reply.Memory.KernelTcp = Int64(v.GetValue())
653+
targetContainer.Kernel = Int64(v.GetValue())
654+
}
655+
if v := mem.GetKernelTcp(); v != nil {
656+
if err := r.owners.ClaimMemTCPLimit(id, plugin); err != nil {
657+
return err
669658
}
670-
if v := mem.GetSwappiness(); v != nil {
671-
if err := r.owners.ClaimMemSwappiness(id, plugin); err != nil {
672-
return err
673-
}
674-
container.Memory.Swappiness = UInt64(v.GetValue())
675-
reply.Memory.Swappiness = UInt64(v.GetValue())
659+
targetContainer.KernelTcp = Int64(v.GetValue())
660+
}
661+
if v := mem.GetSwappiness(); v != nil {
662+
if err := r.owners.ClaimMemSwappiness(id, plugin); err != nil {
663+
return err
676664
}
677-
if v := mem.GetDisableOomKiller(); v != nil {
678-
if err := r.owners.ClaimMemDisableOomKiller(id, plugin); err != nil {
679-
return err
680-
}
681-
container.Memory.DisableOomKiller = Bool(v.GetValue())
682-
reply.Memory.DisableOomKiller = Bool(v.GetValue())
665+
targetContainer.Swappiness = UInt64(v.GetValue())
666+
}
667+
if v := mem.GetDisableOomKiller(); v != nil {
668+
if err := r.owners.ClaimMemDisableOomKiller(id, plugin); err != nil {
669+
return err
683670
}
684-
if v := mem.GetUseHierarchy(); v != nil {
685-
if err := r.owners.ClaimMemUseHierarchy(id, plugin); err != nil {
686-
return err
687-
}
688-
container.Memory.UseHierarchy = Bool(v.GetValue())
689-
reply.Memory.UseHierarchy = Bool(v.GetValue())
671+
targetContainer.DisableOomKiller = Bool(v.GetValue())
672+
}
673+
if v := mem.GetUseHierarchy(); v != nil {
674+
if err := r.owners.ClaimMemUseHierarchy(id, plugin); err != nil {
675+
return err
690676
}
677+
targetContainer.UseHierarchy = Bool(v.GetValue())
691678
}
692-
if cpu := resources.Cpu; cpu != nil {
693-
if v := cpu.GetShares(); v != nil {
694-
if err := r.owners.ClaimCPUShares(id, plugin); err != nil {
695-
return err
696-
}
697-
container.Cpu.Shares = UInt64(v.GetValue())
698-
reply.Cpu.Shares = UInt64(v.GetValue())
679+
680+
return nil
681+
}
682+
683+
func (r *result) adjustCPUResource(cpu, targetContainer *LinuxCPU, id, plugin string) error {
684+
if cpu == nil {
685+
return nil
686+
}
687+
688+
if v := cpu.GetShares(); v != nil {
689+
if err := r.owners.ClaimCPUShares(id, plugin); err != nil {
690+
return err
699691
}
700-
if v := cpu.GetQuota(); v != nil {
701-
if err := r.owners.ClaimCPUQuota(id, plugin); err != nil {
702-
return err
703-
}
704-
container.Cpu.Quota = Int64(v.GetValue())
705-
reply.Cpu.Quota = Int64(v.GetValue())
692+
targetContainer.Shares = UInt64(v.GetValue())
693+
}
694+
if v := cpu.GetQuota(); v != nil {
695+
if err := r.owners.ClaimCPUQuota(id, plugin); err != nil {
696+
return err
706697
}
707-
if v := cpu.GetPeriod(); v != nil {
708-
if err := r.owners.ClaimCPUPeriod(id, plugin); err != nil {
709-
return err
710-
}
711-
container.Cpu.Period = UInt64(v.GetValue())
712-
reply.Cpu.Period = UInt64(v.GetValue())
698+
targetContainer.Quota = Int64(v.GetValue())
699+
}
700+
if v := cpu.GetPeriod(); v != nil {
701+
if err := r.owners.ClaimCPUPeriod(id, plugin); err != nil {
702+
return err
713703
}
714-
if v := cpu.GetRealtimeRuntime(); v != nil {
715-
if err := r.owners.ClaimCPURealtimeRuntime(id, plugin); err != nil {
716-
return err
717-
}
718-
container.Cpu.RealtimeRuntime = Int64(v.GetValue())
719-
reply.Cpu.RealtimeRuntime = Int64(v.GetValue())
704+
targetContainer.Period = UInt64(v.GetValue())
705+
}
706+
if v := cpu.GetRealtimeRuntime(); v != nil {
707+
if err := r.owners.ClaimCPURealtimeRuntime(id, plugin); err != nil {
708+
return err
720709
}
721-
if v := cpu.GetRealtimePeriod(); v != nil {
722-
if err := r.owners.ClaimCPURealtimePeriod(id, plugin); err != nil {
723-
return err
724-
}
725-
container.Cpu.RealtimePeriod = UInt64(v.GetValue())
726-
reply.Cpu.RealtimePeriod = UInt64(v.GetValue())
710+
targetContainer.RealtimeRuntime = Int64(v.GetValue())
711+
}
712+
if v := cpu.GetRealtimePeriod(); v != nil {
713+
if err := r.owners.ClaimCPURealtimePeriod(id, plugin); err != nil {
714+
return err
727715
}
728-
if v := cpu.GetCpus(); v != "" {
729-
if err := r.owners.ClaimCPUSetCPUs(id, plugin); err != nil {
730-
return err
731-
}
732-
container.Cpu.Cpus = v
733-
reply.Cpu.Cpus = v
716+
targetContainer.RealtimePeriod = UInt64(v.GetValue())
717+
}
718+
if v := cpu.GetCpus(); v != "" {
719+
if err := r.owners.ClaimCPUSetCPUs(id, plugin); err != nil {
720+
return err
734721
}
735-
if v := cpu.GetMems(); v != "" {
736-
if err := r.owners.ClaimCPUSetMems(id, plugin); err != nil {
737-
return err
738-
}
739-
container.Cpu.Mems = v
740-
reply.Cpu.Mems = v
722+
targetContainer.Cpus = v
723+
}
724+
if v := cpu.GetMems(); v != "" {
725+
if err := r.owners.ClaimCPUSetMems(id, plugin); err != nil {
726+
return err
741727
}
728+
targetContainer.Mems = v
729+
}
730+
731+
return nil
732+
}
733+
734+
func (r *result) adjustResources(resources *LinuxResources, plugin string) error {
735+
if resources == nil {
736+
return nil
737+
}
738+
739+
create, id := r.request.create, r.request.create.Container.Id
740+
container := create.Container.Linux.Resources
741+
reply := r.reply.adjust.Linux.Resources
742+
743+
if err := r.adjustMemoryResource(resources.Memory, container.Memory, id, plugin); err != nil {
744+
return err
742745
}
746+
reply.Memory = proto.Clone(container.Memory).(*LinuxMemory)
747+
748+
if err := r.adjustCPUResource(resources.Cpu, container.Cpu, id, plugin); err != nil {
749+
return err
750+
}
751+
reply.Cpu = proto.Clone(container.Cpu).(*LinuxCPU)
743752

744753
for _, l := range resources.HugepageLimits {
745754
if err := r.owners.ClaimHugepageLimit(id, l.PageSize, plugin); err != nil {
@@ -886,99 +895,12 @@ func (r *result) updateResources(reply, u *ContainerUpdate, plugin string) error
886895
resources = reply.Linux.Resources.Copy()
887896
}
888897

889-
if mem := u.Linux.Resources.Memory; mem != nil {
890-
if v := mem.GetLimit(); v != nil {
891-
if err := r.owners.ClaimMemLimit(id, plugin); err != nil {
892-
return err
893-
}
894-
resources.Memory.Limit = Int64(v.GetValue())
895-
}
896-
if v := mem.GetReservation(); v != nil {
897-
if err := r.owners.ClaimMemReservation(id, plugin); err != nil {
898-
return err
899-
}
900-
resources.Memory.Reservation = Int64(v.GetValue())
901-
}
902-
if v := mem.GetSwap(); v != nil {
903-
if err := r.owners.ClaimMemSwapLimit(id, plugin); err != nil {
904-
return err
905-
}
906-
resources.Memory.Swap = Int64(v.GetValue())
907-
}
908-
if v := mem.GetKernel(); v != nil {
909-
if err := r.owners.ClaimMemKernelLimit(id, plugin); err != nil {
910-
return err
911-
}
912-
resources.Memory.Kernel = Int64(v.GetValue())
913-
}
914-
if v := mem.GetKernelTcp(); v != nil {
915-
if err := r.owners.ClaimMemTCPLimit(id, plugin); err != nil {
916-
return err
917-
}
918-
resources.Memory.KernelTcp = Int64(v.GetValue())
919-
}
920-
if v := mem.GetSwappiness(); v != nil {
921-
if err := r.owners.ClaimMemSwappiness(id, plugin); err != nil {
922-
return err
923-
}
924-
resources.Memory.Swappiness = UInt64(v.GetValue())
925-
}
926-
if v := mem.GetDisableOomKiller(); v != nil {
927-
if err := r.owners.ClaimMemDisableOomKiller(id, plugin); err != nil {
928-
return err
929-
}
930-
resources.Memory.DisableOomKiller = Bool(v.GetValue())
931-
}
932-
if v := mem.GetUseHierarchy(); v != nil {
933-
if err := r.owners.ClaimMemUseHierarchy(id, plugin); err != nil {
934-
return err
935-
}
936-
resources.Memory.UseHierarchy = Bool(v.GetValue())
937-
}
898+
if err := r.adjustMemoryResource(u.Linux.Resources.Memory, resources.Memory, id, plugin); err != nil {
899+
return err
938900
}
939-
if cpu := u.Linux.Resources.Cpu; cpu != nil {
940-
if v := cpu.GetShares(); v != nil {
941-
if err := r.owners.ClaimCPUShares(id, plugin); err != nil {
942-
return err
943-
}
944-
resources.Cpu.Shares = UInt64(v.GetValue())
945-
}
946-
if v := cpu.GetQuota(); v != nil {
947-
if err := r.owners.ClaimCPUQuota(id, plugin); err != nil {
948-
return err
949-
}
950-
resources.Cpu.Quota = Int64(v.GetValue())
951-
}
952-
if v := cpu.GetPeriod(); v != nil {
953-
if err := r.owners.ClaimCPUPeriod(id, plugin); err != nil {
954-
return err
955-
}
956-
resources.Cpu.Period = UInt64(v.GetValue())
957-
}
958-
if v := cpu.GetRealtimeRuntime(); v != nil {
959-
if err := r.owners.ClaimCPURealtimeRuntime(id, plugin); err != nil {
960-
return err
961-
}
962-
resources.Cpu.RealtimeRuntime = Int64(v.GetValue())
963-
}
964-
if v := cpu.GetRealtimePeriod(); v != nil {
965-
if err := r.owners.ClaimCPURealtimePeriod(id, plugin); err != nil {
966-
return err
967-
}
968-
resources.Cpu.RealtimePeriod = UInt64(v.GetValue())
969-
}
970-
if v := cpu.GetCpus(); v != "" {
971-
if err := r.owners.ClaimCPUSetCPUs(id, plugin); err != nil {
972-
return err
973-
}
974-
resources.Cpu.Cpus = v
975-
}
976-
if v := cpu.GetMems(); v != "" {
977-
if err := r.owners.ClaimCPUSetMems(id, plugin); err != nil {
978-
return err
979-
}
980-
resources.Cpu.Mems = v
981-
}
901+
902+
if err := r.adjustCPUResource(u.Linux.Resources.Cpu, resources.Cpu, id, plugin); err != nil {
903+
return err
982904
}
983905

984906
for _, l := range u.Linux.Resources.HugepageLimits {

0 commit comments

Comments
 (0)