Wednesday, January 20, 2016

Ansible : install ansible on Ubuntu

$ sudo apt-get install software-properties-common
$ sudo apt-add-repository ppa:ansible/ansible
$ sudo apt-get update
$ sudo apt-get install ansible

Friday, January 15, 2016

Ansible : Use pip to uprgade Ansible

# pip --proxy https://a.b.c.com:port search ansible
ansible-tower-cli             - A CLI tool for Ansible Tower.
org_wayround_pyeditor         - Simple extansible editor with projects and
                                outline
fabric-tb                     - Based on Fabric, use ansible-like config
                                files.
ansible-docgenerator          - Simple tool for generating ansible role
                                documentation
goodplay                      - goodplay enables you to test your deployments
                                and distributed software infrastructure by
                                reusing your existing knowledge of ansible.
winsible                      - A Faster Ansible (especially on Cygwin)
ansible-role-manager          - A tool for installing and managing Ansible
                                roles, playbooks & modules.
datemike                      - Create Ansible tasks, plays, and playbooks in
                                pure Python
ansible-shell                 - Interactive shell for ansible
ansible-test                  - UNKNOWN
ansible                       - Radically simple IT automation
  INSTALLED: 1.9.4
  LATEST:    2.0.0.2

augploy                       - AUGmentum dePLOYment automation tool, powered
                                by ansible
pytest-ansible                - Plugin for py.test to allow running ansible
ansible-conductor             - Dynamic inventory system for Ansible
snfinv                        - Dynamic ansible inventory for Synnefo IaaS
                                nodes
arpm                          - ansible package manager command line tool
ec2ansible                    - AWS EC2 inventory generator for Ansible
mr.awsome.ansible             - A plugin for mr.awsome providing integration
                                with Ansible.
clc-ansible-module            - Centurylink Cloud Ansible Modules
ansible-inventory-grapher     - Creates graphs representing ansible inventory
ansible-roles                 - Manage ansible roles.
ansible-toolkit               - The missing Ansible tools
ansible_role_apply            - Apply a single Ansible role to host(s) easily
pocker-ansible                - Collection of ansible plugins for docker
                                orchestration using pocker library
messier                       - Test Ansible roles with Vagrant, similar to
                                Test Kitchen
ansible_role_installer        - Install Ansible roles from Git repositories
kapellmeister-ansible         - Ansible Playbook manager.
ansible-cmdb                  - Generate host overview from ansible fact
                                gathering output
ansigenome                    - A tool to help you gather information and
                                manage your Ansible roles.
ansible-flow                  - Workflow tool to speed up interactions with
                                Ansible
ansibleci                     - Ansbile CI tests
galaxy-updater                - Retrieve the latest versions for all of your
                                ansible-galaxy role dependencies.
python-make-ansible           - python-make integration to ansible
ansible-vagrant               - Simple helper to use ansible with vagrant
molecule                      - Vagrant wrapper for testing Ansible roles
ansible-vault                 - R/W an ansible-vault yaml file
ansible-universe              - Ansible role build tool
ansiblator                    - Ansiblator - makes Ansible api more Pythonic
ludolph-ansible               - Ludolph: Ansible plugin
carthage-copy-frameworks      - Keyring integration and local execution
                                wrappers for Ansible
ansible-testing               - Python module and CLI to package and upload
                                python lambda functions to AWS Lambda.
supervisorclusterctl          - supervisorclusterctl is a cmd line tool that
                                allows to control a cluster of processes by
                                utilizing Supervisor and Ansible.
subspace                      - A pragmatic interface to programmatically use
                                Ansible.
tbcli                         - Based on Fabric, use ansible-like config
                                files.
ansiblereporter               - Scripts for ansible to report host output data
dork                          - Docker and ansible based development
                                containers.
mist.ansible                  - Ansible modules for the mist.io service
pyansible                     - A module for interfacing with Ansible Runner
                                and Inventory.
cyclosible                    - Cyclosible is a web-api to manage ansible
tory_client                   - client tools for the tory ansible inventory
ansible-lint                  - checks playbooks for practices and behaviour
                                that could potentially be improved
