自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(66)
  • 资源 (3)
  • 收藏
  • 关注

原创 进程管理API之ns_of_pid

inline struct pid_namespace *ns_of_pid(struct pid *pid)其作用是根据struct pid返回其所在的namespace其使用的例子如下:struct pid_namespace *task_active_pid_ns(struct task_struct *tsk){ return ns_of_pid(task_pid(tsk));}

2017-11-30 08:39:24 537

原创 ceph-deploy的calamari命令

ceph-deploy的calamari主要用于将config文件写到远程host的/etc/salt/minion.d/calamari.conf文件中并安装salt-minion和diamod 这两个包,并是能salt-minion 这个service 开机自动启动其源码路径为:E:\ceph-deploy-master\ceph-deploy-master\ceph_deploy\cal

2017-11-29 08:56:22 719

原创 进程管理API之get_task_mm

struct mm_struct *get_task_mm(struct task_struct *task) 其作用是得到task_struct *task的成员变量mm,如果是user space的task的话,通过将得到mm_struct *mm 结构体的mm_users成员变量加1如果是kernel space的task的话,其mm为null其使用的例子如下:int access_

2017-11-29 08:54:09 3387 1

原创 smpboot_register_percpu_thread_cpumask的作用

int smpboot_register_percpu_thread_cpumask(struct smp_hotplug_thread *plug_thread, const struct cpumask *cpumask) 用于在cpumask表示的每个cpu上创建并运行一个thread其用法如下: err = smpboot_register_percpu_threa

2017-11-28 16:01:05 1590

原创 查询发行版的方法

2017-11-28 14:38:22 395

原创 ceph-deploy的admin 命令

ceph-deploy的admin命令指定了位置参数client用于将conf_data和keyring文件写到远端的host中其入口在E:\ceph-deploy-master\ceph-deploy-master\ceph_deploy\admin.py@priority(70)def make(parser): """ Push configuration and cl

2017-11-28 14:36:58 1809

原创 servicegroup的db实现

在E:\nova\nova\conf\service.py 中查看service的配置选项,可以看到有两个report_interval,service_down_time其注释已经写的很清楚其作用了.service_opts = [ # TODO(johngarbutt) we need a better default and minimum, in a backwards

2017-11-28 14:35:50 1145

原创 nova的pci 设备白名单

并不是所有的guest可以使用pci设备,在E:\nova\nova\pci\whitelist.py 中定义了白名单决定哪些guest可以使用pci device在class Whitelist(object)这个class的__init__ 中会调用_parse_white_list_from_config 来从配置文件中将guest使用pci设备的白名单加载进来 @stati

2017-11-28 14:34:24 1300

原创 进程管理API之get_pid/ put_pid

inline struct pid *get_pid(struct pid *pid) 用于将struct pid结构体中的count字段加1 后,返回struct pid其使用的例子如下:static inline void ocfs2_add_holder(struct ocfs2_lock_res *lockres, struct ocfs2_lock_holder *oh

2017-11-28 14:33:00 2241

原创 进程管理API之find_vpid

struct pid *find_vpid(int nr) 用于根据nr也就是namespace下的局部pid找到对应的struct pid结构体其使用的例子如下:这个系统调用的参赛arg就是局部pid。int f_setown(struct file *filp, unsigned long arg, int force){ enum pid_type type; struct pi

2017-11-27 09:40:36 3887

原创 进程管理API之find_task_by_vpid

struct task_struct *find_task_by_vpid(pid_t vnr),在当前task的namespace下根据vpid找到对应的task其使用的例子如下:SYSCALL_DEFINE6(move_pages, pid_t, pid, unsigned long, nr_pages, const void __user * __user *, pages, c

2017-11-25 09:03:09 4268

原创 进程管理API之find_task_by_pid_ns

struct task_struct *find_task_by_pid_ns(pid_t nr, struct pid_namespace *ns)根据nr和其对应的ns找到对应的task。其使用的例子如下:struct dentry *proc_pid_lookup(struct inode *dir, struct dentry * dentry, unsigned int flags

2017-11-24 09:51:38 3032

原创 dump所有cpu的callstack

可以通过static inline bool trigger_all_cpu_backtrace(void){ arch_trigger_cpumask_backtrace(cpu_online_mask, false); return true;}来让所有的cpu 打印当前的callstack这个函数是平台相关的,目前4.14的kernel arm 有实现这个函数,但是arm64

2017-11-23 10:11:25 3126

原创 进程管理API之find_pid_ns

struct pid *find_pid_ns(int nr, struct pid_namespace *ns) 用于从namespace 下的pid找到对应的pid结构体其中pid结构体定义如下:struct pid{ atomic_t count; unsigned int level; /* lists of tasks that use this pid */ struct

2017-11-23 08:52:16 1613

原创 git stash

git stash 用于缓存暂时不能commit的改动。通过git stash list 可以查看已经缓存的改动通过git stash apply stash@{1} 可以将缓存的改动回复通过git stash  drop stash@{0} 可以删除缓存在本地的改动

2017-11-22 16:40:18 404

原创 kernel对R状态task在4s不被调度的检测

内核死锁分为D状态和R状态,之前介绍过D状态了,下来看看kernel对R状态死锁的检测.其入口函数在void __init lockup_detector_init(void){// 设置检测的频率,默认是每4s检测一次 set_sample_period();//R状态会对没有cpu 创建一个thread来检测,当前cpu是否处于R状态死锁,因此这里的watchdog_cpumask

2017-11-22 10:17:11 583

原创 进程管理API之find_get_pid

struct pid *find_get_pid(pid_t nr)根据进程号pid_t nr nr得到进程描述符struct pid ,并将进程描述符中的字段count加1这里的进程描述符定义如下:struct pid{ atomic_t count; unsigned int level; /* lists of tasks that use this pid */ struct

2017-11-22 08:51:14 6154

原创 进程管理API之__task_pid_nr_ns

pid_t __task_pid_nr_ns(struct task_struct *task, enum pid_type type,struct pid_namespace *ns)此函数用于根据task和pid_namespace得到符合条件的进程号也就是pid号。使用的例子如下:task_pid_nr_ns 函数通过调用__task_pid_nr_ns 得到符合task_struct

2017-11-21 14:31:20 2258

原创 ceph-deploy 中使用remoto

在ceph-deploy 中使用remoto 这个第三方库来访问远程host.这个库的源码的路径为https://github.com/alfredodeza/remoto例如在E:\ceph-deploy-master\ceph-deploy-master\ceph_deploy\hosts\common.py 中def ceph_version(conn): """ Log

