Skip to content

Conversation

@Dajeong-Park
Copy link

@Dajeong-Park Dajeong-Park commented Aug 10, 2021

PR 설명

KVM 인 경우 Mold 화면에서 예약된 메모리 사용률, 실제 메모리 사용률 조회가 가능하도록 변경하며,
mem stats에서 rss 값을 잘못 가져오는 부분을 개선하고, usable값을 가져오도록 추가하며
현재 가상머신 메모리 데이터의 갱신기간을 추가합니다.

  • ballooning 갱신기간 추가 (10초)
  • memstats 조회 로직 변경
    RSS을 memoryintfreekbs 값으로 담아오도록 변경
    RSS가 없는 경우 0 출력
  • memstats 조회 로직 추가
    USABLE을 memoryintusablekbs 값으로 담아오도록 추가
    USABLE이 없는 경우 0 출력
  • Hypervisor가 KVM인 경우 Mold 화면에서 예약된 메모리 사용률, 실제 메모리 사용률 조회가 가능하도록 변경하며, 예약된 메모리 사용률은 Admin만 조회할 수 있도록 변경

이슈

변경 구분

  • 새로운 기능 (다른 기능에 영향을 미치지 않는 새 기능)
  • 기능 개선 (기존 기능에 대한 개선으로 다른 기능에 영향을 미치지 않음)
  • 버그 수정 (이슈에 보고된 버그에 대한 수정으로 다른 기능에 영향을 미치지 않음)

기능/개선 규모 또는 버그 심각도

기능/개선 규모

  • 주요 기능/개선

버그 심각도

  • 중요 (사용자에게 기능 사용의 불편을 가져오게 함)

스크린샷

테스트 방법 및 결과

@Dajeong-Park
Copy link
Author

Dajeong-Park commented Aug 10, 2021

Mold memballoon 분석

  • 소스
    memballoon 비활성화/활성화 관련 프로퍼티는 agent.properties 파일에 위치하며, Ablestack 설치 시 해당 프로퍼티 파일에 memballoon 이 활성화되도록 설정되어있지만, LibvirtComputingResource.java 파일에서 MinRam과 MaxRam이 다를 경우(ScaleVMCommand 사용)에만 xml 파일에 memballoon이 활성화되도록 소스가 구현되어있지만, VM 생성 및 서비스 오퍼링 변경시 해당 command를 타지않으며 MinRam과 MaxRam이 같은 값으로 출력되어 memballoon이 활성화되지않음
    protected GuestResourceDef createGuestResourceDef(VirtualMachineTO vmTO) {
        GuestResourceDef grd = new GuestResourceDef();

        grd.setMemorySize(vmTO.getMaxRam() / 1024);
        if (vmTO.getMinRam() != vmTO.getMaxRam() && _noMemBalloon == false) {
            grd.setMemBalloning(true);
            grd.setCurrentMem(vmTO.getMinRam() / 1024);
        }
        grd.setVcpuNum(vmTO.getCpus());
        return grd;
    }
  • memstats 조회
    memstats 조회 시 결과값 13개 중 2개만 가져오도록 구현되어있으며 그 중 첫번째값을 가져오도록 개발되어있어, 현재 virsh 명령어로 조회하는 경우 memballoon이 활성화되어있지않아 rss 값만 출력되어 해당 값이 getMemoryFreeInKBs 값으로 출력됨
protected long getMemoryFreeInKBs(Domain dm) throws LibvirtException {
        MemoryStatistic[] mems = dm.memoryStats(NUMMEMSTATS);
        if (ArrayUtils.isEmpty(mems)) {
            return NumberUtils.LONG_ZERO;
        } 
        return mems[0].getValue();
    }

UserVmJoinDaoImpl.java 파일에서 위 로직으로 가져온 getMemoryFreeInKBs 값이 totalMemory보다 크거나 같으면 getMemoryFreeInKBs 값을 0으로 출력

@Dajeong-Park
Copy link
Author

Dajeong-Park commented Aug 10, 2021

VM memballoon 적용 테스트

  1. 10.10.1.10 Mold 환경

#virsh edit domain

// 변경 전
<memballoon model='none'/>
// 변경 후
<memballoon model='virtio'>
      <stats period='5'/>
</memballoon>

#virsh destory domain
#virsh start domain
#virsh dommemstat domain