ploy_ansible                  - Plugin to integrate Ansible with ploy.
playbook_assistant            - Simple utility for Ansible playbook creation
                                and download
ansible-tools                 - Keyring integration and local execution
                                wrappers for Ansible
ansible-windows-compat        - Compatibility library to run Ansible Python
                                modules on a Windows target.
nexus_ansible                 - A random test lib
ansible-roles-graph           - Generate a graph of Ansible role dependencies.
futen                         - Conversion script to Ansible inventory file
                                from OpenSSH configuration
suitable                      - Suitable is a thin wrapper around the Ansible
                                API.
ansible-playbook-debugger     - Debugger for Ansible Playbook
sibl                          - Ansible skeleton generator.
ansible-docgen                - Generate Documentation from Annotated Ansible
                                Playbooks and Roles

# pip list | grep ansible
ansible (1.9.4)

# pip install ansible
Requirement already satisfied (use --upgrade to upgrade): ansible in /usr/lib/python2.7/site-packages
Requirement already satisfied (use --upgrade to upgrade): paramiko in /usr/lib/python2.7/site-packages (from ansible)
Requirement already satisfied (use --upgrade to upgrade): jinja2 in /usr/lib/python2.7/site-packages (from ansible)
Requirement already satisfied (use --upgrade to upgrade): PyYAML in /usr/lib64/python2.7/site-packages (from ansible)
Requirement already satisfied (use --upgrade to upgrade): setuptools in /usr/lib/python2.7/site-packages (from ansible)
Requirement already satisfied (use --upgrade to upgrade): pycrypto>=2.6 in /usr/lib64/python2.7/site-packages (from ansible)
Requirement already satisfied (use --upgrade to upgrade): ecdsa>=0.11 in /usr/lib/python2.7/site-packages (from paramiko->ansible)
Requirement already satisfied (use --upgrade to upgrade): MarkupSafe in /usr/lib/python2.7/site-packages (from jinja2->ansible)

# pip install ansible --upgrade --proxy https://a.b.c.com:port
Collecting ansible
  Downloading ansible-2.0.0.2.tar.gz (1.5MB)
    100% |████████████████████████████████| 1.5MB 208kB/s
Requirement already up-to-date: paramiko in /usr/lib/python2.7/site-packages (from ansible)
Requirement already up-to-date: jinja2 in /usr/lib/python2.7/site-packages (from ansible)
Requirement already up-to-date: PyYAML in /usr/lib64/python2.7/site-packages (from ansible)
Collecting setuptools (from ansible)
  Downloading setuptools-19.2-py2.py3-none-any.whl (463kB)
    100% |████████████████████████████████| 466kB 361kB/s
Requirement already up-to-date: pycrypto>=2.6 in /usr/lib64/python2.7/site-packages (from ansible)
Requirement already up-to-date: ecdsa>=0.11 in /usr/lib/python2.7/site-packages (from paramiko->ansible)
Requirement already up-to-date: MarkupSafe in /usr/lib/python2.7/site-packages (from jinja2->ansible)
Installing collected packages: setuptools, ansible
  Found existing installation: setuptools 18.8
    Uninstalling setuptools-18.8:
      Successfully uninstalled setuptools-18.8
  Found existing installation: ansible 1.9.4
    Uninstalling ansible-1.9.4:
      Successfully uninstalled ansible-1.9.4
  Running setup.py install for ansible
Successfully installed ansible-2.0.0.2 setuptools-19.2

# pip list | grep ansible
ansible (2.0.0.2)

Friday, January 8, 2016

Docker : build Ubuntu from Dockerfile

# ls -l
total 64240
-rw-r----- 1 root root     1383 Jan  8 13:39 Dockerfile
-rw-r----- 1 root root 65776957 Jan  8 13:40 ubuntu-trusty-core-cloudimg-amd64-root.tar.gz

These 2 files are downloaded from https://hub.docker.com/_/ubuntu/ (14.04)

# cat Dockerfile
FROM scratch
ADD ubuntu-trusty-core-cloudimg-amd64-root.tar.gz /

