linux 의 qos 메커니즘 - dm - ioband 편 (4)
첫 장면 은 요. http://sourceforge.net/apps/trac/ioband/wiki/dm-ioband/man/examples example 1, 우선 명령 을 호출 하여 두 개의 ioband device 를 만 듭 니 다.
# echo "0 $(blockdev --getsize /dev/sda1) ioband /dev/sda1 1 0 0 none weight 0 :80" | dmsetup create ioband1
# echo "0 $(blockdev --getsize /dev/sda2) ioband /dev/sda2 1 0 0 none weight 0 :40" | dmsetup create ioband2
dmsetup 은 ioband 를 호출 합 니 다.ctr 에서 ioband 장 치 를 만 듭 니 다. iobandctr 의 주석 은 매개 변수 순 서 를 볼 수 있 습 니 다.
/* * Create a new band device: * parameters:
그 중 < device - group - id > 는 iobanddevice->g_name, ioband 장 치 를 유일 하 게 표시 합 니 다.P. S. 여기 ioband 1, ioband 2 두 장 치 는 같은 ioband 에 대응 합 니 다.device, ioband - group - id 는 1 입 니 다. 。들 어 오 는 < device > 는 / dev / sda 1, / dev / sda 2 와 같은 실제 블록 장치 입 니 다.dm 호출get_device 이 장 치 를 dm 에 추가 합 니 다.table - > devices 목록 에 있 습 니 다.다음 호출 allocioband_device(
다음은 policy 호출init, 들 어 오 는 매개 변 수 는 < policy > < policy - param... > < group - id: groupparam... >, 우선 policy 이름 의 비 교 를 진행 합 니 다. 전역 변수 dmioband_policy_type 에서 이름 이 weight 인 policy 를 조회 한 후 대응 하 는 policy 를 호출 합 니 다.weight_init 함수.P.S. ioband_device 의 ggroups 는 attach 위 에 있 는 모든 ioband 를 연결 합 니 다.group, 이 listhead 의 변 수 는 ioband 에 대응 합 니 다.group 의 clist 멤버, container 를 통 해of 宏 은 iobandgroup。 얻 은 struct iobandpolicy_type ioband 에 할당device->g_policy。
정책 호출weight_init 일 때 들 어 오 는 매개 변 수 는 < policy - param... > < group - id: group - param... > 입 니 다.weight policy 의 첫 번 째 매개 변 수 는 < token base > 이 고, 그 다음은 < group - id: group - param > 의 배열, policy 입 니 다.weight_init 아니 < group - id: group - param > 의 대열 을 처리 하 다.
다음은 iobandgroup_init 는 먼저 default ioband group 을 만 듭 니 다. 이 장면 에서 같은 ioband 가 있 습 니 다.device 에 두 개의 default ioband 가 나 타 났 습 니 다.group, 그 중 cid 는 IOBANDID_ANY。ioband_device->g_root_groups 가 같은 것 을 저 장 했 습 니 다.
iobandgroup 다른 멤버: cchildren 은 이 group 아래 의 모든 하위 group, cparent 는 부모 그룹, c형제 그룹group 은 붉 은 검 은 나무의 구조 에 따라 조직 되 어 있 습 니 다. cgroup_루트 는 이 붉 은 검 은 나무의 뿌리 를 나타 낸다. cgroup_node 는 현재 group 이 이 빨 간 검 은 나무 에 있 는 노드 를 표시 합 니 다.
마지막 으로 ioband 호출group_type_select 선택 iobandgroup_type, 여기 type 은 none 입 니 다.
############################
OK, 이제 요청 실행 흐름 을 살 펴 보 겠 습 니 다. device mapper 에 들 어가 기 를 요청 하면 최종 적 으로 ioband 로 떨 어 집 니 다.map 함수 중, iobandmap 실행 절 차 는 다음 과 같 습 니 다.
화려 한 분할 선
두 번 째 장면 은 요. http://sourceforge.net/apps/trac/ioband/wiki/dm-ioband/man/examples 의 example 3, 이런 장면 에서 ioband 2 에 uid = 1000, weight = 20 의 group 이 추가 되 었 습 니 다.
우선ioband_message type 을 uid 로 설정 합 니 다.
그 다음은ioband_message 에서 ioband 호출group_attach (struct ioband group * head, 0, 1000, NULL) 시 head 는 원래 default group 의 지침 입 니 다. 현재 head - > ctype dmioband_group_type 의 uid group type.parent_id 는 0 이 고 group id 는 1000 입 니 다.이후 ioband 호출group_init (dp, head, NULL, gp, 1000, NULL), 여기 gp 는 새로 분 배 된 메모리 입 니 다. ioband 를 저장 하 는 데 사 용 됩 니 다.group, 여기 gp - > cid = id, 이때 iobandgroup 의 id 는 default group 의 IOBAND 가 아 닙 니 다.ID_ANY 입 니 다. uid 1000 입 니 다.이 새로 분 배 된 iobandgroup ioband 에 걸 림device 의 g그룹 아래, 그래서 이 iobanddevice 는 현재 3 개의 ioband 가 있 습 니 다.group。동시에 ioband 2 이 group 의 빨 간 검 은 나무 아래 에 두 개의 node 가 있 고 하 나 는 default group 에 속 하 며 하 나 는 uid group 에 속 합 니 다.이 두 그룹의 cdev,c_target 은 모두 같 습 니 다.
마지막 호출ioband_message 의 iobandset_파 람 으로 weight 를 설정 합 니 다.마지막 으로 policy 호출weight_param(gp, "weight", "20") 。
현재 iobanddevice 아래 에 3 개의 ioband 가 있 습 니 다.group 입 니 다. 그렇다면 요청 이 어떤 group 에 속 하 는 지 어떻게 압 니까?기억 해 iobandmap 의 iobandgroup_get 이 요? ioband 2 를 위 한 user = 1000 프로 세 스 요청 에 대해 ioband 로 전 송 됩 니 다.group_get 의 첫 번 째 매개 변 수 는 default group 의 지침 입 니 다.이 때 default group 의 c 때문에type 은 uid group type 이 되 었 습 니 다. ioband 를 호출 합 니 다.group_find 붉 은 검 은 나무 에서 c 찾기id = 1000 의 iobandgroup, 이 알고리즘 은 c 로 되 돌아 갑 니 다.id 1000 rbnode, c 로 돌아 가 거나id 는 IOBANDID_ANY default group 의 rbnode, 따라서 uid = 1000 프로 세 스 가 보 내 는 bio 가 아니 라 마지막 에 default group 에 떨 어 집 니 다.uid = 1000 프로 세 스 가 보 내 는 bio 는 c 로 떨 어 집 니 다.id = 1000 의 ioband그룹 상.
마지막 으로 요약 하면 이 < device - group - id > 는 g 를 포함 합 니 다.ref 2 의 iobanddevice, 안에 두 개의 장치 / dev / mapper / ioband 1, / dev / mapper / ioband 2 가 있 으 며, 동시에 3 개의 ioband 가 있 습 니 다.group, 권한 에 따라 token 공유
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Docker를 사용한 React 및 .NET Core 6.0 샘플 프로젝트 - 1부이 기사에서는 Entity Framework Core Code First 접근 방식을 사용하는 ASP.NET Core 6.0 WEP API의 CRUD(만들기, 읽기, 업데이트 및 삭제) 작업에 대해 설명합니다. 웹 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.