2017-11-21 14:29:53 806

原创 通过在uefi shell 命令行启动grub

正常情况下在uefi中可以看到debian的grub路径在\EFI\debian\grubaa64.efi进入uefi的shell 执行\EFI\debian\grubaa64.efi。如果有多个硬盘可以在前面加上fsx:\EFI\debian\grubaa64.efi。执行成功后就可以看到进入grub了

2017-11-21 14:26:38 22782 1

原创 grub exit 命令failed

之前在grub 命令行中输入exit的时候回返回到bios,但是此时bios会挂掉。通过在bios中加log确认已经从grub返回到bios了,但是bios中查了好久也没有进展,后来找到如下patch解决了这个问题。Signed-off-by: Mark Salter --- grub-core/kern/arm/efi/init.c | 2 +- grub-core/kern/efi/

2017-11-21 14:22:29 1381

原创 kernel对D状态(TASK_UNINTERRUPTIBLE)task在120s不被调度的检测

当打开CONFIG_DETECT_HUNG_TASK选项的时候,kernel会对处于D状态也就是TASK_UNINTERRUPTIBLE的task进行检测,如果在120s内都没有被调动就会处于D状态task的pid,ppid 和stack等信息。其源码在kernel/hung_task.c 中static int __init hung_task_init(void){ atomic_no

2017-11-20 17:22:06 3017

原创 模块API之print_symbol

inline void print_symbol(const char *fmt, unsigned long addr) 由于根据客户给定的格式将addr对应的symbol打印出来。其使用的例子如下:例如这里就将dev_attr->show地址中保存的symbol 用%s打印出来.static ssize_t dev_attr_show(struct kobject *kobj, stru

2017-11-20 10:29:02 1116

原创 ceph-deploy-mon的create函数

ceph-deploy的mon 命令用于管理mon守护进程其入口函数在E:\ceph-deploy-master\ceph-deploy-master\ceph_deploy\mon.py 中的make函数@priority(30)def make(parser): """ Ceph MON Daemon management """ parser.forma

2017-11-17 20:03:03 1031

原创 overcommit_memory

Memory Overcommit os 给进程的内存大小超过了实际可用的内存,如果实在没有内存可以用的话,就会触发oom通过下面的命令可以知道当前kernel是否处于overmemory。如果Committed_AS 大于CommitLimit,就处于overcommit[root@localhost vm]# grep -i commit /proc/meminfoCommitLimit

2017-11-17 16:11:57 1376

原创 模块API之sprint_symbol

int sprint_symbol(char *buffer, unsigned long address)的作用是根据内存中地址address查找这个地址对应的symbol,并加此symbol的name,offset,size等基本信息连成字符串赋值给buffer.其使用的例子如下:static void hist_trigger_stacktrace_print(struct seq_f

2017-11-17 09:34:07 1666

原创 关掉模块的验证CONFIG_MODULE_SIG

遇到下面的bug,是由于模块验证不通过造成的,有一个workaround的方法是在config文件中关掉CONFIG_MODULE_SIG 这个选项,系统就可以起来了[    9.827069] ------------[ cut here ]------------[    9.831763] kernel BUG at crypto/asymmetric_keys/public

2017-11-16 17:11:41 9884 6

原创 compute和schedule通过scheduler_client进行rpc通讯

compute和schedule 节点之前都是通过rpc来通讯的,例如在E:\nova\nova\compute\manager.py 中一般通过self.scheduler_client来和schedule 通讯,例如下面的例子 def _update_scheduler_instance_info(self, context, instance): """Sends

2017-11-16 14:06:25 738

原创 oslo_i18n

在nova中经常看到下面的code if requested_topology and not instance_topology: if pci_requests.requests: return (_("Requested instance NUMA topology together with "

2017-11-16 14:05:15 1429

原创 模块API之symbol_put_addr

void symbol_put_addr(void *addr)的作用是根据addr找到所在的模块,然后将模块的应用计数减1这里有假定addr是一个函数的地址。其源码如下:/* Note this assumes addr is a function, which it currently always is. */void symbol_put_addr(void *addr){ s

2017-11-16 08:45:26 707

原创 cherry-pick 多个commit

目前是把下面这19个comit id到另外的分支输入命令如下:完成后可以看到我自己的签名

2017-11-15 15:41:14 6076

原创 git warning: refname 'HEAD' is ambiguous

git statusgit warning: refname 'HEAD' is ambiguous需要这种情况直接删除HEAD 即可

2017-11-15 15:13:24 4729

原创 cherry-pick 主线commit 并修改commit log

首先通过git cherry-pick db46a72b9713fd -s 来merge你要和的commit并添加你自己的签名然后通过git rebase -i 872b1c066c(db46a72b9713fd的前一个commit id)然后将pick改成r就可以修改了然后将pick改成r就可以修改了最后修改成功

2017-11-15 15:11:54 1980

原创 模块API之__symbol_get/__symbol_put

__symbol_get/__symbol_put 是一对函数。分别用于根据一个symbol 找到对应的模块后,将模块的引用计数增加1或者减小1.其源码分析如下:void *__symbol_get(const char *symbol){ struct module *owner; const struct kernel_symbol *sym;//find_symbol 会查找

2017-11-15 08:44:43 2333

原创 ceph-deploy new

ceph-deploy new 命令用于开始部署新的集群,使用的例子如下:ceph-deploy new host-225 host-227 host-229执行成功后该目录下会增加三个文件[root@dn-5-221 ceph]# lltotal 12-rw-r--r-- 1 root root 276 Jun 26 22:01 ceph.conf-rw-r--r-- 1 roo

2017-11-14 14:31:58 2868

原创 importutils.import_class

在E:\nova\nova\service.py 中通过manager_class = importutils.import_class(self.manager_class_name) 得到一个class,然后就可以调用这个class例如:class Service(service.Service): """Service object for binaries running on

2017-11-14 14:31:01 2953

原创 nova中的service 访问数据库的过程

nova中的访问数据库的接口都在E:\nova\nova\db\api.py,但是该模块只是一个代理,只剩的实现是IMPLIMPL的赋值如下:_BACKEND_MAPPING = {'sqlalchemy': 'nova.db.sqlalchemy.api'}IMPL = concurrency.TpoolDbapiWrapper(CONF, backend_mapping=_BACKE

2017-11-14 14:27:02 2138

原创 模块API之each_symbol_section

bool each_symbol_section(bool (*fn)(const struct symsearch *arr, struct module *owner, void *data), void *data);函数用于在kernel中所有的symbol的区域执行fn这个函数,目前只有看到在find_symbol 这个函数中使用,用于找到对应的symb

2017-11-14 09:24:06 563

原创 模块API之register_module_notifier

int register_module_notifier(struct notifier_block *nb)函数用于注册需要知道当前模块的状态,然后触发一个回调函数使用的例子如下:static __init int jump_label_init_module(void){return register_module_notifier(&jump_label_module_n

2017-11-14 08:59:13 2478

原创 通过sysctl关掉oom

2017-11-10 15:24:54 1280

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除