# a few minor docker-specific tweaks
# see https://github.com/docker/docker/blob/master/contrib/mkimage/debootstrap
RUN echo '#!/bin/sh' > /usr/sbin/policy-rc.d \
        && echo 'exit 101' >> /usr/sbin/policy-rc.d \
        && chmod +x /usr/sbin/policy-rc.d \
        \
        && dpkg-divert --local --rename --add /sbin/initctl \
        && cp -a /usr/sbin/policy-rc.d /sbin/initctl \
        && sed -i 's/^exit.*/exit 0/' /sbin/initctl \
        \
        && echo 'force-unsafe-io' > /etc/dpkg/dpkg.cfg.d/docker-apt-speedup \
        \
        && echo 'DPkg::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' > /etc/apt/apt.conf.d/docker-clean \
        && echo 'APT::Update::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' >> /etc/apt/apt.conf.d/docker-clean \
        && echo 'Dir::Cache::pkgcache ""; Dir::Cache::srcpkgcache "";' >> /etc/apt/apt.conf.d/docker-clean \
        \
        && echo 'Acquire::Languages "none";' > /etc/apt/apt.conf.d/docker-no-languages \
        \
        && echo 'Acquire::GzipIndexes "true"; Acquire::CompressionTypes::Order:: "gz";' > /etc/apt/apt.conf.d/docker-gzip-indexes

# enable the universe
RUN sed -i 's/^#\s*\(deb.*universe\)$/\1/g' /etc/apt/sources.list

# overwrite this with 'CMD []' in a dependent Dockerfile
CMD ["/bin/bash"]

---------------------------------
Now build ubuntu from Dockerfile

# docker build /tmp/ubuntu
Sending build context to Docker daemon 65.78 MB
Sending build context to Docker daemon
Step 0 : FROM scratch
 --->
Step 1 : ADD ubuntu-trusty-core-cloudimg-amd64-root.tar.gz /
 ---> 722fff301cf8
Removing intermediate container 3ac8f98d2503
Step 2 : RUN echo '#!/bin/sh' > /usr/sbin/policy-rc.d   && echo 'exit 101' >> /usr/sbin/policy-rc.d     && chmod +x /usr/sbin/policy-rc.d               && dpkg-divert --local --rename --add /sbin/initctl     && cp -a /usr/sbin/policy-rc.d /sbin/initctl    && sed -i 's/^exit.*/exit 0/' /sbin/initctl             && echo 'force-unsafe-io' > /etc/dpkg/dpkg.cfg.d/docker-apt-speedup             && echo 'DPkg::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' > /etc/apt/apt.conf.d/docker-clean   && echo 'APT::Update::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' >> /etc/apt/apt.conf.d/docker-clean   && echo 'Dir::Cache::pkgcache ""; Dir::Cache::srcpkgcache "";' >> /etc/apt/apt.conf.d/docker-clean              && echo 'Acquire::Languages "none";' > /etc/apt/apt.conf.d/docker-no-languages          && echo 'Acquire::GzipIndexes "true"; Acquire::CompressionTypes::Order:: "gz";' > /etc/apt/apt.conf.d/docker-gzip-indexes
 ---> Running in ca06d044f4ea
Adding 'local diversion of /sbin/initctl to /sbin/initctl.distrib'
 ---> c1007a188518
Removing intermediate container ca06d044f4ea
Step 3 : RUN sed -i 's/^#\s*\(deb.*universe\)$/\1/g' /etc/apt/sources.list
 ---> Running in 86a418b9a27f
 ---> e369918520d5
Removing intermediate container 86a418b9a27f
Step 4 : CMD /bin/bash
 ---> Running in b4e86758488e
 ---> 9d4dfcbd71bf
Removing intermediate container b4e86758488e
Successfully built 9d4dfcbd71bf

# docker images
REPOSITORY                              TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
<none>                                  <none>              9d4dfcbd71bf        5 minutes ago       187.9 MB
Fedora-Docker-Base-23-20151030.x86_64   latest              79c267013159        10 weeks ago        204.3 MB

