 רגע, נד PP אוקיי אני just wanted to wait כשאתה서� בבית דעת מהמדריניקה נגדיר בלבן מהמדריניקה על אחר מהנכון זמן שביל Peteahh מיקלוש אקשה לראות מהסדה, שהגיעה הולך. כאן הוא דייביד, של מיום נתן, דייביד עשו על זה, משהו קראתי, אבל זה לא נשמע, אנחנו עוד כך עושים, חושבים שבאים שישים שני דייבידים, כמו קרות של קרות של קפי ג'פגי, מגן משלטי, אני לא יודע, יש שני דייבידים, מולטיפל היסט קססטות שהייתה את האפי-איי, אנחנו צריכים להסתכל את האפי-איי, ככה גם סטיף פרנצ'ה רפה להסתכל את הסטטאקס. ומולטיפל היסטים שהייתה, מולטיפל דיפרנטים, זה כמובן כדי להתחיל את הארכיטקטיורים שכמובן על האפי-איי, שכמובן על זה, גרג כך כך מאוד נחמד על איך את האפי-איי שילדה, או איך זה שילדה לא נראה, לא בינרי, לנס כך גם נחמד על זה. אני לא נכון שכמובן, אבל את האפי-איי, אני תלך מיקלוס להסתכל על זה, אבל הסטטוס הרי נראה איזה פאצ' סאט, כמו פאוסי, שמיקלוש הוא, אני חייבה, אני חייבה בגלל שלי, ודיו צ'ינר, שמלכת את השביל הזה, הוא גם חייבה. וגרג, הוא לא חייבה, אז אני חושב שזה חייבה. ומיקלוש, אתה רוצה לתת את זה כאן? אז, זה הולך לסמיטרציה, וזה הלטסט, ובסקל, זה על ידי לסמיטים, או סטטיסטיקסים, של איזה פאצ' סאט, כמו פאצ' סאט, או פאצ' סאט, אבל זה could be other objects like processes or basically anything. and it seems there's not, there are several interfaces for this. There's not, and each one has a different way of accessing these attributes. וזה נחי להתיים אישה ידן בים אינטרפיה לףה כאלה. ובעצם, זמן הלב הוא באסס פרופוזר, אסס פרופזר, אבל הוא באסס פרופזר, מגלל האסס פרופזר. ואז או לבדותום משקולים של התגבר, לימוש לך טעל, There are little differences that, for example, least, etc. does not work on these attributes. Because that would break some legacy things for one. And least etc. isn't ... It lists just all the attributes in one go. אבל אנחנו צריכים לצליח משהו שזה חייראקי, שזה חייראקי, אז זו פרופוי אינטרפאסיה יש את כל את כל הזכות, ואחרון היה, כדי אינטרפאסיה, שזה לא נבאל enough, לא נהבד enough because you'd have to retrieve individual attributes. But I don't know. I think this would have to be tested. And so this could be extended to retrieve more than one attribute at a time. If it wasn't fast enough. So that's the proposal. And it's not just forget, right? I mean, the same structure can be used for set, for specific values. Right. So it could be used for setting attributes as well as getting them. I think at this point what we want to know, is there any objection? Can we go forward with this? I have just a couple of objections. Firstly, or what? Potential objections. I don't know that they're, well, that it's certainly surmountable. Firstly, get a factory does not necessarily have the right security checks on it. Really, for some of these things we want either no security checks, because they're just general VFS stuff about your environment. Or we want a STAT type security check. Wait, can I answer that? So FSTAT, because GEDEX STATR traditionally has different security checks per namespace, right? Trusted and security. So it could be the same. Yeah, and there's also LSM checks on it, if I remember rightly. What? Yes. LSM, security, SE Linux type checks that are different ones on StataFest. But I don't remember whether you can alter them by label. It may apply to all GEDEX STATRs no matter what you're doing with them. But we could look at the namespace and do something different. I mean, that's what we've done so far with the namespaces that exist. That's what we've done. Another objection is I would prefer it for things we want to get quickly to be a number rather than a string, because if you've got a lot of things going stricum, stricum, stricum, stricum, stricum, stricum. That's a lot slower than just here's a number index it with a switch. That we would need to benchmark in some way. Another one is I have had messages from people saying they liked FSMFO, particularly as the stuff came out in binary form. And they didn't get text out that they then had to pass. So it has been preferences for binary data rather than text data. On the other end, you have people wanting to use bash scripts. Your top example has a zero sitting in the middle of the string. That's going to confuse an awful lot of parses. They've got escape characters in them, which isn't bad, the representation. Is there actually a zero sitting in that string? Or is it just a slash and two through zero? No, it's zeros. This is the proposal. Zeros can be handled in shell scripts, but that's the proposal. Right, but now you have an encoding thing on top of this that's doing. And my view of the issue for binary and performance is I think this is a generic interface that could be simply and flexible. And if you have a specific use case that needs performance, you need to demonstrate your use case and then have another interface. So we have a use case for system reading the list of mounts. That's bad. We do a B tree, right? We can do a strings and a B tree and then it's an O log N search instead of a... We don't have to do stracum, stracum, stracum. We can do a B tree search. No, this was getting a list of things out. Yeah, but think about it this way. Most of the people don't have thousands of mounts, right? So most of the people can read the list of mounts in this interface and you can introduce another interface for performance. So in that case, why do we need the first interface? This interface is generic, it's not only for you, it's really your case, right? It's a generic way to extend a way to get and set properties. Right, so a couple of observations here, right? This appears to be something which is useful if you want to find out what is the mount point on a particular file or a directory. It is designed for getting all of the mount points. Thousands of mount points are a reality. Those exist on my production servers all the time. And so, but this interface doesn't, I think, address that, right? This interface is about what is the mount point for that file, right? And so I think the GetF adder, this is the non-controversial part. This example is not... Once we start giving into setf adder, right, there's going to be all the questions about what can you actually add as things that you can set, what are the permissions on it, what are the introspection questions, and if we don't get the set part right, Louise will be up here talking about how this was an evil interface just as bad as Ioptal, right? Because it can go there, right? And so I'm not particularly worried if it's only about GetMeTheMountPoint, GetMeTheMountInfo for a particular directory. It's the camel under the nose about this could be used for arbitrary set that scares me. And until we see concrete examples of the set, I don't think it would be wise to give a blanket, you know, carte blanche for whatever the hell you want. You don't have to allow everything that has a get to have a corresponding set. Yeah, it's similar to system fest in that way, yeah. It's, in this particular case for this API, I think it's really important that the system D guys voice their opinion and have a say on the threat because they have real issues with this. I know that Ian Kent has been on a threat with the system D. There is a longstanding bug. I don't have to link ready, sorry. And there's a longstanding bug in system D where they have issues with mount notifications and getting mount properties and so on and also serious performance issues that they have with this because system D is indeed dealing in certain production workloads with thousands, 10 thousands of mounts or more even. And that has been one of the motivating factors for the FSInfo style type. I'm not saying this can't be solved with this type of API, but it is something that I think we should try to address rather early on. That particular use case, I suppose, we could just give a sys call for it, sys get mount list. I don't think we need to solve all the problems. I mean, this solve... It is a problem we need to solve. Yes, but it doesn't need to be solved by this. True. All the complaints here are just and I think maybe it's not the right interface for listing the mounts, but nevertheless, it's useful for other things. Okay, so let me just say that I think the performance issues that system D is having mainly come from the current interface of having to read the complete list of mounts and their properties. And even if just a single change in that list was done, it would have to parse the complete file to be able to determine what changed in that mount. So basically... Current notification tells you something changed. So you have to read the entire file. Yes, so you'd have to have some notification about what changed and then I think this interface would be enough because you wouldn't have to parse all the... reparse all the mounts, just the ones, one which did change. Yes, you do. Well, you need that capability because there's the possibility that you're eventful overrun. And then you have to reread the whole lot. Yes, but the thing I added with this info was just a simple, basically a three-column list of all the mounts on the system, the parent, and the last time it was changed. And that gave a huge speed-up. I don't remember the numbers that Ian got out of it. But that could be a separate syscall that you don't have to go through GetFata. So I think it's a different problem having a proper notification for which mount is changed. And yes, that is also important. I just wanted to mention that if it wasn't clear, the example shows information from a static hierarchy, but the idea is to be able to extend this flexibly and like every file system can have its own namespace. And if sys has virtual GetExactor, sys has sys.something or is it user sys.something to export, to get and set information on the server. And that is great. And it could be standardized. Every file system could have its own little things and lsatter chatter could also fit in this model. So I was just thinking, I mean, forgetting the namespace question for a second, but going down to the middle, the mount info, how would I do this today? And my first thought is, okay, I'd look at proc mounts. Well, proc mounts doesn't... Mount info. Proc? Proc be adding mount info. Proc, whatever, mount info. So it's interesting because you can see the list of mounts. You can figure it out. It's a little bit of code, but not a lot. And what you'll see though is not that. What you'll see is what... So, for example, let's say you mounted... You'll see the mount options as they resolved, but things like R-size, sometimes R-size, there are certain things that are negotiated at mount time that will show up there. So you'll see the effective mount, not what you specified on mount, which is maybe what you want, right? So today, if I wanted that info, I can look at the mount and I can see the mount options as the... Effective mount. The effective mount options, right. Which is a combination of the file system properties and the mount properties. Right. I envision this as... You will be able to do something like this, get info dash FS or dash MNT, and get the components of the mount options, or even set the components of the mount options. That's how I envision it. But there's a second part of this that I think kind of matters, especially given all the people are outside this room right now, over there. One is that to understand your mount, whether it's debugging or doing configuration or what changing things, you often have to get properties that are very file system specific that aren't specified on mount, but matter for the mount. So we have a PROC FSFS debug data that shows the device info reported by the remote system, the file system info reported by the remote system, and these tag and values have no meaning to some file systems and to others they do. So you could have this set of keyword value, keyword value, keyword value, or flags. Because there's a lot of information that matters to report, but we have no way of reporting it other than just in a PROC thing. So we can sort of, like if there's a way to kind of go underneath the mount thing and show file system specific attributes that may deal with the underlying block devices, they may deal with the remote system or whatever, those may be useful. And I was thinking about also from a term of namespaces, I don't, in some cases, some of these namespace related things, there may be no interface to set them this way, or intuitively, but if you change them, you need to be notified, well, how would I do that today? I'd have to do a BPF trace point and turn on trace, I don't know, remount or something. I mean, there'd be some EBPF trace point I'd have to turn on in user space to note that it changed. Because today there's... That's the issue David was talking about, I think. Yeah. Like right now, the only thing I can think of is those parms would change, at least the middle of those, on remount, so I need to be notified on remount. But is there another case where we'd have to notify? I don't know. Well, I have a notification thing implemented. The reason I haven't put it upstream yet is that I need some way to deal with what happens when there's a buffer over on an event buffer. And that one of the things FS Info was going to do was provide the way to query this. Could do it with this instead? One other objection to this is a path name is not sufficiently accurate or it can be ambiguous because you can have mounts stacked one above the other, hiding the mount below, but you still need to get to the mount below. Now, you could... I see at the bottom... Yeah, use that as the prefix of your query. Oh, that's the separate mount namespace. This isn't the separate mount namespace. You need to be able to... One thing I did with FS Info is rather than giving a path, give a mount number. So there needs to be some way to do that. Yes, if you look at the patch, it has that. So you can have... You can look at the mount Info, well, yeah. In which case? Based on the IB. In which case the path name parameter is then superfluous. And if we can avoid evaluating it at all, we should do it. Yeah, but it doesn't hurt. I mean, the path sometimes points at something that is relevant, right? If you're querying something about the FS or the mount, so the specific path doesn't matter. But sometimes it matters, and as Miklos said in the patch, it can also the path point to a process object and then you can query process properties. Yeah, I mean... Just one. Miklos, could you write down a system call example? Like how the system call would be called, for example, querying a mount in the document because I don't have it represented right now. I'm not sure. He's not in the... What's the question? If the system call that's proposed, what arguments does it take? This one? How is it called? Oh, getexutter. This is translated to... Oh, this is really just an extension on the exeter system call. I didn't have time to look at it. Yeah, getexutter.dot. That's it. It's querying the dot there. It's querying the current directory. That's what it is. So one thing that kind of jumps out at me on this is that some of these are structured in a way, right? So the getexutter mount info probably would look similar for ext4 and butterfs. And maybe the mount namespace thing, too. Those are things that are already standard in Poc, right? So one of the things that I was kind of struggling with is there is value if you have your debug. Let's say you had a problem with your whatever company, right? And you had a customer, right? You may want to query some property of the ext4 mount that is ext4 specific. And the same thing I think happens with SIFs or NFS or whatever. You may want to query something that has nothing to do with any other file system. And so how do we tag something that is not standard form? Let me try. Let me try. I guess I'm not... I think it's not particularly interesting to worry about the file system's specific things because applications who are going to be using that have to know about that particular file system. And that becomes a slightly different problem, right? So for example, I already have a way for somebody to find out ext4 specific mount information for a particular block device. You go through slash sys slash fs slash ext4 slash block device name, and then I have a whole bunch of stuff that you can query there. I could change it to use this new fancy x-adder system, right? But it's extra code. I'm still going to have to preserve the old way of doing things because backwards compatibility. And for programs who know about ext4, they can just simply do it that way, right? Forcing everybody to use this x-adder system for file system dependent systems, I think is a bad idea. If a file system wants to do that because they don't want to, you know, figure out how to make it work using sys fs, sure. But I don't think it's worthwhile for me to take my existing mechanism which uses sys fs and move it into this get-adder for ext4 specific information. I just don't see the value at it. But this mechanism is available inside containers where sys fs might not be available inside a container. I mean, that's a good point. And by the way, I generally, with this point, like in proc, I can get stuff in proc for debugging. And if I'm debugging a container... Proc might not be available either. Well, what I'm getting at is that hopefully, if this is, you know, Azure or Amazon or Google Cloud or something, hopefully they have some support person who can get it at the sys fs or proc fs. But let me give a counter example. NFS, SMB, various file systems have stats. Well, the stats don't... There's no real easy way that I know of to go into proc or sys fs. I mean, we do. That's how we export it right now, proc fs, sys stats. But it's kind of ugly because that means I'm querying stats for every mount because I don't have a... There's not a mount. You know, I can't go into a pseudophile directory with the mount and just get the stats for the mount that's slow. So there's no X adder I can query on a permount basis. I end up dumping the stats. When I say stats, you know, these are the underlying operations that are occurring. But I don't think NFS can do... I mean, we have... There is an NFS stat program and there's an SMB stat program and all that, but I'm sure every file system has one. But how do you navigate stats? Because those can't work in sys. Well, in NFS info, I made one of the attribute types, get me the stats of that file system. You suppose you could do the same thing in that because it gives you a huge string, the string that the file... But is it... But then you have to browse it. I want it for that mount, not for the whole system. Yeah, well, that's what I did. You specified the mount number. So, Steve, this should answer your question if you want to get specific sys info, you can do it like that. You create your own namespace and there should be a dynamic way to register your namespace. But also, referring to your talk about extending stat X, I think I understand what Ted says. There's no reason to change the way to extract X before specifics. But if sys wants to make offline bit generic, there's an interface to use. Right? This will be the wrong place for that. Hm? What? The offline bit should be done through stat X, not here, but... I fully agree for different reasons. It needs to be optimal, but nevertheless, as a generic concept, we have sys specific virtual Xatter. We want to make it generic. Let's use this. Of course, you need to maintain your old ones, SMB sys. But this is a way forward to make something generic that does not require allocating space in the stat X flag's namespace. There is an objection to do that. There is an objection from Greg to dump binary struct blobs in this interface. He says, we need this interface to be structural. The field exists or not exists. It will be easier for standardizing the interface. Okay. By the way, with respect to dumping stats... Here is Ian speaking. With respect to dumping stats, I believe that NFS, for example, dumps stats per mount point, and it's keyed on the BDI virtual device number. Under sysfs, under the BDI stats, or maybe it's in the back FS, but I believe that NFS do provide the per mount statistics. It's in broke. It's in broken mount stats. It's somewhere, and you can actually grab hybrid statistics only for a single file system. It's not doable with current, like frameworks. It's doable in either proc or in sysfs or in the back FS. You can do it per mount. It's not a problem. In general, as I said, I think I don't have a massive objection to the interface. One thing that I'd like to throw into the ring wouldn't it be worth to have a separate system call for this? Even if internally it uses the X adder callbacks. If I find it a bit weird for user space, they're not really extended attributes. There's no reason, no reason because extended attributes already have a namespace. Nobody uses extended attributes without a user trusted security. But those may end up on disk. Supported on disk? Yes. But these aren't internal to end up on disk, so they're a different, really different class of things. This is really, it would be... There is an opportunity because the get X adder family is missing get X adder at. Right? So I wouldn't... It's missing what, sorry? Get X adder at. There is no get X adder at. Ah, okay. Right? So this, I agree, this is an opportunity that we can take to extend the family to get X adder at. And at the same time, maybe require at whatever this is called. Fine. Yes. I just wouldn't call it X adders. I think this gives a very wrong impression. I think this is reasonable. One other thing. I don't know if this is really needed, but on the discussion, well, in Miklos' first patch set, get values, there was support for getting multiple values, like in using a vector. And Dave Jenner pointed out that XFS already had get multi X adder by octal from way back. So another opportunity is to extend the family to get X adder multi. I don't know. It needs to be justified, but it's possible. All right, let's cut it. Yes. All right. Thank you.