Lines Matching defs:td

15 void fio_unpin_memory(struct thread_data *td)
17 if (td->pinned_mem) {
18 dprint(FD_MEM, "unpinning %llu bytes\n", td->o.lockmem);
19 if (munlock(td->pinned_mem, td->o.lockmem) < 0)
21 munmap(td->pinned_mem, td->o.lockmem);
22 td->pinned_mem = NULL;
26 int fio_pin_memory(struct thread_data *td)
30 if (!td->o.lockmem)
33 dprint(FD_MEM, "pinning %llu bytes\n", td->o.lockmem);
40 if ((td->o.lockmem + 128 * 1024 * 1024) > phys_mem) {
41 td->o.lockmem = phys_mem - 128 * 1024 * 1024;
43 td->o.lockmem >> 20);
47 td->pinned_mem = mmap(NULL, td->o.lockmem, PROT_READ | PROT_WRITE,
49 if (td->pinned_mem == MAP_FAILED) {
51 td->pinned_mem = NULL;
54 if (mlock(td->pinned_mem, td->o.lockmem) < 0) {
56 munmap(td->pinned_mem, td->o.lockmem);
57 td->pinned_mem = NULL;
64 static int alloc_mem_shm(struct thread_data *td, unsigned int total_mem)
68 if (td->o.mem_type == MEM_SHMHUGE) {
69 unsigned long mask = td->o.hugepage_size - 1;
75 td->shm_id = shmget(IPC_PRIVATE, total_mem, flags);
76 dprint(FD_MEM, "shmget %u, %d\n", total_mem, td->shm_id);
77 if (td->shm_id < 0) {
78 td_verror(td, errno, "shmget");
81 if (td->o.mem_type == MEM_SHMHUGE) {
98 td->orig_buffer = shmat(td->shm_id, NULL, 0);
99 dprint(FD_MEM, "shmat %d, %p\n", td->shm_id, td->orig_buffer);
100 if (td->orig_buffer == (void *) -1) {
101 td_verror(td, errno, "shmat");
102 td->orig_buffer = NULL;
109 static void free_mem_shm(struct thread_data *td)
113 dprint(FD_MEM, "shmdt/ctl %d %p\n", td->shm_id, td->orig_buffer);
114 shmdt(td->orig_buffer);
115 shmctl(td->shm_id, IPC_RMID, &sbuf);
118 static int alloc_mem_mmap(struct thread_data *td, size_t total_mem)
122 td->mmapfd = 1;
124 if (td->o.mem_type == MEM_MMAPHUGE) {
125 unsigned long mask = td->o.hugepage_size - 1;
128 if (!td->o.mmapfile)
133 if (td->o.mmapfile) {
134 td->mmapfd = open(td->o.mmapfile, O_RDWR|O_CREAT, 0644);
136 if (td->mmapfd < 0) {
137 td_verror(td, errno, "open mmap file");
138 td->orig_buffer = NULL;
141 if (td->o.mem_type != MEM_MMAPHUGE &&
142 ftruncate(td->mmapfd, total_mem) < 0) {
143 td_verror(td, errno, "truncate mmap file");
144 td->orig_buffer = NULL;
147 if (td->o.mem_type == MEM_MMAPHUGE)
154 td->orig_buffer = mmap(NULL, total_mem, PROT_READ | PROT_WRITE, flags,
155 td->mmapfd, 0);
157 td->mmapfd, td->orig_buffer);
158 if (td->orig_buffer == MAP_FAILED) {
159 td_verror(td, errno, "mmap");
160 td->orig_buffer = NULL;
161 if (td->mmapfd != 1) {
162 close(td->mmapfd);
163 if (td->o.mmapfile)
164 unlink(td->o.mmapfile);
173 static void free_mem_mmap(struct thread_data *td, size_t total_mem)
176 td->orig_buffer);
177 munmap(td->orig_buffer, td->orig_buffer_size);
178 if (td->o.mmapfile) {
179 close(td->mmapfd);
180 unlink(td->o.mmapfile);
181 free(td->o.mmapfile);
185 static int alloc_mem_malloc(struct thread_data *td, size_t total_mem)
187 td->orig_buffer = malloc(total_mem);
189 td->orig_buffer);
191 return td->orig_buffer == NULL;
194 static void free_mem_malloc(struct thread_data *td)
196 dprint(FD_MEM, "free malloc mem %p\n", td->orig_buffer);
197 free(td->orig_buffer);
203 int allocate_io_mem(struct thread_data *td)
208 if (td->io_ops->flags & FIO_NOIO)
211 total_mem = td->orig_buffer_size;
213 if (td->o.odirect || td->o.mem_align || td->o.oatomic ||
214 (td->io_ops->flags & FIO_MEMALIGN)) {
216 if (td->o.mem_align && td->o.mem_align > page_size)
217 total_mem += td->o.mem_align - page_size;
222 if (td->o.mem_type == MEM_MALLOC)
223 ret = alloc_mem_malloc(td, total_mem);
224 else if (td->o.mem_type == MEM_SHM || td->o.mem_type == MEM_SHMHUGE)
225 ret = alloc_mem_shm(td, total_mem);
226 else if (td->o.mem_type == MEM_MMAP || td->o.mem_type == MEM_MMAPHUGE)
227 ret = alloc_mem_mmap(td, total_mem);
229 log_err("fio: bad mem type: %d\n", td->o.mem_type);
234 td_verror(td, ENOMEM, "iomem allocation");
239 void free_io_mem(struct thread_data *td)
243 total_mem = td->orig_buffer_size;
244 if (td->o.odirect || td->o.oatomic)
247 if (td->o.mem_type == MEM_MALLOC)
248 free_mem_malloc(td);
249 else if (td->o.mem_type == MEM_SHM || td->o.mem_type == MEM_SHMHUGE)
250 free_mem_shm(td);
251 else if (td->o.mem_type == MEM_MMAP || td->o.mem_type == MEM_MMAPHUGE)
252 free_mem_mmap(td, total_mem);
254 log_err("Bad memory type %u\n", td->o.mem_type);
256 td->orig_buffer = NULL;
257 td->orig_buffer_size = 0;