# docker tag 9d4dfcbd71bf ubuntu:14.04
# docker images
REPOSITORY                              TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu                                  14.04               9d4dfcbd71bf        6 minutes ago       187.9 MB
Fedora-Docker-Base-23-20151030.x86_64   latest              79c267013159        10 weeks ago        204.3 MB
# docker tag 79c267013159 fedora:latest
# docker images
REPOSITORY                              TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu                                  14.04               9d4dfcbd71bf        8 minutes ago       187.9 MB
Fedora-Docker-Base-23-20151030.x86_64   latest              79c267013159        10 weeks ago        204.3 MB
fedora                                  latest              79c267013159        10 weeks ago        204.3 MB
# docker rmi Fedora-Docker-Base-23-20151030.x86_64
Untagged: Fedora-Docker-Base-23-20151030.x86_64:latest
# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu              14.04               9d4dfcbd71bf        9 minutes ago       187.9 MB
fedora              latest              79c267013159        10 weeks ago        204.3 MB


Wednesday, January 6, 2016

Hadoop : Rack Awareness

https://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-common/core-default.xml

To embed the rack number into the hostnames could be an option.

Check out:
net.topology.node.switch.mapping.impl
net.topology.script.file.name

https://hadoop.apache.org/docs/r1.2.1/cluster_setup.html
Hadoop Rack Awareness
The HDFS and the Map/Reduce components are rack-aware.

The NameNode and the JobTracker obtains the rack id of the slaves in the cluster by invoking an API resolve in an administrator configured module. The API resolves the slave's DNS name (also IP address) to a rack id. What module to use can be configured using the configuration item topology.node.switch.mapping.impl. The default implementation of the same runs a script/command configured using topology.script.file.name. If topology.script.file.name is not set, the rack id /default-rack is returned for any passed IP address. The additional configuration in the Map/Reduce part is mapred.cache.task.levels which determines the number of levels (in the network topology) of caches. So, for example, if it is the default value of 2, two levels of caches will be constructed - one for hosts (host -> task mapping) and another for racks (rack -> task mapping).

Friday, January 1, 2016

Linux : kernel code : task_struct

version : linux-4.3.3

file : include/linux/sched.h

struct task_struct {
        volatile long state;    /* -1 unrunnable, 0 runnable, >0 stopped */
        void *stack;
        atomic_t usage;
        unsigned int flags;     /* per process flags, defined below */
        unsigned int ptrace;

#ifdef CONFIG_SMP
        struct llist_node wake_entry;
        int on_cpu;
        unsigned int wakee_flips;
        unsigned long wakee_flip_decay_ts;
        struct task_struct *last_wakee;

        int wake_cpu;
#endif
        int on_rq;

        int prio, static_prio, normal_prio;
        unsigned int rt_priority;
        const struct sched_class *sched_class;
        struct sched_entity se;
        struct sched_rt_entity rt;
#ifdef CONFIG_CGROUP_SCHED
        struct task_group *sched_task_group;
#endif
        struct sched_dl_entity dl;

#ifdef CONFIG_PREEMPT_NOTIFIERS
        /* list of struct preempt_notifier: */
        struct hlist_head preempt_notifiers;
#endif

#ifdef CONFIG_BLK_DEV_IO_TRACE
        unsigned int btrace_seq;
#endif

        unsigned int policy;
        int nr_cpus_allowed;
        cpumask_t cpus_allowed;

#ifdef CONFIG_PREEMPT_RCU
        int rcu_read_lock_nesting;
        union rcu_special rcu_read_unlock_special;
        struct list_head rcu_node_entry;
        struct rcu_node *rcu_blocked_node;
#endif /* #ifdef CONFIG_PREEMPT_RCU */
#ifdef CONFIG_TASKS_RCU
        unsigned long rcu_tasks_nvcsw;
        bool rcu_tasks_holdout;
        struct list_head rcu_tasks_holdout_list;
        int rcu_tasks_idle_cpu;
#endif /* #ifdef CONFIG_TASKS_RCU */

#ifdef CONFIG_SCHED_INFO
        struct sched_info sched_info;
#endif

        struct list_head tasks;
#ifdef CONFIG_SMP
        struct plist_node pushable_tasks;
        struct rb_node pushable_dl_tasks;
#endif

