- 博客(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 3388 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 1591
原创 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 1810
原创 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 1301
原创 进程管理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 2243
原创 进程管理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 3890
原创 进程管理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 4271
原创 进程管理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 3034
原创 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 3127
原创 进程管理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 1614
原创 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 6158
原创 进程管理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 2259
原创 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 22793 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 1382
原创 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 3019
原创 模块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 1032
原创 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 1671
原创 关掉模块的验证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 9892 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 1431
原创 模块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
原创 git warning: refname 'HEAD' is ambiguous
git statusgit warning: refname 'HEAD' is ambiguous需要这种情况直接删除HEAD 即可
2017-11-15 15:13:24 4730
原创 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 2336
原创 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
EDK_II_UserManual_0_7.pdf
2017-03-24
EDK_II Module Writer_s Guide_0_7.pdf
2017-03-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人