// 변경 전
rss 866524
// 변경 후
actual 4194304
swap_in 0
swap_out 0
major_fault 239
minor_fault 122696
unused 3669020
available 3825732
usable 3579076
last_update 1628579521
disk_caches 48152
hugetlb_pgalloc 0
hugetlb_pgfail 0
rss 866524
  1. 10.10.10.10 Mold 환경
// 변경 전
rss 326168
// 변경 후
actual 1048576
last_update 0 // 0인 경우 폴링이 활성화되지않음
rss 326168

체크 필요

  • mem_balloon 활성화 한 후 dommemstat의 출력값이 환경에 따라 다른 이유 ?
    grub이 실행중인 부팅단계 또는 게스트 OS가 지원하지않거나 폴링이 활성화되지 않은 경우

@Dajeong-Park
Copy link
Author

Dajeong-Park commented Aug 12, 2021

10.10.10.10 Allo -> Bronto 업데이트 작업 시 이슈 기록

  1. 호스트에 agent, common 파일 업데이트 후 Mold에서 호스트 상태가 Alert으로 표시되는 현상
  • 호스트 libvirt 에러 로그

8월 12 13:12:42 ablecube-f2 libvirtd[3194161]: internal error: UUID cf02ceaa-9254-3a63-a14d-24c7a6f66b54인 비밀정보가 이미 admin@scvm:0/rbd2와 사용하기 위해 정의되어 있습니다

  • 해결

#virsh secret-get-value --secret cf02ceaa-9254-3a63-a14d-24c7a6f66b54
#virsh secret-dumpxml --secret cf02ceaa-9254-3a63-a14d-24c7a6f66b54

  1. ccvm에 management, common, usage 파일 업데이트 후 503 Error 및 management server 올라오지 않는 현상
  • management-server.log 파일에 Error 없음. 추후 확인 예정

@Dajeong-Park
Copy link
Author

Dajeong-Park commented Aug 13, 2021

dommemstat output

0 : VIR_DOMAIN_MEMORY_STAT_SWAP_IN
1 : VIR_DOMAIN_MEMORY_STAT_SWAP_OUT
2 : VIR_DOMAIN_MEMORY_STAT_MAJOR_FAULT
3 : VIR_DOMAIN_MEMORY_STAT_MINOR_FAULT
4 : VIR_DOMAIN_MEMORY_STAT_UNUSED : cat /proc/meminfo의 MemFree 값
5 : VIR_DOMAIN_MEMORY_STAT_AVAILABLE : cat /proc/meminfo의 MemTotal 값
6 : VIR_DOMAIN_MEMORY_STAT_ACTUAL_BALLOON : 벌루닝이 활성화된 상태에서 사용할 수 있는 실제 메모리 크기
7 : VIR_DOMAIN_MEMORY_STAT_RSS : 물리 메모리를 실제 점유하고 있는 크기
8 : VIR_DOMAIN_MEMORY_STAT_USABLE : cat /proc/meminfo의 MemAvailable 값
9 : VIR_DOMAIN_MEMORY_STAT_LAST_UPDATE
10 : VIR_DOMAIN_MEMORY_STAT_DISK_CACHES
11 : VIR_DOMAIN_MEMORY_STAT_HUGETLB_PGALLOC
12 : VIR_DOMAIN_MEMORY_STAT_HUGETLB_PGFAIL
13 : VIR_DOMAIN_MEMORY_STAT_NR

Dajeong-Park and others added 23 commits August 24, 2021 09:00
원복된 소스 변경
line 정리
글로벌 설정 추가
global setting 위치 변경
재수정
글로벌설정 management 재시작으로 변경
테스트 코드 삭제 및 정리
라인정리
vmStats에 Usable 추가
libvirt memstats조회 테스트코드 주석처리
로그 삭제 및 라인정리
Mold UI Instance Metrics 목록 및 상세화면의 memory 정보 변경
오타 수정
코드 정리
memstats 조회시 0으로 출력되는 로직 주석처리
오타 수정
100프로 초과일때 표시 오류 수정
@dhslove dhslove added the customization Simple customization of the original source label Aug 31, 2021
@dhslove dhslove added the enhancement New feature or request label Aug 31, 2021
@dhslove dhslove added this to the Bronto milestone Aug 31, 2021
@dhslove dhslove merged commit a66e96c into ablecloud-team:ablestack-bronto Aug 31, 2021
@Dajeong-Park Dajeong-Park deleted the memory branch November 20, 2025 01:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

customization Simple customization of the original source enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Wall - 가상머신 메모리 데이터 수집을 위한 Memballoon 소스 변경이 필요합니다.

2 participants