        struct mm_struct *mm, *active_mm;
        /* per-thread vma caching */
        u32 vmacache_seqnum;
        struct vm_area_struct *vmacache[VMACACHE_SIZE];
#if defined(SPLIT_RSS_COUNTING)
        struct task_rss_stat    rss_stat;
#endif
/* task state */
        int exit_state;
        int exit_code, exit_signal;
        int pdeath_signal;  /*  The signal sent when the parent dies  */
        unsigned long jobctl;   /* JOBCTL_*, siglock protected */

        /* Used for emulating ABI behavior of previous Linux versions */
        unsigned int personality;

        unsigned in_execve:1;   /* Tell the LSMs that the process is doing an
                                 * execve */
        unsigned in_iowait:1;

        /* Revert to default priority/policy when forking */
        unsigned sched_reset_on_fork:1;
        unsigned sched_contributes_to_load:1;
        unsigned sched_migrated:1;

#ifdef CONFIG_MEMCG_KMEM
        unsigned memcg_kmem_skip_account:1;
#endif
#ifdef CONFIG_COMPAT_BRK
        unsigned brk_randomized:1;
#endif

        unsigned long atomic_flags; /* Flags needing atomic access. */

        struct restart_block restart_block;

        pid_t pid;
        pid_t tgid;

#ifdef CONFIG_CC_STACKPROTECTOR
        /* Canary value for the -fstack-protector gcc feature */
        unsigned long stack_canary;
#endif
        /*
         * pointers to (original) parent process, youngest child, younger sibling,
         * older sibling, respectively.  (p->father can be replaced with
         * p->real_parent->pid)
         */
        struct task_struct __rcu *real_parent; /* real parent process */
        struct task_struct __rcu *parent; /* recipient of SIGCHLD, wait4() reports */
        /*
         * children/sibling forms the list of my natural children
         */
        struct list_head children;      /* list of my children */
        struct list_head sibling;       /* linkage in my parent's children list */
        struct task_struct *group_leader;       /* threadgroup leader */

        /*
         * ptraced is the list of tasks this task is using ptrace on.
         * This includes both natural children and PTRACE_ATTACH targets.
         * p->ptrace_entry is p's link on the p->parent->ptraced list.
         */
        struct list_head ptraced;
        struct list_head ptrace_entry;

        /* PID/PID hash table linkage. */
        struct pid_link pids[PIDTYPE_MAX];
        struct list_head thread_group;
        struct list_head thread_node;

        struct completion *vfork_done;          /* for vfork() */
        int __user *set_child_tid;              /* CLONE_CHILD_SETTID */
        int __user *clear_child_tid;            /* CLONE_CHILD_CLEARTID */

        cputime_t utime, stime, utimescaled, stimescaled;
        cputime_t gtime;
        struct prev_cputime prev_cputime;
#ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN
        seqlock_t vtime_seqlock;
        unsigned long long vtime_snap;
        enum {
                VTIME_SLEEPING = 0,
                VTIME_USER,
                VTIME_SYS,
        } vtime_snap_whence;
#endif
        unsigned long nvcsw, nivcsw; /* context switch counts */
        u64 start_time;         /* monotonic time in nsec */
        u64 real_start_time;    /* boot based time in nsec */
/* mm fault and swap info: this can arguably be seen as either mm-specific or thread-specific */
        unsigned long min_flt, maj_flt;

        struct task_cputime cputime_expires;
        struct list_head cpu_timers[3];

/* process credentials */
        const struct cred __rcu *real_cred; /* objective and real subjective task
                                         * credentials (COW) */
        const struct cred __rcu *cred;  /* effective (overridable) subjective task
                                         * credentials (COW) */
        char comm[TASK_COMM_LEN]; /* executable name excluding path
                                     - access with [gs]et_task_comm (which lock
                                       it with task_lock())
                                     - initialized normally by setup_new_exec */
/* file system info */
        struct nameidata *nameidata;
#ifdef CONFIG_SYSVIPC
/* ipc stuff */
        struct sysv_sem sysvsem;
        struct sysv_shm sysvshm;
#endif
#ifdef CONFIG_DETECT_HUNG_TASK
/* hung task detection */
        unsigned long last_switch_count;
#endif
/* filesystem information */
        struct fs_struct *fs;
/* open file information */
        struct files_struct *files;
/* namespaces */
        struct nsproxy *nsproxy;
/* signal handlers */
        struct signal_struct *signal;
        struct sighand_struct *sighand;

