리눅스 용 커널 모듈을 만들고 있습니다. 각 프로세스가 커널 루틴 내에서 소비 한 시간을 확인해야합니다. 나는 커널이 task_struct 내의 stime 안에이 정보를 유지한다는 것을 안다. 문제는 각 프로세스에 대해이 정보를 모듈에 어떻게 가져올 지 확신 할 수 없다는 것입니다. 모듈에서 task_struct를 생성합니까? 모든 프로세스에서 정보를 얻으려면 어떻게해야합니까?커널 루틴에서 소비 한 CPU 시간 프로세스의 양을 확인하십시오.
0
A
답변
2
runnings 작업에서 데이터를 수집하는 방법 linux/kernel/taskstats.c 파일을 확인하십시오. 어쩌면 코드의 일부를 재사용 할 수 있습니다.
2
커널이 모든 필요한 기호를 내보낼 수 없기 때문에 Linux 커널 모듈에서 모든 프로세스를 반복하는 것은 약간 까다 롭습니다. 커널을 약간 수정하거나이 작업을위한 더 깊은 API에 의존해야 할 수도 있습니다. 이는 일반적으로 커널 모듈에 의해 수행되는 작업이 아닙니다.
기존 커널 코드의 예를 살펴 보겠습니다. Linux 2.6.39, 커널/cpu.c :
static inline void check_for_tasks(int cpu)
{
struct task_struct *p;
write_lock_irq(&tasklist_lock);
for_each_process(p) {
if (task_cpu(p) == cpu && p->state == TASK_RUNNING &&
(!cputime_eq(p->utime, cputime_zero) ||
!cputime_eq(p->stime, cputime_zero)))
printk(KERN_WARNING "Task %s (pid = %d) is on cpu %d "
"(state = %ld, flags = %x)\n",
p->comm, task_pid_nr(p), cpu,
p->state, p->flags);
}
write_unlock_irq(&tasklist_lock);
}
이 기능은 작업 목록을 반복합니다. 물론, 목록을 수정하지 않으면 쓰기 잠금 대신 읽기 잠금을 사용할 수 있습니다.
tasklist_lock
은 내보낼 수 없으므로 (즉, 소스에 아무 곳에도 EXPORT_SYMBOL(tasklist_lock)
이 없으므로 커널을 추가하고 커널을 다시 컴파일하면 커널 모듈을 동적으로 연결할 수 있습니다).
관련 문제
- 1. 리눅스 프로세스의 CPU 경합 (대기 시간)
- 2. 가상 디렉터리를 통해 소비 된 리소스를 확인하십시오.
- 3. Android : MapView에서 전송 한 바이트 양을 확인하십시오.
- 4. 내 프로세스의 CPU 사용량
- 5. 커널 모듈의 CPU 정보
- 6. 프로세스에 소비 된 CPU 시간 대 프로세스 시간에 소비 된 월드 타임 C++
- 7. 리눅스에서 프로세스의 유휴 시간
- 8. 얼마나 많은 CPU 시간과 함수가 소비 한 다른 리소스를 알아야합니까?
- 9. 사용자 CPU 시간 대 시스템 CPU 시간?
- 10. 안드로이드 - pid로 식별되는 프로세스가 소비 한 정확한 메모리 양을 알 수있는 SDK 방법이 있습니까?
- 11. 프로세스의 CPU 사용을 제한하는 방법
- 12. 생성자에서 시간 소비 함수 호출
- 13. 1024 CPU 용 커널 스케줄링
- 14. 커널 모듈에서 CPU 확장 구현
- 15. 프로세스에 의해 소비 된 CPU 클럭을 측정하십시오.
- 16. Windows 프로세스의 CPU 사용량을 계산 하시겠습니까?
- 17. Windows에서 명령 줄에서 CPU 시간 찾기
- 18. 특히 벽 시계 시간, 사용자 CPU 시간 및 시스템 cpu 시간은 무엇입니까?
- 19. 글래스 피쉬 그리즐리 스레드가 100 % CPU 시간을 소비 함
- 20. 'top'을 사용하여 프로세스의 메모리 사용량을 확인하십시오.
- 21. cpu 커널 인터럽트를 차폐 및 비활성화
- 22. WCF 호스트가 보내고받는 데이터 양을 확인하십시오.
- 23. pbs 작업이 현재 사용중인 메모리 양을 확인하십시오.
- 24. CPU 시간 측정
- 25. Java에서 CPU 실행 시간
- 26. 커널 : 프로세스의 task_struct에서 모든 스레드를 찾는 방법?
- 27. 커널 모듈에서 사용자 프로세스의 힙 크기를 사용했습니다.
- 28. 실행중인 프로세스의 CPU 사용량 줄이기 : Unix 명령
- 29. 프로세스의 CPU 코어 사용량을 어떻게 측정합니까?
- 30. 프로세스의 CPU 및 메모리 사용량을 모니터링