        sigset_t blocked, real_blocked;
        sigset_t saved_sigmask; /* restored if set_restore_sigmask() was used */
        struct sigpending pending;

        unsigned long sas_ss_sp;
        size_t sas_ss_size;
        int (*notifier)(void *priv);
        void *notifier_data;
        sigset_t *notifier_mask;
        struct callback_head *task_works;

        struct audit_context *audit_context;
#ifdef CONFIG_AUDITSYSCALL
        kuid_t loginuid;
        unsigned int sessionid;
#endif
        struct seccomp seccomp;

/* Thread group tracking */
        u32 parent_exec_id;
        u32 self_exec_id;
/* Protection of (de-)allocation: mm, files, fs, tty, keyrings, mems_allowed,
 * mempolicy */
        spinlock_t alloc_lock;

        /* Protection of the PI data structures: */
        raw_spinlock_t pi_lock;

        struct wake_q_node wake_q;

#ifdef CONFIG_RT_MUTEXES
        /* PI waiters blocked on a rt_mutex held by this task */
        struct rb_root pi_waiters;
        struct rb_node *pi_waiters_leftmost;
        /* Deadlock detection and priority inheritance handling */
        struct rt_mutex_waiter *pi_blocked_on;
#endif

#ifdef CONFIG_DEBUG_MUTEXES
        /* mutex deadlock detection */
        struct mutex_waiter *blocked_on;
#endif
#ifdef CONFIG_TRACE_IRQFLAGS
        unsigned int irq_events;
        unsigned long hardirq_enable_ip;
        unsigned long hardirq_disable_ip;
        unsigned int hardirq_enable_event;
        unsigned int hardirq_disable_event;
        int hardirqs_enabled;
        int hardirq_context;
        unsigned long softirq_disable_ip;
        unsigned long softirq_enable_ip;
        unsigned int softirq_disable_event;
        unsigned int softirq_enable_event;
        int softirqs_enabled;
        int softirq_context;
#endif
#ifdef CONFIG_LOCKDEP
# define MAX_LOCK_DEPTH 48UL
        u64 curr_chain_key;
        int lockdep_depth;
        unsigned int lockdep_recursion;
        struct held_lock held_locks[MAX_LOCK_DEPTH];
        gfp_t lockdep_reclaim_gfp;
#endif

/* journalling filesystem info */
        void *journal_info;

/* stacked block device info */
        struct bio_list *bio_list;

#ifdef CONFIG_BLOCK
/* stack plugging */
        struct blk_plug *plug;
#endif

/* VM state */
        struct reclaim_state *reclaim_state;

        struct backing_dev_info *backing_dev_info;

        struct io_context *io_context;

        unsigned long ptrace_message;
        siginfo_t *last_siginfo; /* For ptrace use.  */
        struct task_io_accounting ioac;
#if defined(CONFIG_TASK_XACCT)
        u64 acct_rss_mem1;      /* accumulated rss usage */
        u64 acct_vm_mem1;       /* accumulated virtual memory usage */
        cputime_t acct_timexpd; /* stime + utime since last update */
#endif
#ifdef CONFIG_CPUSETS
        nodemask_t mems_allowed;        /* Protected by alloc_lock */
        seqcount_t mems_allowed_seq;    /* Seqence no to catch updates */
        int cpuset_mem_spread_rotor;
        int cpuset_slab_spread_rotor;
#endif
#ifdef CONFIG_CGROUPS
        /* Control Group info protected by css_set_lock */
        struct css_set __rcu *cgroups;
        /* cg_list protected by css_set_lock and tsk->alloc_lock */
        struct list_head cg_list;
#endif
#ifdef CONFIG_FUTEX
        struct robust_list_head __user *robust_list;
#ifdef CONFIG_COMPAT
        struct compat_robust_list_head __user *compat_robust_list;
#endif
        struct list_head pi_state_list;
        struct futex_pi_state *pi_state_cache;
#endif
#ifdef CONFIG_PERF_EVENTS
        struct perf_event_context *perf_event_ctxp[perf_nr_task_contexts];
        struct mutex perf_event_mutex;
        struct list_head perf_event_list;
#endif
#ifdef CONFIG_DEBUG_PREEMPT
        unsigned long preempt_disable_ip;
#endif
#ifdef CONFIG_NUMA
        struct mempolicy *mempolicy;    /* Protected by alloc_lock */
        short il_next;
        short pref_node_fork;
#endif
#ifdef CONFIG_NUMA_BALANCING
        int numa_scan_seq;
        unsigned int numa_scan_period;
        unsigned int numa_scan_period_max;
        int numa_preferred_nid;
        unsigned long numa_migrate_retry;
        u64 node_stamp;                 /* migration stamp  */
        u64 last_task_numa_placement;
        u64 last_sum_exec_runtime;
        struct callback_head numa_work;

        struct list_head numa_entry;
        struct numa_group *numa_group;

        /*
         * numa_faults is an array split into four regions:
         * faults_memory, faults_cpu, faults_memory_buffer, faults_cpu_buffer
         * in this precise order.
         *
         * faults_memory: Exponential decaying average of faults on a per-node
         * basis. Scheduling placement decisions are made based on these
         * counts. The values remain static for the duration of a PTE scan.
         * faults_cpu: Track the nodes the process was running on when a NUMA
         * hinting fault was incurred.
         * faults_memory_buffer and faults_cpu_buffer: Record faults per node
         * during the current scan window. When the scan completes, the counts
         * in faults_memory and faults_cpu decay and these values are copied.
         */
        unsigned long *numa_faults;
        unsigned long total_numa_faults;

        /*
         * numa_faults_locality tracks if faults recorded during the last
         * scan window were remote/local or failed to migrate. The task scan
         * period is adapted based on the locality of the faults with different
         * weights depending on whether they were shared or private faults
         */
        unsigned long numa_faults_locality[3];

        unsigned long numa_pages_migrated;
#endif /* CONFIG_NUMA_BALANCING */

#ifdef CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH
        struct tlbflush_unmap_batch tlb_ubc;
#endif

        struct rcu_head rcu;

        /*
         * cache last used pipe for splice
         */
        struct pipe_inode_info *splice_pipe;

        struct page_frag task_frag;

#ifdef  CONFIG_TASK_DELAY_ACCT
        struct task_delay_info *delays;
#endif
#ifdef CONFIG_FAULT_INJECTION
        int make_it_fail;
#endif
        /*
         * when (nr_dirtied >= nr_dirtied_pause), it's time to call
         * balance_dirty_pages() for some dirty throttling pause
         */
        int nr_dirtied;
        int nr_dirtied_pause;
        unsigned long dirty_paused_when; /* start of a write-and-pause period */

#ifdef CONFIG_LATENCYTOP
        int latency_record_count;
        struct latency_record latency_record[LT_SAVECOUNT];
#endif
        /*
         * time slack values; these are used to round up poll() and
         * select() etc timeout values. These are in nanoseconds.
         */
        unsigned long timer_slack_ns;
        unsigned long default_timer_slack_ns;

#ifdef CONFIG_KASAN
        unsigned int kasan_depth;
#endif
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
        /* Index of current stored address in ret_stack */
        int curr_ret_stack;
        /* Stack of return addresses for return function tracing */
        struct ftrace_ret_stack *ret_stack;
        /* time stamp for last schedule */
        unsigned long long ftrace_timestamp;
        /*
         * Number of functions that haven't been traced
         * because of depth overrun.
         */
        atomic_t trace_overrun;
        /* Pause for the tracing */
        atomic_t tracing_graph_pause;
#endif
#ifdef CONFIG_TRACING
        /* state flags for use by tracers */
        unsigned long trace;
        /* bitmask and counter of trace recursion */
        unsigned long trace_recursion;
#endif /* CONFIG_TRACING */
#ifdef CONFIG_MEMCG
        struct memcg_oom_info {
                struct mem_cgroup *memcg;
                gfp_t gfp_mask;
                int order;
                unsigned int may_oom:1;
        } memcg_oom;
#endif
#ifdef CONFIG_UPROBES
        struct uprobe_task *utask;
#endif
#if defined(CONFIG_BCACHE) || defined(CONFIG_BCACHE_MODULE)
        unsigned int    sequential_io;
        unsigned int    sequential_io_avg;
#endif
#ifdef CONFIG_DEBUG_ATOMIC_SLEEP
        unsigned long   task_state_change;
#endif
        int pagefault_disabled;
/* CPU-specific state of this task */
        struct thread_struct thread;
/*
 * WARNING: on x86, 'thread_struct' contains a variable-sized
 * structure.  It *MUST* be at the end of 'task_struct'.
 *
 * Do not put anything below here!
 */
};

Linux : kernel code : inode

version : linux-4.3.3
file : linux/fs.h

struct inode {
        umode_t                 i_mode;
        unsigned short          i_opflags;
        kuid_t                  i_uid;
        kgid_t                  i_gid;
        unsigned int            i_flags;

#ifdef CONFIG_FS_POSIX_ACL
        struct posix_acl        *i_acl;
        struct posix_acl        *i_default_acl;
#endif

        const struct inode_operations   *i_op;
        struct super_block      *i_sb;
        struct address_space    *i_mapping;

#ifdef CONFIG_SECURITY
        void                    *i_security;
#endif

        /* Stat data, not accessed from path walking */
        unsigned long           i_ino;
        /*
         * Filesystems may only read i_nlink directly.  They shall use the
         * following functions for modification:
         *
         *    (set|clear|inc|drop)_nlink
         *    inode_(inc|dec)_link_count
         */
        union {
                const unsigned int i_nlink;
                unsigned int __i_nlink;
        };
        dev_t                   i_rdev;
        loff_t                  i_size;
        struct timespec         i_atime;
        struct timespec         i_mtime;
        struct timespec         i_ctime;
        spinlock_t              i_lock; /* i_blocks, i_bytes, maybe i_size */
        unsigned short          i_bytes;
        unsigned int            i_blkbits;
        blkcnt_t                i_blocks;

#ifdef __NEED_I_SIZE_ORDERED
        seqcount_t              i_size_seqcount;
#endif

        /* Misc */
        unsigned long           i_state;
        struct mutex            i_mutex;

        unsigned long           dirtied_when;   /* jiffies of first dirtying */
        unsigned long           dirtied_time_when;

        struct hlist_node       i_hash;
        struct list_head        i_io_list;      /* backing dev IO list */
#ifdef CONFIG_CGROUP_WRITEBACK
        struct bdi_writeback    *i_wb;          /* the associated cgroup wb */

        /* foreign inode detection, see wbc_detach_inode() */
        int                     i_wb_frn_winner;
        u16                     i_wb_frn_avg_time;
        u16                     i_wb_frn_history;
#endif
        struct list_head        i_lru;          /* inode LRU list */
        struct list_head        i_sb_list;
        union {
                struct hlist_head       i_dentry;
                struct rcu_head         i_rcu;
        };
        u64                     i_version;
        atomic_t                i_count;
        atomic_t                i_dio_count;
        atomic_t                i_writecount;
#ifdef CONFIG_IMA
        atomic_t                i_readcount; /* struct files open RO */
#endif
        const struct file_operations    *i_fop; /* former ->i_op->default_file_ops */
        struct file_lock_context        *i_flctx;
        struct address_space    i_data;
        struct list_head        i_devices;
        union {
                struct pipe_inode_info  *i_pipe;
                struct block_device     *i_bdev;
                struct cdev             *i_cdev;
                char                    *i_link;
        };

        __u32                   i_generation;

#ifdef CONFIG_FSNOTIFY
        __u32                   i_fsnotify_mask; /* all events this inode cares about */
        struct hlist_head       i_fsnotify_marks;
#endif

        void                    *i_private; /* fs or device private pointer */
};